При настройке обмена через универсальный формат в конфигурации 1С:Конвертация данных 3.0 (КД3) специалисты часто сталкиваются с ошибкой выполнения обработки ЗагрузкаПравилСинхронизацииИзФайлов. Вызов ошибки выглядит следующим образом:
{Обработка.ЗагрузкаПравилСинхронизацииИзФайлов.Форма.Форма.Форма(475)}: Поле объекта не обнаружено ТекПКО.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов[СтруктураАтрибутов.ВариантИдентиф...
В этой статье мы подробно разберем, почему возникает данное исключение, рассмотрим регламентный порядок загрузки правил и изучим несколько рабочих способов устранения проблемы.
Выясним причину, почему платформа 1С выдает сбой при попытке обратиться к менеджеру перечислений. В правилах конвертации объектов (ПКО), которые предназначены только для отправки данных (односторонние правила), вариант идентификации объектов не заполняется. Из-за этого при формировании файлов правил выгружается пустой атрибут: ВариантИдентификации="".
В платформе 1С обращение к значениям перечисления по строковому имени выполняется с помощью квадратных скобок: Перечисления.ВариантыИдентификацииОбъектов[ИмяВарианта]. Если передать туда пустую строку "", платформа не возвращает пустую ссылку или Неопределено, а генерирует ошибку времени выполнения «Поле объекта не обнаружено», воспринимая пустую строку как попытку обратиться к несуществующему реквизиту объекта.
Прежде чем переходить к исправлению ошибки, разберем правильную последовательность действий для корректной загрузки правил синхронизации в КД3:
Загрузка структуры формата в информационную базу КД3 загружается используемый формат данных.Загрузка структуры конфигурации.Выгрузка правил синхронизации через универсальный формат. Она формирует комплект XML-файлов с правилами.МенеджерОбменаЧерезУниверсальныйФормат.Загрузка правил синхронизации из файлов, указывается каталог со сформированными файлами, выбирается нужная конвертация и модуль менеджера обмена.Если требуется срочно загрузить правила без изменения конфигурации КД3 и написания кода, разберем вариант с корректировкой выгруженного файла правил. Посмотрим на алгоритм действий:
PKO.xml в любом текстовом редакторе (например, Notepad++).ВариантИдентификации="" на значение по умолчанию, например: ВариантИдентификации="ПоУникальномуИдентификатору".PKO.xml и повторим загрузку правил через обработку.Для предотвращения подобной ошибки при последующих загрузках выгрузок целесообразно добавить проверку заполнености строки перед обращением к перечислению. Рассмотрим, как это реализовать программно.
В модуле формы обработки ЗагрузкаПравилСинхронизацииИзФайлов найдем процедуру ЗагрузитьПКО и заменим прямое обращение к перечислению на проверку с помощью функции ЗначениеЗаполнено():
Если ЗначениеЗаполнено(СтруктураАтрибутов.ВариантИдентификации) Тогда
ТекПКО.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов[СтруктураАтрибутов.ВариантИдентификации];
Иначе
ТекПКО.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов.ПустаяСсылка();
КонецЕсли;
Данную доработку рекомендуется выполнять через расширение конфигурации, чтобы не снимать информационную базу Конвертации данных 3.0 с типовой поддержки.
Проанализируем еще один системный вариант решения. Ошибка чтения пустых значений вариантов идентификации была исправлена разработчиками в более свежих релизах конфигурации Конвертация данных, редакция 3.0, а также в обновленных версиях обработки ВыгрузкаПравилСинхронизацииЧерезУниверсальныйФормат.epf. Обновление базы КД3 и используемых выгрузчиков устраняет необходимость вручную править XML-файлы или дописывать код обмена.