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