Тонкие манипуляции при чтении сообщения обмена Enterprise Data

При загрузке из региональной конфигурации БП ошибка:

Ошибка проверки данных XDTO:
Значение: 'BELBBY2X   ' не соответствует простому типу: 
Несоответствие фасету MaxLength = '9'

Ошибка связана с тем, что код банка (БИК) выгружается с пробелом. Вмешаться в выгрузку нельзя — база-источник на облаке.

Отладка показывает, что ошибка возникает в модуле ОбменДаннымиXDTOСервер при чтении объекта XDTO:

Я решил впервые попробовать откорректировать XDO схему, увеличить максимальную длину.

Но для этого мне нужно было понять, какой пакет менять.

Отладчиком посмотрел как называются поля:

  • КомпонентыОбмена.ФайлОбмена.ЛокальноеИмя = Справочник.БанковскиеСчета
  • КомпонентыОбмена.ФайлОбмена.URIПространстваИмен = http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.8
  • ТипОбъектаXDTO = {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.8}Справочник.БанковскиеСчета

Нашел и захватил нужный пакет:

Заменил в нем определение свойства БИК:

Пришлось снять обязательность совпадения пакета (желтые галочки):

Потому что без этого появлялась ошибка:

Доработки   XDTO пакет EnterpriseData_1_8_6 Значение контролируемого свойства Пакет у объекта ПакетXDTO.EnterpriseData_1_8_6 не совпадает со значением в расширяемой конфигурации   

Проверил в отладчике, длина действительно 11:

ТипОбъектаXDTO.Свойства[1].Тип.Свойства[2].Тип.Свойства[1].ТипВладелец.Свойства[1].Тип.Свойства[0].Тип.Фасеты.Получить(ВидФасетаXDTO.МаксДлина) = 11

Но возникла новая ошибка:

Структура объекта не соответствует типу: {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.8}ОбщиеСвойстваДанныеКлассификатораБанков
Проверка свойства 'БИК':
форма: Элемент
имя: {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.8}БИК
тип:
Нарушен порядок следования значений свойств

Увы, конфигурация-источник выгружает свойства в другом порядке, а 1С (к своему позору в 2025 году) не умеет переставлять свойства XML в нужном порядке.

Решил просто пропускать банки в расчетных счетах, пусть в 1С их проставят руками, тут не особо критично наличие банков. Получился такой код:

&ИзменениеИКонтроль("ПрочитатьСообщениеОбмена")
Процедура дор_ПрочитатьСообщениеОбмена(КомпонентыОбмена, Результаты, ТаблицыДляЗагрузки, РежимАнализа)

	...
	
#Вставка     
		Попытка
#КонецВставки
		ОбъектXDTO     = ФабрикаXDTO.ПрочитатьXML(КомпонентыОбмена.ФайлОбмена, ТипОбъектаXDTO); // Объект зачитываем всегда.
#Вставка     
		Исключение                                               	
        	//КомпонентыОбмена.ФайлОбмена - это ЧтениеXML
			ОписаниеОшибки = ОписаниеОшибки();
			//Пропускаем сбойный элементы
			Если КомпонентыОбмена.ФайлОбмена.Имя = "ДанныеКлассификатораБанков" Тогда
				КомпонентыОбмена.ФайлОбмена.Пропустить();
				Продолжить;              
			Иначе                                
				//Другие ошибки не игнорируем
				ВызватьИсключение ОписаниеОшибки;
			КонецЕсли;
    	КонецПопытки;
#КонецВставки

	...
	
КонецПроцедуры


Среда: УНФ 3.0.12.146 Объем: 1.5 час

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *