Как программно создать индивидуальный набор упаковок номенклатуры в 1С:Управление торговлей 11.4

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

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

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

Шаг 1. Включение использования упаковок в карточке номенклатуры

Прежде чем создавать элементы в подчиненном справочнике упаковок, проанализируем настройки самого элемента номенклатуры. Для того чтобы система понимала, что для позиции используются индивидуальные упаковки, необходимо заполнить два ключевых реквизита:

  1. ИспользоватьУпаковки — установить значение Истина.
  2. НаборУпаковок — указать предопределенный элемент Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры.

Важно помнить: объект Номенклатура обязательно должен быть предварительно записан в информационную базу. Без полученной ссылки (Номенклатура.Ссылка) мы не сможем назначить владельца для создаваемых упаковок.

Рассмотрим фрагмент кода для настройки карточки номенклатуры:


НоменклатураОбъект = СправочникНоменклатуры.ПолучитьОбъект();
НоменклатураОбъект.ИспользоватьУпаковки = Истина;
НоменклатураОбъект.НаборУпаковок = Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры;
НоменклатураОбъект.Записать();

Шаг 2. Программное создание элементов справочника «Упаковки и единицы измерения»

В конфигурации 1С:УТ 11.4 упаковки хранятся в справочнике УпаковкиЕдиницыИзмерения. Этот справочник является подчиненным. При создании индивидуального набора владельцем упаковки (Упаковка.Владелец) выступает непосредственно ссылка на номенклатуру (Номенклатура.Ссылка).

Создадим новый элемент справочника упаковок и зафиксируем его базовые реквизиты:


ЕдиницаДлины = Константы.ЕдиницаИзмеренияДлины.Получить();

Упаковка = Справочники.УпаковкиЕдиницыИзмерения.СоздатьЭлемент();

// Указываем владельца индивидуальной упаковки
Упаковка.Владелец = НоменклатураОбъект.Ссылка;

// Основная единица измерения номенклатуры (например, "шт")
Упаковка.ЕдиницаИзмерения = НоменклатураОбъект.ЕдиницаИзмерения;
Упаковка.Наименование = "Коробка (" + Строка(НоменклатураОбъект.ЕдиницаИзмерения) + ")";

// Коэффициент пересчета
Упаковка.Числитель = 10; // В одной коробке 10 штук
Упаковка.Знаменатель = 1;  // Обязательно должен быть не равен 0!

// Системные классификаторы
Упаковка.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Упаковка;
Упаковка.ТипУпаковки = Перечисления.ТипыУпаковокНоменклатуры.Конечная;

// Габариты и весовые характеристики
Упаковка.Безразмерная = Истина; // Если размеры не задаются явно
Упаковка.ВесЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию("кг");
Упаковка.ОбъемЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию("м3");

Упаковка.Записать();

Шаг 3. Важные реквизиты, о которых нельзя забывать

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

  1. Реквизит Знаменатель: Если при создании элемента заполнить только Числитель, а Знаменатель оставить равным 0, при любых расчетах количества или проведении документов система выдаст критическую ошибку деления на ноль. Значение по умолчанию должно быть равно 1.
  2. Числовые значения Веса и Обьема: Заполнения ссылки на единицу измерения (ВесЕдиницаИзмерения) недостаточно для складского учета. Обязательно указывайте числовые значения в реквизитах Упаковка.Вес и Упаковка.Объем.
  3. Размеры (Длина, Ширина, Высота): Если параметр Упаковка.Безразмерная установлен в значение Ложь, необходимо заполнить числовые значения Глубина, Ширина, Высота, а также единицы измерения длины (ГлубинаЕдиницаИзмерения, ШиринаЕдиницаИзмерения, ВысотаЕдиницаИзмерения).

Шаг 4. Настройка составных (вложенных) упаковок

Разберем ситуацию, когда номенклатура поставляется в многоуровневой таре. Например, товар фасуется в пачки, пачки укладываются в коробки, а коробки размещаются на паллетах.

Для реализации такой структуры используется следующий порядок:

  1. Базовая упаковка (пачка) создается с типом Перечисления.ТипыУпаковокНоменклатуры.Конечная.
  2. Укрупненная упаковка (коробка) создается с типом Перечисления.ТипыУпаковокНоменклатуры.Составная. В ней заполняется реквизит Упаковка.Упаковка, указывающий на вложенную базовую упаковку.

Посмотрим на пример кода для создания составной упаковки:


// Создаем составную упаковку "Паллета"
Паллета = Справочники.УпаковкиЕдиницыИзмерения.СоздатьЭлемент();
Паллета.Владелец = НоменклатураОбъект.Ссылка;
Паллета.Наименование = "Паллета (30 коробок)";
Паллета.ТипУпаковки = Перечисления.ТипыУпаковокНоменклатуры.Составная;
Паллета.Упаковка = УпаковкаКоробка.Ссылка; // Вложенная упаковка
Паллета.Числитель = 30; // 30 коробок в паллете
Паллета.Знаменатель = 1;
Паллета.Записать();

Шаг 5. Проверка функциональных опций базы

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

Перед выполнением обработки рекомендуется проверить статус функциональной опции и при необходимости включить ее:


Если НЕ Константы.ИспользоватьУпаковкиНоменклатуры.Получить() Тогда
    Константы.ИспользоватьУпаковкиНоменклатуры.Установить(Истина);
КонецЕсли;

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

Объединим все шаги в единую законченную процедуру, которую можно использовать в обработках загрузки данных или интеграциях:


Процедура СоздатьИндивидуальнуюУпаковкуДляНоменклатуры(СсылкаНоменклатуры, НаименованиеУпаковки, Коэффициент)

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

    // 2. Настраиваем номенклатуру
    НоменклатураОбъект = СсылкаНоменклатуры.ПолучитьОбъект();
    НоменклатураОбъект.ИспользоватьУпаковки = Истина;
    НоменклатураОбъект.НаборУпаковок = Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры;
    НоменклатураОбъект.Записать();

    // 3. Создаем индивидуальную упаковку
    Упаковка = Справочники.УпаковкиЕдиницыИзмерения.СоздатьЭлемент();
    Упаковка.Владелец = НоменклатураОбъект.Ссылка;
    Упаковка.ЕдиницаИзмерения = НоменклатураОбъект.ЕдиницаИзмерения;
    Упаковка.Наименование = НаименованиеУпаковки;
    
    Упаковка.Числитель = Коэффициент;
    Упаковка.Знаменатель = 1;
    
    Упаковка.ТипИзмеряемойВеличины = Перечисления.ТипыИзмеряемыхВеличин.Упаковка;
    Упаковка.ТипУпаковки = Перечисления.ТипыУпаковокНоменклатуры.Конечная;
    Упаковка.Безразмерная = Истина;
    
    Упаковка.Записать();

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

Таким образом, для успешного программного создания индивидуального набора упаковок в 1С:УТ 11.4 достаточно перевести номенклатуру на индивидуальный набор упаковок, правильно назначить владельца элемента в подчиненном справочнике УпаковкиЕдиницыИзмерения и корректно заполнить коэффициенты пересчета.

← На главную