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