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