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