Как настроить перенос единиц измерения и видов номенклатуры в Конвертации данных 2.1?

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

При переносе справочника номенклатуры из конфигураций платформы 1С 7.7 в современные версии 1С:Управление торговлей (УТ 11 / УТ 3) через конфигурацию Конвертация данных 2.1 разработчики часто сталкиваются с необходимостью унифицировать данные: установить всем позициям единый вид номенклатуры (например, «Товар») и базовую единицу измерения («шт»).

Разберем по шагам, как правильно настроить правила конвертации объектов (ПКО), правила конвертации свойств (ПКС) и написать обработчики событий для решения этой задачи.

Настройка переноса фиксированного вида номенклатуры

Рассмотрим ситуацию, когда в источнике (1С 7.7) виды номенклатуры отсутствуют либо их требуется свести к единому значению «Товар» в приемнике (1С 8).

Для реализации такой схемы настроим отдельное ПКО:

  1. Создадим правило конвертации объекта Строка -> Справочник.ВидыНоменклатуры. В качестве источника оставляем пустое значение или строковый тип.
  2. Создадим ПКС для реквизита Наименование. Источник оставляем пустым, приемник — Наименование. В обработчике ПередВыгрузкой укажем: Значение = "Товар";
  3. В справочнике ВидыНоменклатуры конфигурации 1С:Управление торговлей обязательным является реквизит ТипНоменклатуры. Создадим для него ПКС и в обработчике ПередВыгрузкой зададим соответствующее значение перечисления: Значение = "Товар";
  4. В ПКО Номенклатура для свойства ВидНоменклатуры указываем созданное ПКО вида номенклатуры.

Важно для выгрузки из 1С 7.7: При изменении обработчиков выгрузки для конфигураций 1С 7.7 не забывайте нажимать кнопку выгрузки модуля выгрузки и обновлять код в обработке выгрузки (V77Exp.ert), так как алгоритмы для семерки компилируются непосредственно в текст модуля.

Установка единиц измерения по умолчанию: разбор ошибок

Выясним причину популярной ошибки, возникающей при попытке заполнить единицу измерения в обработчике ПослеЗагрузки ПКО Номенклатура.

Посмотрим на пример некорректного кода:


// ОШИБКА: реквизиту ссылочного типа присваивается строка
Объект.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт", Истина).Наименование;

В этом примере допущены две критические ошибки:

  1. Реквизиты ЕдиницаИзмерения и ЕдиницаДляОтчетов являются ссылочными полями (тип СправочникСсылка.КлассификаторЕдиницИзмерения или СправочникСсылка.УпаковкиЕдиницыИзмерения). Попытка записать в них строку через .Наименование приводит либо к ошибке приведения типов, либо к очистке реквизита.
  2. Поиск по краткому наименованию «шт» ненадежен, так как в базе-приемнике единица может быть записана как «шт.», «Штука» или с пробелами.

Корректный код для обработчика «После загрузки»

Проанализируем правильный вариант заполнения ссылки на классификатор единиц измерения. В Общероссийском классификаторе единиц измерения (ОКЕИ) штука имеет фиксированный код 796. Поиск по коду гарантирует точное сопоставление.

В обработчике ПослеЗагрузки ПКО Номенклатура пропишем следующий код:


СсылкаШт = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");

Если Не ЗначениеЗаполнено(СсылкаШт) Тогда
    СсылкаШт = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт", Истина);
КонецЕсли;

Если ЗначениеЗаполнено(СсылкаШт) Тогда
    Объект.ЕдиницаИзмерения = СсылкаШт;
    
    // Если в структуре приемника используется ЕдиницаДляОтчетов
    Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Объект, "ЕдиницаДляОтчетов") Тогда
        Объект.ЕдиницаДляОтчетов = СсылкаШт;
    КонецЕсли;
КонецЕсли;

Перенос различных единиц измерения и упаковок

Если в базе-источнике (1С 7.7) используются различные единицы (метры, килограммы, пачки), разберем правильную архитектуру их переноса:

  1. Базовые единицы: В 1С 7.7 базовой единицей номенклатуры является реквизит БазоваяЕдиница (справочник ОКЕИ). В Конвертации данных настраиваем ПКО ОКЕИ -> КлассификаторЕдиницИзмерения с синхронизацией по полям Код и Наименование. В ПКО Номенклатура привязываем ПКС ЕдиницаИзмерения к этому правилу.
  2. Упаковки и коэффициенты: Производные единицы в 1С 7.7 хранятся в подчиненном справочнике Единицы. В УТ 11/3 для них предназначен справочник УпаковкиЕдиницыИзмерения (или Упаковки). Для их переноса создается отдельное ПКО, где реквизит Владелец сопоставляется с номенклатурой, а Коэффициент и ЕдиницаИзмерения (ОКЕИ) переносятся напрямую.

Обратите внимание: чтобы индивидуальные упаковки отображались и применялись в документах базы 1С:Управление торговлей, в соответствующем ВидеНоменклатуры должна быть включена опция использования упаковок.

← На главную