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