Как реализовать проверку кратности количества товара упаковкам (коробкам) в 1С:Комплексная автоматизация 2

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

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

Анализ проблемы и постановка задачи

Рассмотрим типовой сценарий: компания хранит товар в штуках, но отгрузка производится только кратно коробкам. Менеджеры привыкли вводить данные в штуках, и переход на ввод в упаковках вызывает сопротивление. Наша задача — оставить возможность ввода в штуках, но добавить систему оповещения или автоматическую корректировку. Кроме контроля количества, для эффективного планирования грузоперевозок часто требуется выводить вес и объём в табличных частях и итогах документов. Для реализации проверки нам необходимо выяснить, откуда система будет брать информацию о том, сколько штук содержится в одной «стандартной» коробке.

Вариант 1. Использование дополнительных реквизитов (самый быстрый способ)

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

  1. Создадим дополнительный реквизит ШтукВКоробке с типом Число.
  2. Заполним его для тех позиций, где требуется контроль.
  3. В модуле формы документа ЗаказКлиента в событии ТоварыКоличествоПриИзменении напишем проверку.

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


// Пример кода для проверки кратности
Количество = СтрокаТЧ.Количество;
Коэффициент = СтрокаТЧ.Номенклатура.ДопРеквизит_ШтукВКоробке; // Условное обращение

Если Коэффициент > 0 Тогда
    Остаток = Количество % Коэффициент;
    Если Остаток <> 0 Тогда
        ТекстСообщения = "Внимание! Количество " + Количество + " не кратно коробке (" + Коэффициент + " шт.)";
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.Товары[" + СтрокаТЧ.НомерСтроки + "].Количество");
    КонецЕсли;
КонецЕсли;

Вариант 2. Работа со штатным справочником упаковок

В «1С:Комплексная автоматизация 2» информация об упаковках хранится в справочнике УпаковкиЕдиницыИзмерения. Это более правильный архитектурный подход, так как система уже содержит механизмы пересчета. Разберем по шагам, как вытащить коэффициент из штатных данных.

У каждой номенклатуры может быть установлен Набор упаковок. В этом наборе нам нужно найти ту упаковку, которая считается «основной» или «продажной». Поскольку в системе нет жесткого признака «первой» упаковки, можно использовать один из подходов:

Проанализируем программный метод получения коэффициента из упаковки:


// Функция для поиска коэффициента основной упаковки
&НаСервере
Функция ПолучитьКоэффициентУпаковки(НоменклатураСсылка)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |	Упаковки.Числитель КАК Коэффициент
        |ИЗ
        |	Справочник.УпаковкиЕдиницыИзмерения КАК Упаковки
        |ГДЕ
        |	Упаковки.Владелец = &Владелец
        |	И НЕ Упаковки.ПометкаУдаления
        |УПОРЯДОЧИТЬ ПО
        |	Упаковки.Числитель";
    
    // Владельцем может быть сама Номенклатура или её ВидНоменклатуры (Набор упаковок)
    Если ЗначениеЗаполнено(НоменклатураСсылка.НаборУпаковок) Тогда
        Запрос.УстановитьПараметр("Владелец", НоменклатураСсылка.НаборУпаковок);
    Иначе
        Запрос.УстановитьПараметр("Владелец", НоменклатураСсылка);
    КонецЕсли;
    
    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        Возврат Выборка.Коэффициент;
    КонецЕсли;
    
    Возврат 1;
КонецФункции

Вариант 3. Визуальный контроль через Условное оформление

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

  1. Добавим в ТЧ Товары скрытый реквизит КратностьНарушена (тип Булево).
  2. Настроим правило оформления: если КратностьНарушена равно Истина, то цвет текста в колонке Количество становится красным.
  3. При изменении количества будем пересчитывать этот флаг.

Рассмотрим пример настройки оформления:


ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);

ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Объект.Товары.Количество");

ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КратностьНарушена");
ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборОформления.ПравоеЗначение = Истина;

Вариант 4. Автоматическое округление количества

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

Алгоритм расчета выглядит следующим образом:


Если Коэффициент > 1 Тогда
    ЦелыхКоробок = Цел(ВведенноеКоличество / Коэффициент);
    Если ВведенноеКоличество % Коэффициент <> 0 Тогда
        НовоеКоличество = (ЦелыхКоробок + 1) * Коэффициент;
        // Здесь можно вывести вопрос пользователю или установить значение сразу
        СтрокаТЧ.Количество = НовоеКоличество;
    КонецЕсли;
КонецЕсли;

Рекомендации по реализации в КА 2

Выясним наиболее эффективную стратегию внедрения. При работе в конфигурациях ERP и КА 2 мы рекомендуем:

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

← На главную