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