При настройке правил обмена в конфигурации «Конвертация данных 2.1» (КД 2) разработчики часто сталкиваются с ситуацией: после выгрузки структуры метаданных из конфигурации-приемника (например, «1С:Управление торговлей 11») и загрузки файла в КД в списке объектов полностью отсутствуют регистры сведений. Из-за этого невозможно создать стандартное правило конвертации объектов (ПКО) для переноса данных, таких как штрихкоды номенклатуры.
Разберем подробно причины такого поведения обработки выгрузки структуры метаданных и рассмотрим практические способы решения этой проблемы.
Для выгрузки структуры конфигурации в файл формата XML традиционно используется внешняя обработка MD83Exp.epf. Проанализируем, почему регистры могут не попадать в результирующий файл:
ПриСозданииНаСервере разработчики платформенных шаблонов жестко прописывали значения реквизитов, отключающих выгрузку регистров:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтаФорма.Заголовок = "Выгрузка описания структуры метаданных ("+ВерсияОбъектаНаСервере()+")";
Объект.НеВыгружатьРегистрыСведений = Истина;
Объект.НеВыгружатьРегистрыНакопления = Истина;
Объект.НеВыгружатьРегистрыБухгалтерии = Истина;
Объект.НеВыгружатьРегистрыРасчета = Истина;
Объект.НеВыгружатьДвиженияДокументов = Истина;
КонецПроцедуры
Истина.Если требуется быстро выгрузить структуру метаданных с регистрами сведений, не меняя структуру управляемой формы, изменим значение реквизита перед выполнением серверной процедуры выгрузки. Откроем модуль формы обработки в конфигураторе и скорректируем обработчик команды Выгрузить:
&НаКлиенте
Процедура Выгрузить(Команда)
Перем АдресФайла;
ОчиститьСообщения();
// Принудительно включаем выгрузку регистров сведений
Объект.НеВыгружатьРегистрыСведений = Ложь;
Состояние(Нстр("ru='Выполняется выгрузка описания структуры метаданных конфигурации. Пожалуйста, подождите...'"));
Если ВыполнитьВыгрузкуНаСервере(АдресФайла) Тогда
// Завершение выгрузки
КонецЕсли;
КонецПроцедуры
После этой правки обработка корректно обойдет коллекцию регистров сведений и поместит их описание в результирующий XML-файл.
Рекомендуется использовать актуальный файл MD83Exp.epf из комплекта поставки конфигурации «Конвертация данных» актуальных версий (например, 2.1.8.2 и выше). В обновленных вариантах управляемая форма оптимизирована, содержит доступные тумблеры и флаги для управления составом метаданных, а также поддерживает работу как в тонком, так и в толстом клиенте.
Если конфигурация-приемник имеет большой объем метаданных, а перенести требуется только один регистр, нет необходимости перезагружать всю структуру целиком. Добавим объект вручную непосредственно в информационной базе КД 2:
РегистрСведенийЗапись.ШтрихкодыНоменклатуры (обратим внимание, что в КД регистры оперируют объектами записей или наборов записей).Штрихкод (тип Строка).Номенклатура, Характеристика, Упаковка, ТипШтрихкода.После сохранения объект сразу станет доступен для выбора в качестве объекта-приемника в правилах конвертации объектов (ПКО).
Выясним важное отличие при переносе штрихкодов из нетиповых конфигураций или устаревших версий (таких как «Управление торговлей 10.3»):
Штрихкоды, а ссылка на позицию номенклатуры задавалась измерением Владелец.ШтрихкодыНоменклатуры. Он является независимым и непериодическим, а ключевым измерением выступает строка Штрихкод. Товар привязывается через измерение Номенклатура.Поэтому при настройке конвертации в качестве приемника в ПКО необходимо выбирать именно РегистрСведенийЗапись.ШтрихкодыНоменклатуры.
Посмотрим на альтернативный метод, который позволяет обойтись без отдельного ПКО для регистра сведений. Передадим штрихкод в составе данных самой номенклатуры, используя параметры объекта, а запись в регистр сформируем программно в обработчике события «После загрузки» ПКО «Номенклатура»:
// Обработчик "После загрузки" объекта Номенклатура
Если Не ПустаяСтрока(ПараметрыОбъекта["Штрихкод"]) Тогда
Менеджер = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
Менеджер.Штрихкод = ПараметрыОбъекта["Штрихкод"];
Менеджер.Номенклатура = Ссылка;
// Заполняем остальные реквизиты при необходимости
// Менеджер.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
Попытка
Менеджер.Записать(Истина);
Исключение
ЗаписьЖурналаРегистрации("Ошибка переноса штрихкода",
УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Этот подход упрощает правила обмена, исключая необходимость создания дополнительных правил выгрузки данных (ПВД) под независимый регистр сведений.