Почему в Конвертации данных не выгружаются регистры сведений и как перенести штрихкоды в УТ 11?

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

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

Разберем подробно причины такого поведения обработки выгрузки структуры метаданных и рассмотрим практические способы решения этой проблемы.

Анализ причин: почему пропадают регистры сведений

Для выгрузки структуры конфигурации в файл формата XML традиционно используется внешняя обработка MD83Exp.epf. Проанализируем, почему регистры могут не попадать в результирующий файл:

  1. Установка флагов по умолчанию в коде формы: В некоторых версиях обработки в процедуре ПриСозданииНаСервере разработчики платформенных шаблонов жестко прописывали значения реквизитов, отключающих выгрузку регистров:
    
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        
        ЭтаФорма.Заголовок = "Выгрузка описания структуры метаданных ("+ВерсияОбъектаНаСервере()+")";
        
        Объект.НеВыгружатьРегистрыСведений    = Истина;
        Объект.НеВыгружатьРегистрыНакопления  = Истина;
        Объект.НеВыгружатьРегистрыБухгалтерии = Истина;
        Объект.НеВыгружатьРегистрыРасчета     = Истина;
        Объект.НеВыгружатьДвиженияДокументов  = Истина;
        
    КонецПроцедуры
    
    Если в управляемом интерфейсе флажки исключения объектов скрыты или не выведены на форму, пользователь видит только поле выбора пути к файлу, а обработка отрабатывает с предустановленными флагами Истина.
  2. Кэширование настроек формы: Если элементы управления на форме присутствуют в конфигураторе, но не отображаются в режиме предприятия, виной может быть механизм сохранения пользовательских настроек платформы «1С:Предприятие 8». Помогает команда «Еще» → «Установить стандартные настройки».
  3. Устаревшая версия обработки: Использование старых релизов обработки из поставки КД 2.1.7 вместо актуальных версий ветки 2.1.8.х.

Способ 1. Программная корректировка параметров обработки

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


&НаКлиенте
Процедура Выгрузить(Команда)
    
    Перем АдресФайла;
    
    ОчиститьСообщения();
    
    // Принудительно включаем выгрузку регистров сведений
    Объект.НеВыгружатьРегистрыСведений = Ложь;
    
    Состояние(Нстр("ru='Выполняется выгрузка описания структуры метаданных конфигурации. Пожалуйста, подождите...'"));
    Если ВыполнитьВыгрузкуНаСервере(АдресФайла) Тогда
        // Завершение выгрузки
    КонецЕсли;

КонецПроцедуры

После этой правки обработка корректно обойдет коллекцию регистров сведений и поместит их описание в результирующий XML-файл.

Способ 2. Обновление версии обработки выгрузки

Рекомендуется использовать актуальный файл MD83Exp.epf из комплекта поставки конфигурации «Конвертация данных» актуальных версий (например, 2.1.8.2 и выше). В обновленных вариантах управляемая форма оптимизирована, содержит доступные тумблеры и флаги для управления составом метаданных, а также поддерживает работу как в тонком, так и в толстом клиенте.

Способ 3. Ручное добавление регистра в базу «Конвертация данных»

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

  1. Перейдем в раздел настройки метаданных целевой конфигурации.
  2. Создадим новый объект метаданных с именем РегистрСведенийЗапись.ШтрихкодыНоменклатуры (обратим внимание, что в КД регистры оперируют объектами записей или наборов записей).
  3. Добавим ключевые измерения: Штрихкод (тип Строка).
  4. Добавим реквизиты и измерения: Номенклатура, Характеристика, Упаковка, ТипШтрихкода.

После сохранения объект сразу станет доступен для выбора в качестве объекта-приемника в правилах конвертации объектов (ПКО).

Специфика структуры штрихкодов в УТ 11

Выясним важное отличие при переносе штрихкодов из нетиповых конфигураций или устаревших версий (таких как «Управление торговлей 10.3»):

  1. В старых версиях регистр назывался Штрихкоды, а ссылка на позицию номенклатуры задавалась измерением Владелец.
  2. В «Управление торговлей 11» регистр называется ШтрихкодыНоменклатуры. Он является независимым и непериодическим, а ключевым измерением выступает строка Штрихкод. Товар привязывается через измерение Номенклатура.

Поэтому при настройке конвертации в качестве приемника в ПКО необходимо выбирать именно РегистрСведенийЗапись.ШтрихкодыНоменклатуры.

Альтернативный вариант: перенос штрихкода через обработчик Номенклатуры

Посмотрим на альтернативный метод, который позволяет обойтись без отдельного ПКО для регистра сведений. Передадим штрихкод в составе данных самой номенклатуры, используя параметры объекта, а запись в регистр сформируем программно в обработчике события «После загрузки» ПКО «Номенклатура»:


// Обработчик "После загрузки" объекта Номенклатура
Если Не ПустаяСтрока(ПараметрыОбъекта["Штрихкод"]) Тогда
    
    Менеджер = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
    Менеджер.Штрихкод = ПараметрыОбъекта["Штрихкод"];
    Менеджер.Номенклатура = Ссылка;
    
    // Заполняем остальные реквизиты при необходимости
    // Менеджер.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
    
    Попытка
        Менеджер.Записать(Истина);
    Исключение
        ЗаписьЖурналаРегистрации("Ошибка переноса штрихкода", 
            УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
    КонецПопытки;
    
КонецЕсли;

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

← На главную