В процессе работы торговой точки часто возникают ситуации, когда стандартная маркетинговая акция не должна применяться к конкретной продаже. В программе 1С:Розница 2.2 автоматические скидки по умолчанию рассчитываются системой без участия кассира, что иногда создает неудобства. Разберем подробно, какими способами можно реализовать механизм отмены или ручного управления скидками в рабочем месте кассира (РМК).
Проанализируем штатный функционал системы. В 1С:Розница существует понятие «Управляемые скидки». В отличие от автоматических, они не применяются в чеке «молча». Для их активации кассир должен выполнить осознанное действие.
Рассмотрим порядок настройки этого механизма:
Ctrl + F8).Этот метод является наиболее корректным с точки зрения архитектуры типового решения, так как он позволяет кассиру самостоятельно решать, применять ли акцию в конкретном случае.
Выясним, как можно «обмануть» систему автоматического расчета, если нам нужно именно отменить уже начисленные скидки. Мы можем использовать логику вытеснения в группах скидок.
Разберем алгоритм действий:
Теперь, если кассир в РМК выберет через Ctrl + F8 управляемую скидку «Отмена всех скидок», система, согласно логике вытеснения, отключит все остальные автоматические скидки, входящие в эту группу.
Посмотрим на технический нюанс: часто кассир пытается отменить скидки, но при нажатии кнопки «Оплата» они появляются снова. Проанализируем причину. В настройках программы (раздел Администрирование — Продажи — Настройки РМК) существует параметр «Рассчитывать скидки при переходе к оплате».
Если этот флаг установлен, программа игнорирует любые ручные корректировки состава скидок в чеке и принудительно вызывает процедуру РассчитатьСкидки() перед пробитием чека. Чтобы дать кассиру больше свободы, мы можем снять этот флаг. В таком случае скидки будут рассчитываться только при нажатии специальной кнопки «Рассчитать скидки» в РМК. Однако стоит помнить, что это повышает риск человеческой ошибки — кассир может забыть предоставить клиенту законную скидку.
Рассмотрим вариант, предложенный в обсуждении на форуме: условие предоставления скидки «НЕ карта». Это позволяет гибко управлять процессом.
Как это реализовать программно или через настройки:
.../1c/Retail/Номер_Релиза/Discount/.Проанализируем ситуацию: если мы создадим карту-пустышку и настроим скидки так, чтобы они НЕ срабатывали при предъявлении этой конкретной карты (или наоборот, срабатывали только при наличии определенных карт), мы получим инструмент управления. Если кассир видит, что скидки не нужны — он просто не считывает карту или считывает ту, которая блокирует расчет.
Если типовых настроек недостаточно и требуется радикальное решение («кнопка обнуления»), нам придется прибегнуть к расширению конфигурации. Нам нужно перехватить логику в общем модуле или модуле формы РМК.
Основная логика расчета сосредоточена в общем модуле СкидкиНаценкиСервер или вызывается из модуля формы РМК (процедура РассчитатьСкидкиНажатие). Чтобы программно запретить пересчет, мы можем добавить в расширение префикс &Вместо или &Перед для процедур расчета.
Посмотрим на пример логики, которую можно внедрить в расширение для блокировки автоматического начисления:
// В расширении формы РМК
&НаКлиенте
Процедура Моя_ОтменитьВсеСкидки(Команда)
// Очищаем таблицу скидок в объекте чека
Объект.СкидкиНаценки.Очистить();
// Устанавливаем признак, что скидки рассчитаны вручную и не требуют автопересчета
// (потребуется добавление реквизита формы через расширение)
ЭтаФорма.СкидкиОтмененыВручную = Истина;
// Пересчитываем итоги чека без скидок
РассчитатьИтогиЧека();
КонецПроцедуры
Важно помнить, что в 1С:Розница 2.2 при вызове серверных процедур оплаты система часто обращается к методу СкидкиНаценкиСервер.РассчитатьСкидки(...). Чтобы ваша отмена «выжила» при переходе к оплате, необходимо в расширении этого модуля добавить проверку на созданный вами флаг (например, в дополнительных свойствах документа ЧекККМ).
Подводя итог, можно сказать: наиболее безопасным и правильным способом является переход на Управляемые скидки. Это не требует программирования и сохраняет целостность системы лояльности. Если же требуется жесткий контроль — используйте расширение конфигурации для блокировки вызова серверных процедур расчета в момент оплаты.