Как в «Конвертации данных» запретить выгрузку элементов справочников при переносе документа?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При настройке обмена данными в конфигурации «Конвертация данных 2.1» разработчики часто сталкиваются с задачей: необходимо перенести документ из одной базы в другую, не затрагивая сами справочники. Предполагается, что нормативно-справочная информация (контрагенты, номенклатура, склады) уже синхронизирована или выгружается отдельно. Однако при попытке переноса только документа в файл выгрузки все равно попадают полные данные связанных элементов справочников со всеми их реквизитами.

Разберем, почему конфигурация ведет себя подобным образом, выясним причину неэффективности стандартных настроек ПКО и рассмотрим практические способы решения этой проблемы — от простых строчек кода в обработчиках до штатных параметров конвертации.

Почему флаги в ПКО справочника не останавливают выгрузку

Проанализируем типовую ситуацию. Разработчик отключает правила выгрузки данных (ПВД) для справочников, оставляя активным только ПВД документа. В правиле конвертации объекта (ПКО) справочника выставляются флаги:

  1. «Не создавать новый объект в приемнике, если он НЕ найден»;
  2. «При переносе объекта по ссылке НЕ создавать объект, а только переносить ссылку».

Ожидается, что раз создание запрещено, то и сам объект выгружаться не должен. Но при формировании XML-файла элементы справочников все равно оказываются внутри выгрузки со всеми полями. Причина кроется в архитектуре «Конвертации данных 2.1»:

Указанные флаги регулируют исключительно этап загрузки данных в информационной базе-приемнике. Механизм выгрузки источника работает иначе: обходя реквизиты документа, движок видит заполненное ссылочное поле, находит соответствующее ПКО и рекурсивно сериализует объект источника вместе со всеми его свойствами, описанными в правилах конвертации свойств (ПКС).

Решение 1: Использование переменной ВыгрузитьТолькоСсылку в ПКС документа

Посмотрим на самое простое и распространенное решение, которое мгновенно устраняет проблему для конкретного реквизита. В ПКО документа необходимо открыть нужное ПКС (ссылающееся на справочник) и перейти в обработчик событий «Перед выгрузкой» (или «Перед выгрузкой свойства»).

В тексте обработчика пропишем следующую директиву:

ВыгрузитьТолькоСсылку = Истина;

Рассмотрим, как этот код меняет поведение конвертации. При обработке свойства движок формирует для узла только идентификатор ссылки (УИД), полностью пропуская выгрузку вложенных реквизитов (наименования, кода, реквизитов шапки и табличных частей справочника).

Важные нюансы и подводные камни:

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

Решение 2: Штатный флаг в ПКО документа без изменения кода

Если в документе содержится большое количество ссылочных реквизитов или табличных частей, прописывать код в каждом ПКС вручную долго и неудобно. Рассмотрим штатную альтернативу на уровне самого документа.

Разберем по шагам настройку в редакторе правил:

  1. Откроем ПКО выгружаемого документа.
  2. Перейдем на вкладку «Настройки».
  3. Установим флаг «Не выгружать объекты свойств источника по ссылкам».

В этом случае платформа автоматически перестанет разворачивать цепочки ссылочных реквизитов документа до полных объектов. В выгрузку попадут только те данные, которые достаточны для сопоставления объектов в базе-приемнике, что существенно сократит размер результирующего XML-файла и ускорит выгрузку.

Решение 3: Создание отдельного облегченного ПКО для справочника

Рассмотрим ситуацию, когда сопоставление по УИД не подходит (базы изначально независимы) и элемент в приемнике необходимо найти по полям поиска (например, по коду или наименованию), но при этом переносить остальные реквизиты нельзя.

Для решения такой задачи применим следующий подход:

  1. Создаем отдельное правило конвертации объекта (ПКО), например, Справочник_Контрагенты_ТолькоПоиск.
  2. В этом ПКО не создаем правило выгрузки данных (ПВД), чтобы справочник не выгружался самостоятельно.
  3. В составе ПКС оставляем включенными только те свойства, которые отмечены как «Поля поиска» (например, Код, Наименование, ИНН). Все остальные ПКС удаляем или отключаем.
  4. В настройках этого ПКО отключаем создание новых объектов и замещение существующих при загрузке.
  5. В ПКО документа для соответствующего реквизита в колонке «Правило конвертации» явно указываем созданное нами облегченное ПКО вместо основного.

Такой способ гарантирует, что в файл выгрузки попадут строго идентификационные данные для правильного сопоставления объекта в приемнике, а лишняя информация не будет дублироваться.

Решение 4: Программное управление в обработчике ПКО справочника

Если необходимо централизованно управлять выгрузкой справочника по ссылкам для всех документов конфигурации, проанализируем возможность использования встроенных переменных самого правила конвертации объекта.

В обработчике «Перед выгрузкой» ПКО справочника можно принудительно переопределить служебную переменную:

ТолькоПолучитьУзелСсылки = Истина;

Этот параметр сообщает алгоритму выгрузки, что полный состав реквизитов формировать не требуется и достаточно ограничиться получением узла ссылки. Это исключает необходимость редактирования множества ПКС в документах и позволяет управлять выгрузкой справочника из единой точки конфигурации обмена.

← На главную