При настройке правил обмена в конфигурации «Конвертация данных 2.1» разработчики нередко сталкиваются с ситуацией, когда код, прописанный в обработчиках загрузки (например, в глобальном ПослеЗагрузкиОбъекта или в локальном событии ПКО ПослеЗагрузки), полностью игнорируется платформой. Даже принудительный вызов ошибки или функции Сообщить() не дает никакого результата при чтении файла обмена. Рассмотрим по шагам причины такого поведения и разберем способы его устранения.
Главным фактором, из-за которого универсальная обработка обмена не видит код обработчиков загрузки, является флаг совместимости с Библиотекой стандартных подсистем (БСП) в свойствах конвертации данных.
Разберем механизм возникновения проблемы:
УТП 1.2, УПП 1.3, КА 1.1, УТ 10.3) с использованием внешней или встроенной обработки «Универсальный обмен данными XML», эта обработка не распознает формат секций БСП и просто пропускает исполнение кода загрузки.Проанализируем специфику работы событий загрузки объектов в оперативной памяти, чтобы избежать логических ошибок при заполнении реквизитов:
После загрузки (в конкретном ПКО) и ПослеЗагрузкиОбъекта (глобальный) вызываются платформой тогда, когда поля объекта уже прочитаны из XML-файла и сопоставлены, но до момента физической записи объекта в информационную базу.Объект.Ссылка еще не инициализировано в базе данных. Если для заполнения связанных структур или создания подчиненных записей регистров требуется реальная ссылка, необходимо выполнить явную промежуточную запись объекта:
// Пример записи нового объекта для получения ссылки
Если Объект.ЭтоНовый() Тогда
Объект.Записать();
КонецЕсли;
ПередЗагрузкойОбъекта, ПередЗагрузкой или ПриЗагрузке переменной Отказ было присвоено значение Истина, чтение текущего объекта прекращается и последующие обработчики для него не вызываются.Объект.Записать().Рассмотрим, как правильно контролировать ход загрузки данных, если стандартные методы вывода не дают результата:
Сообщить() блокируются платформой. Для надежной фиксации факта срабатывания обработчика используйте запись в журнал регистрации:
ЗаписьЖурналаРегистрации(
"ОбменДанными.ПослеЗагрузки",
УровеньЖурналаРегистрации.Информация,
,
Объект.Ссылка,
"Обработчик успешно отработал для объекта: " + Строка(Объект)
);
Сервис -> Настройка выгрузки/загрузки модуля отладки в «Конвертации данных». Сформируйте модуль отладки выгрузки/загрузки, сохраните его во внешнюю обработку и подключите в обработке «Универсальный обмен данными XML» на вкладке «Отладка».ПослеЗагрузкиДанных, накапливая ссылки на нужные объекты в глобальной структуре Параметры.