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