При настройке обмена данными между различными конфигурациями 1С (например, при перегрузке документов из Бухгалтерии предприятия 3.0 в ERP Управление предприятием) специалисты часто сталкиваются с ошибкой в типовой обработке УниверсальныйОбменДаннымиXML. Ошибка выглядит следующим образом: Поле объекта не обнаружено (ЮрЛицо) и указывает на модуль объекта обработки загрузки. Разберем детально, почему это происходит и как правильно настроить правила конвертации, чтобы устранить проблему.
Для начала проанализируем место возникновения ошибки. В сообщении об ошибке часто фигурирует строка кода Возврат Менеджер[Значение];. Разберем, что происходит в этот момент внутри системы:
Менеджер в данном контексте является менеджером конкретного перечисления в базе-приемнике (например, Перечисления.ЮрФизЛицо).Значение содержит строковое представление имени значения, которое пришло из базы-источника. В нашем случае это строка "ЮрЛицо".Перечисления.ЮрФизЛицо["ЮрЛицо"]. Если в конфигурации-приемнике (ERP) значение перечисления называется иначе (например, ЮридическоеЛицо), система выдает исключение «Поле объекта не обнаружено», так как свойства с именем «ЮрЛицо» у менеджера не существует.Это классическая ситуация при обмене между БП и ERP. В Бухгалтерии значение часто называется ЮрЛицо, а в современных конфигурациях на базе УТ 11 (включая ERP и КА) оно называется ЮридическоеЛицо.
Основная ошибка заключается в том, что разработчик надеется на автоматическое сопоставление свойств. Однако, если имена объектов в метаданных не совпадают на 100%, автоматика не сработает. Нам необходимо явно указать соответствие в базе Конвертация данных 2.0.
Рассмотрим последовательность действий в конфигурации «Конвертация данных»:
ЮрФизЛицо.ЮрЛицо.ЮридическоеЛицо.ФизЛицо, сопоставив его с ФизическоеЛицо.После этого при выгрузке в XML будет записываться не внутреннее имя источника, а внутреннее имя приемника, либо специальный идентификатор, который позволит загрузчику корректно интерпретировать данные.
Выясним причину, по которой ошибка может сохраняться даже после настройки ПКЗ. Проанализируем ситуацию: ошибка может возникать не в самом документе ПоступлениеТоваровУслуг, а в справочниках, которые он тянет за собой по ссылкам (например, Контрагенты или Организации).
Проверьте следующие моменты:
Контрагенты для свойства ЮрФизЛицо (или аналогичного) должно быть указано правило конвертации (ПКО), которое мы настроили на предыдущем шаге.Поле объекта не обнаружено.Если визуальный осмотр правил не помогает, воспользуемся методом отладки. Рассмотрим, как «отловить» конкретный объект, вызывающий сбой:
УниверсальныйОбменДаннымиXML. Если используется встроенная в конфигурацию, найдем ее в составе метаданных, если внешняя — откроем файл.Менеджер[Значение] (в районе строки 616, в зависимости от версии обработки).Пример анализа переменных в отладчике:
// В табло отладчика:
// Менеджер = {ПеречислениеМенеджер.ЮрФизЛицо}
// Значение = "ЮрЛицо"
В этот момент мы точно увидим, какое именно перечисление дает сбой. После этого достаточно вернуться в «Конвертацию данных» и поправить именно это ПКО.
Важно помнить, что ERP — это сложная система, где структура метаданных может отличаться от ожидаемой. Например, реквизит ЮрФизЛицо может быть не просто перечислением, а частью сложной логики партнеров и контрагентов.
Также проанализируем проблему кэша. Если вы только что изменили состав перечисления в ERP или обновили правила, убедитесь, что:
Подводя итог, можно сказать, что ошибка Поле объекта не обнаружено (ЮрЛицо) — это всегда сигнал о несоответствии строкового идентификатора в XML-файле и реального имени объекта в дереве метаданных конфигурации-приемника. Решается эта проблема исключительно через настройку Правил конвертации значений (ПКЗ) в КД 2.0 или через написание обработчика ПередЗагрузкой, где значение будет принудительно подменено на корректное.
Рассмотрим пример кода для обработчика ПКС «ПередЗагрузкой», если вы не хотите создавать отдельное ПКО для перечисления:
Если Значение = "ЮрЛицо" Тогда
Значение = "ЮридическоеЛицо";
ИначеЕсли Значение = "ФизЛицо" Тогда
Значение = "ФизическоеЛицо";
КонецЕсли;
Такой подход также допустим, но использование стандартных механизмов ПКЗ является более правильным и «чистым» с точки зрения архитектуры обмена 1С.