Тонкие манипуляции при чтении сообщения обмена 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 час




Свежие комментарии