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

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

При обмене данными с помощью обработки УниверсальныйОбменДаннымиXML или конфигурации 1С:Конвертация данных 2.1 можно столкнуться с внезапной ошибкой выгрузки. В журнале регистрации или окне сообщений выводится текст следующего вида:

Ошибка получения значения свойства объекта (по имени свойства источника)
ОписаниеОшибки = Поле объекта не обнаружено (Код)
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML(8211)

Проанализируем причины возникновения этой проблемы и рассмотрим практические способы ее устранения.

Почему возникает ошибка

Разберем природу проблемы на уровне платформы 1С:Предприятие. Ошибка выгрузки происходит при обработке элементов с составным (полиморфным) типом данных — например, в Планах видов характеристик (ВидыСубконтоХозрасчетные), где типом значения может выступать как справочник, так и перечисление.

В отличие от справочников или документов, объекты типа ПеречислениеСсылка не имеют стандартных реквизитов Код или Наименование. Если Правило конвертации свойств (ПКС) настроено на считывание свойства Код у объекта источника, но в качестве источника передается перечисление (например, Виды платежей в бюджет (фонды)), система обращается к несуществующему реквизиту Источник.Код и вызывает фатальную ошибку.

Способ 1. Проверка и очистка правил конвертации

Самая распространенная причина — случайная установка Правила конвертации объектов (ПКО) со свойством Код для составного реквизита или неверно назначенного ПКО для значения субконто.

  1. Откроем правила обмена в конфигурации Конвертация данных.
  2. Найдем ПКО, на которое указывает ошибка (например, ВидыСубконтоХозрасчетные).
  3. Проверим список Правил конвертации свойств (ПКС). Убедимся, что для составных типов не назначено жесткое ПКО, рассчитывающее на наличие реквизита Код у всех возможных типов.
  4. Если для объекта-перечисления случайно назначили ПКО с выгрузкой кода, сбросим указанное ПКО в строке ПКС.

Способ 2. Настройка таблицы сопоставления правил в ПКС

Если реквизит источника имеет составной тип, выгружаемому свойству необходимо явно задать соответствие правил для каждого типа:

  1. Откроем настройки нужного ПКС.
  2. Перейдем на вкладку сопоставления правил для составного типа.
  3. Для типов-справочников укажем соответствующее ПКО справочника.
  4. Для типов-перечислений выберем ПКО, предназначенное для перечислений (содержащее правила конвертации значений — ПКЗ).

Способ 3. Динамический выбор ПКО в обработчике «ПередВыгрузкой»

Если тип объекта определился динамически в процессе выполнения обмена, переопределим используемое ПКО с помощью кода в обработчике ПередВыгрузкой для ПКО или ПКС:


Если ТипЗнч(Источник) = Тип("ПеречислениеСсылка.ВидыПлатежейВБюджет") Тогда
    ИмяПКО = "ВидыПлатежейВБюджет";
КонецЕсли;

Способ 4. Проверка типа объекта перед выгрузкой свойства

Чтобы избежать обращения к несуществующему реквизиту Код, в обработчике ПередВыгрузкой конкретного ПКС (со свойства Код) установим проверку типа источника:


Если Метаданные.Перечисления.Содержит(Источник.Метаданные()) Тогда
    Отказ = Истина;
КонецЕсли;

Также можно выключить флаг «Получать из источника» в настройках ПКС и вычислять выгружаемое значение программно:


Если Найти(Источник.Метаданные().ПолноеИмя(), "Перечисление") > 0 Тогда
    Значение = XMLСтрока(Источник);
Иначе
    Значение = Источник.Код;
КонецЕсли;

Рекомендации по отладке

Для точного поиска объекта, выгрузка которого приводит к сбою, воспользуемся режимом отладки обработки УниверсальныйОбменДаннымиXML. Сгенерируем модуль отладки выгрузки и выполним обмен через Конфигуратор в режиме отладки. Это позволит точечно определить момент, когда значение типа ПеречислениеСсылка передается в ПКО, ожидающее справочник или ПВХ.

← На главную