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