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

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

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

Разберем детально механизм ссылочной выгрузки в КД 2, выясним главные причины некорректного поведения и рассмотрим по шагам, как настроить правила конвертации правильно.

Понимание разницы между ПВД и ПКО

Для решения поставленной задачи в первую очередь важно четко разграничивать назначение двух ключевых элементов конфигурации КД 2:

  1. ПВД (Правила выгрузки данных) — определяют первоначальную выборку объектов из информационной базы источника. Если для справочника создано ПВД со стандартной выборкой, механизм универсального обмена выберет из базы абсолютно все элементы этого справочника и отправит их на выгрузку.
  2. ПКО (Правила конвертации объектов) — определяют правила сопоставления полей, алгоритмы заполнения реквизитов и синхронизации для конкретного типа данных как при самостоятельной выгрузке, так и при вызове «по ссылке».

Если нам требуется перенести только элементы, на которые ссылаются документы, отдельное ПВД для справочника номенклатуры не требуется вообще. Выгрузка номенклатуры должна происходить не самостоятельно, а транзитивно — по ссылке из табличной части документа.

Пошаговая настройка выгрузки по ссылкам

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

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

Диагностика проблем: почему номенклатура не выгружается вовсе

Если после отключения ПВД номенклатура перестала попадать в выгрузку, проанализируем следующие настройки в конфигурации КД 2 и в самой обработке обмена:

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

Почему кажется, что выгружается «весь справочник», даже без ПВД?

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

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

Альтернативный способ: выборка используемых элементов через ПВД

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

Посмотрим на пример обработчика в поле алгоритма выборки данных ПВД:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	ТабЧасть.Номенклатура КАК Ссылка
    |ИЗ
    |	Документ.ПоступлениеТоваровУслуг.Товары КАК ТабЧасть
    |ГДЕ
    |	ТабЧасть.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |	И ТабЧасть.Ссылка.Проведен = ИСТИНА";

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    ВыгрузитьПоПравилу(Выборка.Ссылка, , , , "Номенклатура");
КонецЦикла;

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

← На главную