Как исправить ошибку «Поле объекта не обнаружено (ЮрЛицо)» при обмене данными через XML

Программист 1С v8.3 (Обычные формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

При настройке обмена данными между различными конфигурациями 1С (например, при перегрузке документов из Бухгалтерии предприятия 3.0 в ERP Управление предприятием) специалисты часто сталкиваются с ошибкой в типовой обработке УниверсальныйОбменДаннымиXML. Ошибка выглядит следующим образом: Поле объекта не обнаружено (ЮрЛицо) и указывает на модуль объекта обработки загрузки. Разберем детально, почему это происходит и как правильно настроить правила конвертации, чтобы устранить проблему.

Анализируем причину возникновения ошибки

Для начала проанализируем место возникновения ошибки. В сообщении об ошибке часто фигурирует строка кода Возврат Менеджер[Значение];. Разберем, что происходит в этот момент внутри системы:

  1. Загрузка метаданных: Когда файл обмена XML считывается в базе-приемнике, загрузчик доходит до узла, содержащего значение перечисления.
  2. Обращение к менеджеру: Переменная Менеджер в данном контексте является менеджером конкретного перечисления в базе-приемнике (например, Перечисления.ЮрФизЛицо).
  3. Поиск по имени: Переменная Значение содержит строковое представление имени значения, которое пришло из базы-источника. В нашем случае это строка "ЮрЛицо".
  4. Сбой: Код пытается программно получить значение перечисления по его имени: Перечисления.ЮрФизЛицо["ЮрЛицо"]. Если в конфигурации-приемнике (ERP) значение перечисления называется иначе (например, ЮридическоеЛицо), система выдает исключение «Поле объекта не обнаружено», так как свойства с именем «ЮрЛицо» у менеджера не существует.

Это классическая ситуация при обмене между БП и ERP. В Бухгалтерии значение часто называется ЮрЛицо, а в современных конфигурациях на базе УТ 11 (включая ERP и КА) оно называется ЮридическоеЛицо.

Шаг 1: Настройка правил конвертации значений (ПКЗ)

Основная ошибка заключается в том, что разработчик надеется на автоматическое сопоставление свойств. Однако, если имена объектов в метаданных не совпадают на 100%, автоматика не сработает. Нам необходимо явно указать соответствие в базе Конвертация данных 2.0.

Рассмотрим последовательность действий в конфигурации «Конвертация данных»:

  1. Найдем правило конвертации объектов (ПКО) для соответствующего перечисления. Обычно это ЮрФизЛицо.
  2. Перейдем на закладку «Конвертация значений».
  3. Добавим новую строку соответствия.
  4. В колонке «Источник» выберем значение ЮрЛицо.
  5. В колонке «Приемник» выберем значение ЮридическоеЛицо.
  6. Повторим процедуру для значения ФизЛицо, сопоставив его с ФизическоеЛицо.

После этого при выгрузке в XML будет записываться не внутреннее имя источника, а внутреннее имя приемника, либо специальный идентификатор, который позволит загрузчику корректно интерпретировать данные.

Шаг 2: Проверка связанных правил (ПКО и ПКС)

Выясним причину, по которой ошибка может сохраняться даже после настройки ПКЗ. Проанализируем ситуацию: ошибка может возникать не в самом документе ПоступлениеТоваровУслуг, а в справочниках, которые он тянет за собой по ссылкам (например, Контрагенты или Организации).

Проверьте следующие моменты:

Шаг 3: Техническая отладка в базе-приемнике

Если визуальный осмотр правил не помогает, воспользуемся методом отладки. Рассмотрим, как «отловить» конкретный объект, вызывающий сбой:

  1. Откроем базу-приемник (ERP) в режиме Конфигуратора.
  2. Найдем обработку УниверсальныйОбменДаннымиXML. Если используется встроенная в конфигурацию, найдем ее в составе метаданных, если внешняя — откроем файл.
  3. Перейдем в модуль объекта и установим точку останова на строке, где происходит вызов Менеджер[Значение] (в районе строки 616, в зависимости от версии обработки).
  4. Запустим загрузку данных в режиме предприятия.
  5. Когда выполнение прервется, проанализируем содержимое переменных в табло.

Пример анализа переменных в отладчике:


// В табло отладчика:
// Менеджер = {ПеречислениеМенеджер.ЮрФизЛицо}
// Значение = "ЮрЛицо"

В этот момент мы точно увидим, какое именно перечисление дает сбой. После этого достаточно вернуться в «Конвертацию данных» и поправить именно это ПКО.

Особенности ERP и кэширование метаданных

Важно помнить, что ERP — это сложная система, где структура метаданных может отличаться от ожидаемой. Например, реквизит ЮрФизЛицо может быть не просто перечислением, а частью сложной логики партнеров и контрагентов.

Также проанализируем проблему кэша. Если вы только что изменили состав перечисления в ERP или обновили правила, убедитесь, что:

Заключение

Подводя итог, можно сказать, что ошибка Поле объекта не обнаружено (ЮрЛицо) — это всегда сигнал о несоответствии строкового идентификатора в XML-файле и реального имени объекта в дереве метаданных конфигурации-приемника. Решается эта проблема исключительно через настройку Правил конвертации значений (ПКЗ) в КД 2.0 или через написание обработчика ПередЗагрузкой, где значение будет принудительно подменено на корректное.

Рассмотрим пример кода для обработчика ПКС «ПередЗагрузкой», если вы не хотите создавать отдельное ПКО для перечисления:


Если Значение = "ЮрЛицо" Тогда
    Значение = "ЮридическоеЛицо";
ИначеЕсли Значение = "ФизЛицо" Тогда
    Значение = "ФизическоеЛицо";
КонецЕсли;

Такой подход также допустим, но использование стандартных механизмов ПКЗ является более правильным и «чистым» с точки зрения архитектуры обмена 1С.

← На главную