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