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