Как настроить автоматический перенос связанных справочников вместе с документами в 1С (КД 2.0)?

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

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

В этой статье мы подробно разберем, как решить эту задачу несколькими способами — от самого простого изменения флагов в правилах конвертации до профессиональной настройки на уровне Библиотеки стандартных подсистем (БСП) и обработчиков событий.

---

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

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

Давайте разберем по шагам, как отключить это ограничение:

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

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

---

Обратная сторона «быстрого» решения: риски избыточности и затирания данных

Хотя первый способ решает задачу за одну минуту, у него есть серьезные архитектурные недостатки, о которых важно знать заранее:

---

Способ 2. Правильная настройка ПКО справочников для защиты от перезаписи

Чтобы минимизировать риски затирания данных при использовании автоматического переноса по ссылкам, мы должны правильно настроить ПКО самих справочников (например, Номенклатура или Контрагенты).

Для этого в правилах конвертации этих справочников перейдем на вкладку «Настройки» и скорректируем следующие флаги:

  1. Включим флаг «Не замещать существующие объекты в приемнике при загрузке, а только создавать новые и заполнять их». Это критически важная настройка. Если система найдет элемент в базе-приемнике (по уникальному идентификатору UID или полям поиска), она не будет обновлять его реквизиты. Если элемент отсутствует — он будет успешно создан и заполнен.
  2. Выключим флаг «При переносе объекта по ссылке НЕ создавать новый объект, а только создавать ссылку». Если этот флаг будет ошибочно включен, то даже при попытке выгрузить справочник вместе с документом в приемнике запишется только пустая ссылка без самого элемента. Нам необходимо, чтобы этот флаг был строго снят.

---

Способ 3. Точечное управление выгрузкой через обработчик ПКС («Перед выгрузкой»)

Вместо того чтобы разрешать полную выгрузку абсолютно всех связанных справочников для всего документа, мы можем управлять этим процессом избирательно. Например, мы хотим автоматически переносить справочники Номенклатура и Контрагенты, но не хотим тянуть за собой справочники физических лиц, складов или пользователей.

Для этого мы можем использовать встроенный обработчик событий в правилах конвертации свойств (ПКС):

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

// Принудительно выгружаем объект полностью, игнорируя общие ограничения ПКО
ВыгрузитьОбъект = Истина;

Этот простой параметр указывает движку конвертации данных, что именно это конкретное свойство должно быть сериализовано в XML-пакет в полном объеме, независимо от глобальных флагов документа. Это наиболее гибкий и профессиональный подход в рамках самой КД 2.0.

---

Способ 4. Решение архитектурного уровня: Настройка в БСП («Выгружать при необходимости»)

Если ваши конфигурации построены на базе Библиотеки стандартных подсистем (БСП) и вы используете механизмы регулярной синхронизации, самым производительным решением будет отказаться от «насильного» изменения правил в КД 2.0 и использовать штатную функциональность планов обмена.

В БСП реализован интеллектуальный механизм отслеживания ссылок под названием «Выгружать при необходимости». Настроить его можно непосредственно в режиме «1С:Предприятие» без изменения конфигурации и правил обмена:

  1. Перейдем в настройки синхронизации данных со стороны базы-источника.
  2. В составе отправляемых данных найдем нужные справочники (Номенклатура, Контрагенты и др.).
  3. Установим для них режим выгрузки «Выгружать при необходимости» (вместо режимов «Выгружать всегда» или «Не выгружать»).

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

---

Способ 5. Использование Правил регистрации объектов (ПРО)

Еще один профессиональный инструмент разработчика в связке с БСП — это Правила регистрации объектов (ПРО), которые настраиваются на соседней вкладке в КД 2.0.

Мы можем написать алгоритм, который в момент регистрации документа на узле плана обмена будет программно регистрировать и связанные с ним справочники:


// Пример кода в правилах регистрации объектов (ПРО) для документа
// При регистрации документа регистрируем контрагента
Если ЗначениеЗаполнено(Источник.Контрагент) Тогда
    ПланыОбмена.ЗарегистрироватьИзменения(Получатели, Источник.Контрагент);
КонецЕсли;

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

---

Резюме и рекомендации

Мы рассмотрели пять различных способов решения задачи автоматического переноса связанных справочников. Подведем итог, какой метод выбрать:

← На главную