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