При оптовых и мелкооптовых закупках часто возникает ситуация, когда поставщик отгружает товар исключительно фиксированными упаковками (например, коробками по 6, 12 или 100 штук), в то время как покупатель оформляет заказ в штуках. Если менеджер заполняет документ ЗаявкаПокупателя, ему приходится постоянно сверяться с внешними прайс-листами или тратить время на выяснение объема заводского короба. Разберем, почему в типовой конфигурации «1С:Торговля и склад 7.7» (редакция 9.2) эта задача не решается в один клик, и рассмотрим проверенные практические способы организации работы с кратностью фасовки.
Проанализируем базовую архитектуру учета номенклатуры в «1С:Торговля и склад 7.7». В типовой конфигурации предусмотрен справочник Номенклатура и подчиненный ему справочник Единицы. Каждая дополнительная единица измерения связывается с базовой единицей (как правило, «шт») через коэффициент пересчета Коэффициент.
При этом в платформе отсутствуют штатные механизмы принудительной кратности ввода количества. Выясним основные причины:
Количество жестко инициализируется значением 1.Ниже рассмотрим несколько вариантов решения: от организационно-типовых настроек без изменения конфигурации до программных доработок экранных форм и создания автоматизированных рабочих мест (АРМ).
Рассмотрим штатный подход, который позволяет хранить информацию о фасовке непосредственно в структуре номенклатуры. Для каждой позиции создадим правильную структуру единиц измерения:
Единицы заводим дополнительную единицу «упак» (или «кор»), где в поле Коэффициент указываем размер фасовки (например, 6 или 100).Мыло туалетное 90г (упак. 60 шт). Это избавит оператора от необходимости открывать прайс-листы поставщиков.Если для компании допустимо выставлять счет в упаковках, в карточке товара на закладке единиц можно назначить созданную упаковку основной единицей. В этом случае при добавлении товара в документ единица измерения подставится автоматически, а количество упаковок менеджер сможет вводить целыми числами, гарантируя кратность заводской таре.
Если специфика бизнеса строго требует выставлять все документы клиентам в штуках, но при этом автоматически предлагать количество, равное фасовке, потребуется небольшая доработка модуля формы документа ЗаявкаПокупателя в конфигураторе.
Для хранения кратности добавим в справочник Номенклатура числовой реквизит КратностьФасовки (точность 0) либо будем считывать коэффициент первой найденной нештучной единицы из подчиненного справочника. Разберем реализацию логики на уровне модуля формы документа.
В процедуре, которая отрабатывает при выборе или изменении номенклатуры в строке табличной части (формула колонки Товар), заменим стандартную подстановку единицы на считывание фасовки:
// Фрагмент процедуры обработки строки документа
Процедура ПриВыбореТовара()
Перем ТекТовар, Кратность;
ТекТовар = Товар;
Если ПустоеЗначение(ТекТовар) = 0 Тогда
// Считываем фасовку из реквизита номенклатуры
Кратность = ТекТовар.КратностьФасовки;
Если Кратность > 0 Тогда
Количество = Кратность;
Иначе
Количество = 1;
КонецЕсли;
// Единица измерения остается базовой
Единица = ТекТовар.БазоваяЕдиница;
Коэффициент = 1;
ПересчитатьСтроку();
КонецЕсли;
КонецПроцедуры
Чтобы оператор не мог ошибочно ввести дробное относительно упаковки количество, добавим валидацию на колонку Количество в табличной части. Проверим делимость введенного объема на размер фасовки:
Процедура ПриИзмененииКоличества()
Перем Кратность, ОстатокОтДеления;
Кратность = Товар.КратностьФасовки;
Если Кратность > 1 Тогда
ОстатокОтДеления = Количество - Цел(Количество / Кратность) * Кратность;
Если ОстатокОтДеления <> 0 Тогда
Предупреждение("Количество товара должно быть кратно упаковке (" + Кратность + " шт.)!");
// Автоматическое округление в большую сторону
Количество = Цел((Количество + Кратность - 1) / Кратность) * Кратность;
ПересчитатьСтроку();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Для гарантированного предотвращения ошибок эту же проверку продублируем в предопределенной процедуре модуля формы ПриЗаписи(), чтобы не допустить проведения документа с некорректными данными в случае пакетной загрузки строк.
В реальной торговой практике клиенты часто присылают произвольные штучные заказы (например, просят 10 штук товара, который упакован по 12). Если сразу округлять строки при вводе, менеджер теряет исходную потребность клиента и не видит отклонений.
Рассмотрим архитектуру решения через разделение процесса на два шага:
ЗаявкаПокупателя в штуках в точности по данным клиента без каких-либо ограничений.Такой подход обеспечивает гибкость: компания не накапливает на складе неликвидные остатки от вскрытых заводских коробок и сохраняет прозрачность взаиморасчетов как с поставщиками, так и с покупателями.