При настройке правил обмена в конфигурации «Конвертация данных 2.1» разработчики часто сталкиваются с ситуацией, когда в базе-приемнике реквизит документа имеет тип перечисления, а в базе-источнике такого перечисления нет вовсе или у объекта отсутствует аналогичный реквизит. Прямое обращение к менеджеру перечислений приемника из обработчиков выгрузки приводит к ошибке выполнения.
Рассмотрим подробно, почему возникает эта ошибка и как правильно настроить Правило Конвертации Свойства (ПКС), чтобы в приемник выгружался требуемый вид операции.
Обработчики событий со словом «Выгрузка» (ПередВыгрузкой, ПриВыгрузке) исполняются исключительно в контексте базы-источника. Если прописать в обработчике ПКС следующий код:
Значение = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПрочееСписание;
Платформа попытается найти объект метаданных ВидыОперацийСписаниеДенежныхСредств в конфигурации базы-источника. Если такого перечисления в источнике нет, 1С вызовет исключение с ошибкой «Поле объекта не обнаружено».
Проанализируем несколько способов передачи нужного значения перечисления в базу-приемник.
Для перечислений и предопределенных значений справочников Конвертация данных умеет автоматически сопоставлять значения по имени идентификатора. Для этого не требуется ссылаться на объекты метаданных источника.
ВидОперации).Перед выгрузкой данного ПКС и укажите имя идентификатора значения перечисления в виде строки:
Значение = "ПрочееСписание";
Если необходимо, чтобы код вычислялся непосредственно на стороне базы-приемника во время загрузки, используйте специальный параметр Выражение в обработчике ПКС Перед выгрузкой:
Выражение = "Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПрочееСписание";
В этом случае платформа передаст указанную строку в файл XML, а при загрузке обработка вычислит данное выражение в контексте базы-приемника.
Заполнить значение реквизита можно и на стороне базы-приемника в момент загрузки документа:
После загрузки задайте значение реквизита напрямую:
Объект.ВидОперации = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПрочееСписание;
Если после обновления правил в обработке выгрузки платформой всё равно выдается ошибка «Не найдено соответствие для значения Источника», причиной является кэширование.
Обработка Универсальный обмен данными XML кэширует скомпилированный модуль правил в памяти сеанса 1С. Чтобы изменения вступили в силу: