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