В практике торговых компаний часто возникает ситуация, когда заказы поставщикам оформлены на месяцы вперед. Менеджеры по продажам, видя ожидаемое поступление в системе, спешат зарезервировать товар для клиента. Однако, если поставка ожидается только в следующем календарном году, это может создать проблемы с планированием и обязательствами. Рассмотрим подробно, как реализовать частичный запрет на продажу товаров «в пути» в конфигурациях 1С:Комплексная автоматизация 2 и 1С:ERP.
Прежде всего, разберем, как работает стандартный механизм контроля остатков. В программах 1С:КА и 1С:ERP возможность резервирования товара, которого еще нет на складе, напрямую зависит от настроек обеспечения. Проанализируем основные точки контроля:
Заказ клиента менеджер может выбрать вариант «Резервировать к дате». В этом случае система анализирует документы Заказ поставщику.Для решения задачи мы можем изменить подход к работе с заказами поставщикам. Если поставки следующего года будут иметь статус «Не согласован» или «Подтвержден», но с определенной пометкой, они не будут учитываться как доступный остаток для обеспечения. Разберем этот момент подробнее: в настройках системы можно указать, какие статусы заказов считаются надежным источником. Исключив «далекие» заказы из этого списка, мы добьемся того, что менеджеры просто не увидят их как свободный остаток.
Посмотрим на один из самых изящных способов ограничения, который не требует внесения изменений в программный код. Это использование сегментов номенклатуры. Мы можем создать сегмент, который будет автоматически наполняться товарами, поставка которых ожидается в следующем году.
Проанализируем шаги настройки:
ЗаказыПоставщикам. Условием будет наличие остатка по приходу с датой поступления больше 31.12 текущего года.Заказ клиента.Если бизнес-процесс требует жесткого запрета именно в момент добавления товара в Заказ клиента, нам потребуется небольшая доработка. Выясним причину, по которой это лучше делать через расширение: это позволит сохранить конфигурацию на поддержке и легко обновлять систему.
Нам необходимо внедрить проверку при записи документа или при изменении строки таблицы Товары. Логика проверки должна обращаться к остаткам ожидаемых поступлений. Рассмотрим пример кода, который можно разместить в модуле менеджера или в расширении формы:
// Пример функции проверки даты поступления номенклатуры
Функция ПроверитьДатуПоступленияТовара(Номенклатура, Склад) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ МИНИМУМ(ЗаказыПоставщикамОстатки.ДатаПоступления) КАК ДатаПрихода
|ИЗ
| РегистрНакопления.ЗаказыПоставщикам.Остатки( , Номенклатура = &Номенклатура И Склад = &Склад) КАК ЗаказыПоставщикамОстатки
|ГДЕ
| ЗаказыПоставщикамОстатки.ЗаказПоставщику.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовПоставщикам.Подтвержден)";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Склад", Склад);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Возврат Выборка.ДатаПрихода;
КонецЕсли;
Возврат '00010101';
КонецФункции
Теперь разберем, как применить эту проверку. Оптимально вставить вызов этой функции в процедуру ПередЗаписью документа Заказ клиента. Если дата прихода больше конца текущего года, система должна выдать предупреждение и установить параметр Отказ = Истина.
&Вместо("ПередЗаписью")
Процедура Расш_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Для Каждого СтрокаТЧ Из ЭтотОбъект.Товары Цикл
// Проверяем только те товары, которых нет на складе
Если СтрокаТЧ.ВариантОбеспечения = ПредопределенноеЗначение("Перечисление.ВариантыОбеспечения.РезервироватьКДате") Тогда
ДатаПрихода = ПроверитьДатуПоступленияТовара(СтрокаТЧ.Номенклатура, ЭтотОбъект.Склад);
Если ДатаПрихода > Дата('20221231235959') Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Товар " + СтрокаТЧ.Номенклатура + " поступит только в " + Формат(ДатаПрихода, "ДФ=yyyy") + " году. Продажа запрещена!";
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Рассмотрим ситуацию, описанную в сообщениях форума: «Заказ — это еще не продажа». Действительно, некоторые компании разрешают принимать заказы на любые сроки, но жестко блокируют создание документа Реализация товаров и услуг (РТУ).
В этом случае логика проверки переносится из Заказа клиента в РТУ. Плюс этого метода в том, что он не ограничивает работу отдела продаж по сбору заявок (предзаказов), но защищает склад от попыток отгрузить то, чего фактически нет и не будет в ближайшее время. Однако для автора вопроса важно было ограничить именно менеджеров на этапе формирования заказа, чтобы не давать клиентам ложных надежд.
Проанализируем еще одну стандартную возможность. В настройках склада и обеспечения в 1С:КА 2 существует понятие «Горизонт обеспечения». Вы можете настроить систему так, чтобы она просто не «видела» заказы поставщикам, дата поступления которых выходит за рамки текущего месяца или квартала.
Преимущества этого метода:
Мы рассмотрели несколько способов решения задачи. Выбор конкретного метода зависит от строгости бизнес-правил вашей компании:
Помните, что контроль в 1С — это всегда баланс между свободой действий пользователя и безопасностью данных. Проанализируйте, не помешает ли полный запрет маркетинговым акциям по сбору предзаказов на будущие периоды, прежде чем внедрять блокирующие функции.