Почему при переносе номенклатуры из УТ 10.3 в УТ 11.4 не заполняются реквизиты вида номенклатуры и как это исправить?

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

При переходе со старых конфигураций 1С (таких как «Управление торговлей 10.3») на современные системы («Управление торговлей 11.4», «ERP Управление предприятием 2» или «Комплексная автоматизация 2») специалисты часто сталкиваются с неприятным эффектом. После успешного переноса справочника номенклатуры с помощью программы «Конвертация данных 2.1» данные в базе-приемнике кажутся заполненными, но при открытии карточки товара форма выглядит пустой или сломанной. Чтобы исправить это, приходится вручную заходить в каждый элемент и заново выбирать реквизит ВидНоменклатуры. Только после этого ручного действия форма обновляется, подставляя нужные поля и параметры.

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

Выясняем причину: денормализация данных в ERP и УТ 11

Чтобы понять, почему программа ведет себя подобным образом, обратимся к архитектурным различиям между старой платформой 10.3 и новой 11.4. В конфигурации «Управление торговлей 10.3» справочник ВидыНоменклатуры выполнял преимущественно классифицирующую роль. В современных же конфигурациях на базе ERP 2.0 значение этого реквизита определяет всю бизнес-логику карточки товара: от набора доступных свойств и характеристик до вариантов оформления продаж и ведения учета на складе.

Для оптимизации работы СУБД и повышения быстродействия системы при построении сложных отчетов разработчики фирмы 1С применили механизм денормализации данных. Это означает, что ключевые свойства, логически принадлежащие виду номенклатуры, физически дублируются непосредственно в табличной части и реквизитах самого справочника Номенклатура. К таким важным реквизитам относятся:

  1. ТипНоменклатуры (принимает значения из перечисления: Товар, Услуга, Работа, Тара и т.д.);
  2. ИспользоватьХарактеристики (булево свойство, определяющее учет по характеристикам);
  3. ВариантОформленияПродажи (настройка для печати и формирования документов реализации).

Когда вы переносите данные через «Конвертацию данных 2.1» напрямую, правила заполняют только сам ссылочный реквизит ВидНоменклатуры. При этом зависимые реквизиты карточки товара (в первую очередь, ТипНоменклатуры) остаются пустыми или заполняются значениями по умолчанию. Форма объекта ориентируется именно на физически записанный в объекте ТипНоменклатуры. Поскольку он не заполнен, форма не понимает, какие вкладки и поля показывать пользователю. Ручной перевыбор вида номенклатуры на клиенте запускает событие ПриИзменении, которое выполняет штатный код заполнения дублирующих реквизитов. Наша задача — автоматизировать этот процесс при переносе.

Решение 1: Заполнение зависимых свойств в обработчике «ПослеЗагрузки» ПКО

Самый логичный и чистый способ решения проблемы непосредственно в процессе импорта — написать программный код в правилах конвертации объектов (ПКО). В «Конвертации данных 2.1» для этого идеально подходит обработчик события ПослеЗагрузки. Этот код выполняется на стороне базы-приемника в момент, когда объект уже создан в оперативной памяти, но еще не записан в базу данных.

Разберем пример кода, который необходимо добавить в обработчик ПКО для справочника Номенклатура:


Если ЗначениеЗаполнено(Объект.ВидНоменклатуры) Тогда
    // Получаем ссылку на вид номенклатуры для извлечения свойств
    ВидОбъект = Объект.ВидНоменклатуры;
    
    // Заполняем тип номенклатуры напрямую из вида
    Объект.ТипНоменклатуры = ВидОбъект.ТипНоменклатуры;
    
    // Переносим настройки использования характеристик
    Объект.ИспользоватьХарактеристики = ВидОбъект.ИспользоватьХарактеристики;
    
    // Заполняем вариант оформления продаж, важный для последних релизов УТ 11.4
    Объект.ВариантОформленияПродажи = ВидОбъект.ВариантОформленияПродажи;
КонецЕсли;

Важное примечание: при написании кода в правилах конвертации обязательно учитывайте, что обращение к свойствам вида номенклатуры через точку (например, Объект.ВидНоменклатуры.ТипНоменклатуры) выполняет неявный запрос к базе данных. Если переносится большой объем номенклатуры (десятки тысяч позиций), это может существенно замедлить процесс загрузки. Для ускорения можно предварительно кэшировать данные или использовать запросы.

Решение 2: Использование стандартных экспортных методов конфигурации

Вместо того чтобы вручную перечислять все зависимые реквизиты, которые могут меняться от релиза к релизу, профессиональные разработчики предпочитают использовать штатные механизмы целевой конфигурации. В модуле менеджера или модуле объекта справочника Номенклатура в УТ 11.4 практически всегда присутствуют экспортные процедуры для инициализации и заполнения реквизитов по умолчанию.

Проверим наличие такой процедуры в конфигураторе приемника и применим её в обработчике ПослеЗагрузки:


Если ЗначениеЗаполнено(Объект.ВидНоменклатуры) Тогда
    // Вызываем стандартный метод заполнения реквизитов по умолчанию по выбранному виду
    Объект.ЗаполнитьПоВидуНоменклатуры(Объект.ВидНоменклатуры);
КонецЕсли;

Этот подход имеет колоссальное преимущество перед ручным копированием реквизитов. Штатная процедура ЗаполнитьПоВидуНоменклатуры не только перенесет тип номенклатуры и настройки характеристик, но также корректно заполнит шаблоны ценников, настройки счетов учета, ставки НДС и другие значения по умолчанию, заложенные разработчиками фирмы 1С. Это гарантирует полную целостность данных в новой системе.

Решение 3: Групповая обработка уже перенесенных данных

Если перенос данных уже был выполнен, xml-файл загружен, а повторный импорт делать нецелесообразно (например, база уже запущена в тестовую эксплуатацию и пользователи начали вносить изменения), проблему можно решить встроенными административными средствами без изменения правил конвертации.

Пошагово рассмотрим алгоритм исправления карточек товаров через групповое изменение реквизитов:

  1. Перейдите в раздел НСИ и администрирование, затем выберите пункт Обслуживание и откройте инструмент Групповое изменение реквизитов.
  2. В поле «Выбирать элементы» укажите справочник Номенклатура. При необходимости настройте отбор (например, только для элементов, у которых ТипНоменклатуры не заполнен).
  3. Нажмите кнопку Дополнительные параметры (в некоторых релизах она выглядит как шестеренка или скрыта под кнопкой настроек) и обязательно установите флажки:
    • «Выполнять в транзакции» (гарантирует целостность базы данных при сбоях);
    • «Отрабатывать при записи объекты и формы» (это ключевой параметр, который заставит систему выполнить программный код событий перед записью аналогично тому, как это происходит при интерактивной работе пользователя).
  4. В списке реквизитов найдите поле Вид номенклатуры, установите галочку изменения и выберите то же самое значение (или выполните аналогичное групповое присвоение).
  5. Нажмите кнопку Изменить реквизиты.

За счет включенной опции отработки при записи, система программно перезапишет каждый товар, вызовет обработчики модуля объекта и автоматически дозаполнит все недостающие денормализованные свойства, включая типы и единицы измерения.

Дополнительные подводные камни: единицы измерения

Помимо вида номенклатуры, при миграции из УТ 10.3 часто ломается логика работы с единицами хранения и отчетов. В старой редакции единицы измерения хранились в подчиненном справочнике, а в УТ 11.4 используется более сложная многоуровневая структура связей через индивидуальные упаковки и базовые классификаторы единиц измерения (ОКЕИ).

Если после настройки вида номенклатуры вы обнаружите, что товар невозможно выбрать в документах продажи, обязательно проверьте, заполнены ли в карточках товаров реквизиты ЕдиницаИзмерения и СкладскаяЕдиницаИзмерения. Их заполнение также рекомендуется выносить в обработчик программной загрузки или исправлять с помощью групповой обработки.

Используя предложенные методики, вы сможете избежать ручного труда по перевыбору видов номенклатуры в карточках товаров и обеспечите корректный и быстрый старт работы в новой конфигурации УТ 11.4.

← На главную