Как настроить контроль кратности упаковкам при отгрузке в 1С:Управление торговлей 11?

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

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

Штатные возможности и ограничения типовой конфигурации

Проанализируем архитектуру программы. В типовой «1С:Управление торговлей» жесткого запрета на проведение документов продажи (таких как ЗаказКлиента или РеализацияТоваровУслуг) с количеством, не кратным упаковке, не предусмотрено.

Причины такого поведения заложены в структуре регистров:

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

Тем не менее решить задачу можно несколькими путями: методическим, складским или программным через расширение.

Вариант 1. Методическое решение: смена базовой единицы хранения

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

Выполним следующие действия:

  1. В карточке номенклатуры в качестве базовой Единицы хранения выберем саму упаковку (например, «упак», «кор» или «ящ»).
  2. Штуки как единицу измерения полностью исключим из карточки товара.
  3. При оформлении документов менеджер физически не сможет выбрать штуки, так как минимальной неделимой единицей в системе станет 1 упаковка. Если запретить ввод дробных чисел для данной единицы, продажа будет возможна только целыми упаковками.

Если же товар иногда требуется продавать поштучно (например, розничным покупателям), а оптовикам — только коробками, разделим позиции в справочнике Номенклатура на две разные карточки либо применим механизмы комплектации (динамические наборы).

Вариант 2. Снижение человеческого фактора через единицу продаж

Если разделение номенклатуры невозможно, настроим автоматическую подстановку нужной тары, чтобы минимизировать ошибки операторов:

  1. Откроем карточку номенклатуры.
  2. В настройках единиц измерения и упаковок найдем реквизит Упаковка для продаж.
  3. Укажем целевую упаковку (например, «Коробка 12 шт.»).

Теперь при подборе товара в документы продажи по умолчанию будет подставляться коробка с соответствующим коэффициентом пересчета. Однако этот способ не блокирует проведение документа, если менеджер намеренно изменит единицу на штуки или укажет дробное количество коробок.

Вариант 3. Контроль на адресном складе (WMS)

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

Вариант 4. Программный контроль кратности через расширение

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

Подключим обработчик к событию ОбработкаПроверкиЗаполнения или ПередПроведением документа РеализацияТоваровУслуг:


&Вместо("ПередПроведением")
Процедура Расш_ПередПроведением(Отказ, РежимПроведения)
    
    Для Каждого Стр Из Товары Цикл
        // Проверяем только позиции, у которых задана упаковка
        Если ЗначениеЗаполнено(Стр.Номенклатура) И ЗначениеЗаполнено(Стр.Упаковка) Тогда
            
            КоэффициентУпаковки = Стр.Упаковка.Коэффициент;
            
            Если КоэффициентУпаковки > 1 Тогда
                // Проверяем кратность количества базовых единиц объему упаковки
                ОстатокОтДеления = Стр.Количество % КоэффициентУпаковки;
                
                Если ОстатокОтДеления <> 0 Тогда
                    ТекстОшибки = СтрШаблон(
                        "Строка %1: Номенклатура ""%2"" должна отгружаться кратно упаковке (%3 шт.). Указано: %4 шт.",
                        Стр.НомерСтроки,
                        Стр.Номенклатура,
                        КоэффициентУпаковки,
                        Стр.Количество
                    );
                    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , , Отказ);
                КонецЕсли;
                
            КонецЕсли;
            
        ИначеЕсли ЗначениеЗаполнено(Стр.Номенклатура) И Не ЗначениеЗаполнено(Стр.Упаковка) Тогда
            // Если для номенклатуры обязательно использование упаковок
            Если Стр.Номенклатура.ИспользоватьУпаковки Тогда
                ТекстОшибки = СтрШаблон(
                    "Строка %1: Для товара ""%2"" обязательно указание упаковки при отгрузке!",
                    Стр.НомерСтроки,
                    Стр.Номенклатура
                );
                ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , , Отказ);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    Если Не Отказ Тогда
        ПродолжитьВызов(Отказ, РежимПроведения);
    КонецЕсли;
    
КонецПроцедуры

Посмотрим на логику работы алгоритма:

  1. Программа обходит строки табличной части Товары.
  2. С помощью оператора остатка от деления % проверяется, делится ли общее количество без остатка на коэффициент упаковки.
  3. Если обнаружена дробная часть или упаковка не заполнена вовсе (при обязательном ее ведении), параметр Отказ устанавливается в значение Истина, а менеджеру выводится понятное сообщение с указанием номера проблемной строки. Документ не проводится.

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

← На главную