Как в 1С:Розница 2.2 отменить или отключить автоматические скидки в РМК?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы торговой точки часто возникают ситуации, когда стандартная маркетинговая акция не должна применяться к конкретной продаже. В программе 1С:Розница 2.2 автоматические скидки по умолчанию рассчитываются системой без участия кассира, что иногда создает неудобства. Разберем подробно, какими способами можно реализовать механизм отмены или ручного управления скидками в рабочем месте кассира (РМК).

Способ 1. Использование механизма «Управляемых скидок»

Проанализируем штатный функционал системы. В 1С:Розница существует понятие «Управляемые скидки». В отличие от автоматических, они не применяются в чеке «молча». Для их активации кассир должен выполнить осознанное действие.

Рассмотрим порядок настройки этого механизма:

  1. Перейдем в справочник «Скидки (наценки)».
  2. В карточке скидки, которую вы хотите сделать опциональной, установим флаг «Управляемая».
  3. В интерфейсе РМК для применения или отмены такой скидки кассиру необходимо нажать кнопку «Скидки» (или воспользоваться сочетанием клавиш Ctrl + F8).
  4. Откроется диалоговое окно со списком доступных управляемых скидок, где флажками можно отметить только те, которые действительно нужны в текущем чеке.

Этот метод является наиболее корректным с точки зрения архитектуры типового решения, так как он позволяет кассиру самостоятельно решать, применять ли акцию в конкретном случае.

Способ 2. Настройка групп совместного применения и «вытесняющей» скидки

Выясним, как можно «обмануть» систему автоматического расчета, если нам нужно именно отменить уже начисленные скидки. Мы можем использовать логику вытеснения в группах скидок.

Разберем алгоритм действий:

  1. Создадим новую скидку с нулевым процентом или минимально возможной суммой (например, 0.01%) и назовем ее «Отмена всех скидок».
  2. Сделаем эту скидку Управляемой.
  3. В справочнике скидок найдем группу, в которую входят ваши автоматические акции, и установим для этой группы вариант совместного применения — «Вытеснение».
  4. Убедимся, что наша новая «пустая» скидка имеет наивысший приоритет в этой группе.

Теперь, если кассир в РМК выберет через Ctrl + F8 управляемую скидку «Отмена всех скидок», система, согласно логике вытеснения, отключит все остальные автоматические скидки, входящие в эту группу.

Способ 3. Управление настройками РМК и моментом расчета

Посмотрим на технический нюанс: часто кассир пытается отменить скидки, но при нажатии кнопки «Оплата» они появляются снова. Проанализируем причину. В настройках программы (раздел Администрирование — Продажи — Настройки РМК) существует параметр «Рассчитывать скидки при переходе к оплате».

Если этот флаг установлен, программа игнорирует любые ручные корректировки состава скидок в чеке и принудительно вызывает процедуру РассчитатьСкидки() перед пробитием чека. Чтобы дать кассиру больше свободы, мы можем снять этот флаг. В таком случае скидки будут рассчитываться только при нажатии специальной кнопки «Рассчитать скидки» в РМК. Однако стоит помнить, что это повышает риск человеческой ошибки — кассир может забыть предоставить клиенту законную скидку.

Способ 4. Использование внешних условий и «технической» карты

Рассмотрим вариант, предложенный в обсуждении на форуме: условие предоставления скидки «НЕ карта». Это позволяет гибко управлять процессом.

Как это реализовать программно или через настройки:

  1. В условии предоставления скидки можно указать проверку на наличие дисконтной карты.
  2. Можно создать специальное условие типа «Внешняя обработка» или «Произвольный запрос».
  3. Примеры таких условий находятся в дистрибутиве релиза. Путь к ним обычно выглядит так: .../1c/Retail/Номер_Релиза/Discount/.

Проанализируем ситуацию: если мы создадим карту-пустышку и настроим скидки так, чтобы они НЕ срабатывали при предъявлении этой конкретной карты (или наоборот, срабатывали только при наличии определенных карт), мы получим инструмент управления. Если кассир видит, что скидки не нужны — он просто не считывает карту или считывает ту, которая блокирует расчет.

Способ 5. Программная доработка через Расширение (для программистов)

Если типовых настроек недостаточно и требуется радикальное решение («кнопка обнуления»), нам придется прибегнуть к расширению конфигурации. Нам нужно перехватить логику в общем модуле или модуле формы РМК.

Основная логика расчета сосредоточена в общем модуле СкидкиНаценкиСервер или вызывается из модуля формы РМК (процедура РассчитатьСкидкиНажатие). Чтобы программно запретить пересчет, мы можем добавить в расширение префикс &Вместо или &Перед для процедур расчета.

Посмотрим на пример логики, которую можно внедрить в расширение для блокировки автоматического начисления:


// В расширении формы РМК
&НаКлиенте
Процедура Моя_ОтменитьВсеСкидки(Команда)
    // Очищаем таблицу скидок в объекте чека
    Объект.СкидкиНаценки.Очистить();
    
    // Устанавливаем признак, что скидки рассчитаны вручную и не требуют автопересчета
    // (потребуется добавление реквизита формы через расширение)
    ЭтаФорма.СкидкиОтмененыВручную = Истина;
    
    // Пересчитываем итоги чека без скидок
    РассчитатьИтогиЧека(); 
КонецПроцедуры

Важно помнить, что в 1С:Розница 2.2 при вызове серверных процедур оплаты система часто обращается к методу СкидкиНаценкиСервер.РассчитатьСкидки(...). Чтобы ваша отмена «выжила» при переходе к оплате, необходимо в расширении этого модуля добавить проверку на созданный вами флаг (например, в дополнительных свойствах документа ЧекККМ).

Резюме

Подводя итог, можно сказать: наиболее безопасным и правильным способом является переход на Управляемые скидки. Это не требует программирования и сохраняет целостность системы лояльности. Если же требуется жесткий контроль — используйте расширение конфигурации для блокировки вызова серверных процедур расчета в момент оплаты.

← На главную