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