При автоматизации розничной и мелкооптовой торговли в конфигурации «1С:Торговля и Склад 7.7» часто возникает задача предварительного бронирования товара под розничного клиента с последующей оплатой и выдачей. Стандартный механизм резервирования запускается документом ЗаявкаПокупателя. Однако попытка закрыть такую заявку и списать зарезервированный товар с помощью документа ЧекККМ приводит к системным и методологическим ошибкам. Разберем детально, как устроена подсистема резервирования в 1С 7.7, почему ЧекККМ не подходит для снятия резервов и как правильно реализовать эту бизнес-логику.
Проанализируем структуру регистров, задействованных при резервировании и отгрузке ТМЦ. В типовой конфигурации учет заказов и наличия номенклатуры разделен по трем ключевым регистрам:
Фирма, Номенклатура, Склад и ДоговорПокупателя. Обратите внимание: резерв всегда жестко привязан к конкретному договору и контрагенту.Фирма, Номенклатура, ДоговорПокупателя, ЗаявкаПокупателя.Фирма, Склад, Номенклатура и ЦенаПрод.Свободный остаток товара, доступный к свободной продаже без заявки, в системе рассчитывается динамически:
Свободный остаток = Остаток по регистру «ОстаткиТМЦ» - Остаток по регистру «РезервыТМЦ»
Когда проводится документ ЗаявкаПокупателя с установленным флагом резервирования, он делает приходное движение в регистр РезервыТМЦ и ЗаявкиПокупателей. Физический остаток на складе при этом не уменьшается, но свободный остаток уменьшается на количество в заявке.
Рассмотрим, с какими критическими проблемами сталкивается разработчик при попытке дописать снятие резервов в модуль документа ЧекККМ:
ЧекККМ предназначен для операционной кассы по схеме «деньги в обмен на товар». В его стандартных реквизитах отсутствуют Контрагент и Договор. Регистр РезервыТМЦ не может сделать движение расхода с пустым значением договора, иначе резерв конкретного покупателя не закроется, а в регистре возникнет перекос.ОтчетККМ, а сами документы ЧекККМ распроводит и физически удаляет. При распроведении чека все выполненные им движения по регистрам РезервыТМЦ и ЗаявкиПокупателей откатятся назад — резерв снова зависнет на остатке.ОтчетККМ, добавить в него табличную часть с разбивкой по заявкам, договорам и контрагентам, а также переписать механизм свертки чеков. Это влечет колоссальные трудозатраты и делает конфигурацию нестабильной при обновлениях.Посмотрим на пример того, как работа с заявками и резервами реализована в оптовом документе Реализация. В модуле документа перед списанием остатков вызывается подготовка движений по заявкам:
// Фрагмент подготовки движений по заявкам и резервам в документе Реализация
ДвижениеЗаявокПокупателя(ТаблицаТМЦ, ВремЗаявки, ВремЗаказыЗаявки, ВремРезервыТМЦ);
Далее управление передается глобальной функции списания остатков, где анализируются и остатки на складе, и зарезервированное количество:
Если глСписаниеОстатковТМЦ(Контекст, ТаблицаТМЦ, СписокПараметров, ВремОстаткиТМЦ, ВремРезервыТМЦ) = 0 Тогда
глНеПроводить(Контекст);
Возврат;
КонецЕсли;
Если в эту функцию вместо переменной ВремРезервыТМЦ передать пустую строку "", программа отключит проверку резервов и проверит только общий физический остаток. Однако сам резерв при этом не спишется — он так и останется числиться за покупателем в регистре РезервыТМЦ.
Разберем штатный и наиболее надежный способ оформления розничных продаж с предварительным резервированием без нарушения структуры регистров.
ЗаявкаПокупателя. В шапке указывается конкретный склад (оптовый или розничный торговый зал) и контрагент (конкретное физическое лицо либо обособленный покупатель). Документ формирует движения по регистрам ЗаявкиПокупателей и РезервыТМЦ.Реализация (розница) или документ Реализация (с типом торговли «Розница»). Данный документ штатно списывает физический остаток из регистра ОстаткиТМЦ, делает расход по регистру РезервыТМЦ и закрывает ЗаявкиПокупателей.Приходный кассовый ордер (ПКО). Фискальный кассовый чек по требованиям 54-ФЗ пробивается непосредственно из формы ПКО или из самой Реализации через подключенную онлайн-кассу.Посмотрим на преимущества такой схемы:
ЧекККМ не используется, а значит, процедура закрытия смены не уничтожит движения по заявкам и резервам.Если специфика торговой точки требует обязательного пробития товара именно через кассовый интерфейс документа ЧекККМ (например, кассир работает только в специализированном рабочем месте), применим следующий алгоритм:
ЗаявкеПокупателя.Снятие резерва (или изменяется статус заявки).Снятие резерва делает расход по регистру РезервыТМЦ. Товар переходит из статуса «в резерве» в статус «свободный остаток».ЧекККМ, подбирает собранный товар и пробивает чек. Так как резерв уже снят, документ ЧекККМ успешно списывает свободный остаток по регистру ОстаткиТМЦ без ошибок контроля остатков.Таким образом, мы исключаем конфликт между оперативной кассовой торговлей и позаказным учетом, сохраняя целостность типовых механизмов 1С 7.7.