Как подставить значение перечисления при выгрузке в Конвертации данных, если его нет в базе-источнике?

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

При настройке правил обмена в конфигурации «Конвертация данных 2.1» разработчики часто сталкиваются с ситуацией, когда в базе-приемнике реквизит документа имеет тип перечисления, а в базе-источнике такого перечисления нет вовсе или у объекта отсутствует аналогичный реквизит. Прямое обращение к менеджеру перечислений приемника из обработчиков выгрузки приводит к ошибке выполнения.

Рассмотрим подробно, почему возникает эта ошибка и как правильно настроить Правило Конвертации Свойства (ПКС), чтобы в приемник выгружался требуемый вид операции.

Причина возникновения ошибки «Поле объекта не обнаружено»

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

Значение = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПрочееСписание;

Платформа попытается найти объект метаданных ВидыОперацийСписаниеДенежныхСредств в конфигурации базы-источника. Если такого перечисления в источнике нет, 1С вызовет исключение с ошибкой «Поле объекта не обнаружено».

Способы решения задачи

Проанализируем несколько способов передачи нужного значения перечисления в базу-приемник.

Способ 1. Передача строкового идентификатора в обработчике «Перед выгрузкой»

Для перечислений и предопределенных значений справочников Конвертация данных умеет автоматически сопоставлять значения по имени идентификатора. Для этого не требуется ссылаться на объекты метаданных источника.

  1. Откройте Правило Конвертации Свойства (ПКС) для нужного реквизита (например, ВидОперации).
  2. Оставьте поле «Источник» пустым, если значение заполняется программно и не считывается напрямую из объекта базы-источника.
  3. Перейдите в событие Перед выгрузкой данного ПКС и укажите имя идентификатора значения перечисления в виде строки: Значение = "ПрочееСписание";
  4. Важно: Указывайте именно имя объекта из Конфигуратора (идентификатор), а не его синоним или представление.

Способ 2. Использование параметра Выражение

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

Выражение = "Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПрочееСписание";

В этом случае платформа передаст указанную строку в файл XML, а при загрузке обработка вычислит данное выражение в контексте базы-приемника.

Способ 3. Установка значения в событии «После загрузки»

Заполнить значение реквизита можно и на стороне базы-приемника в момент загрузки документа:

  1. Откройте Правило Конвертации Объектов (ПКО) выгружаемого документа.
  2. В обработчике события После загрузки задайте значение реквизита напрямую:
    
    Объект.ВидОперации = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПрочееСписание;
    

Что делать, если правила обновлены, но ошибка сохраняется?

Если после обновления правил в обработке выгрузки платформой всё равно выдается ошибка «Не найдено соответствие для значения Источника», причиной является кэширование.

Обработка Универсальный обмен данными XML кэширует скомпилированный модуль правил в памяти сеанса 1С. Чтобы изменения вступили в силу:

  1. Перезагрузите файл правил в обработке обмена данными.
  2. Перезапустите сеанс базы-источника в режиме «1С:Предприятие».
  3. Выполните повторный запуск выгрузки.
← На главную