Где находятся правила универсального формата обмена EnterpriseData и как настроить фильтрацию выгружаемых данных?

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

При настройке синхронизации данных между конфигурациями 1С на базе универсального формата (EnterpriseData / КД 3.0) разработчики часто сталкиваются с вопросом: где именно хранятся правила конвертации и как корректно исключить определенные позиции номенклатуры или справочников из обмена, чтобы они не попадали в базу-приемник вместе с документами.

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

Где хранятся правила универсального формата в конфигурации

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

  1. Общий модуль менеджера обмена: найдем в дереве метаданных модуль с именем МенеджерОбменаЧерезУниверсальныйФормат. В зависимости от используемой версии формата и конфигурации их может быть несколько, например: МенеджерОбменаЧерезУниверсальныйФормат13, МенеджерОбменаЧерезУниверсальныйФормат20 и т. д.
  2. Специализированные менеджеры обмена: модули, отвечающие за переопределяемую логику, такие как МенеджерОбменаЧерезУниверсальныйФорматПереопределяемый.

Внутри этих модулей реализована двухэтапная схема выгрузки объектов:

  1. Формирование структуры данных ДанныеИБ на основе выборки из информационной базы.
  2. Заполнение объекта ДанныеXDTO по правилам конвертации перед непосредственной сериализацией в XML.

Почему настройка правил регистрации (ПРД) не решает проблему полностью

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

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

Способы фильтрации данных при выгрузке

Рассмотрим основные технические варианты отсечения ненужных данных в обмене.

Вариант 1. Модификация выборки данных документа (ДанныеДокумента...)

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

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

  1. Установить фильтр по определенным группам или реквизитам номенклатуры, исключив ненужные строки.
  2. Обязательно пересчитать итоговые суммы в шапке документа (сумма документа, сумма НДС и др.), чтобы избежать расхождений и ошибок валидации XDTO.

// Пример фильтрации строк табличной части перед отправкой
Для Каждого СтрокаТовара Из СтруктураДанных.Товары Цикл
    Если СтрокаТовара.Номенклатура.НеВыгружатьВБухгалтерию Тогда
        // Исключаем строку из выгрузки и пересчитываем итоги
        СтруктураДанных.СуммаДокумента = СтруктураДанных.СуммаДокумента - СтрокаТовара.Сумма;
    КонецЕсли;
КонецЦикла;

Вариант 2. Обработка в событиях ПКО (ПриОтправкеДанных)

Посмотрим на этап конвертации объекта в XDTO. В обработчиках вида ПКО_Документ_..._Отправка_ПриОтправкеДанных доступна готовая структура ДанныеXDTO.

В данном обработчике можно выполнить следующие действия:

  1. Удалить элементы из коллекции ДанныеXDTO.Товары.
  2. Если после фильтрации табличная часть оказалась пустой и выгружать пустой документ не имеет смысла, выставить флаг Отказ = Истина, полностью отменив отправку объекта.

Вариант 3. Подмена номенклатуры на служебную позицию

Если простое удаление строк нарушает общую сумму документа и взаиморасчеты с контрагентом, оптимальным выходом является подмена ссылки. В процессе формирования ДанныеИБ нежелательная номенклатура заменяется на предопределенную обобщенную позицию (например, «Товары в ассортименте» или «Прочие услуги»).

Как применить доработки без снятия с поддержки

Чтобы сохранить типовую конфигурацию на поддержке, реализуем изменения одним из следующих способов:

  1. Расширения конфигурации: переопределим функции модуля МенеджерОбменаЧерезУниверсальныйФормат с помощью директив &Вместо, &После или &Перед.
  2. Подключение внешних правил: в типовой подсистеме обмена данными (БСП) в настройках параметров синхронизации можно загрузить внешний модуль правил обмена без изменения метаданных основной конфигурации.
← На главную