В типовой конфигурации 1С:Розница 2.2 стандартный механизм управляемых скидок рассчитывает процентную скидку непосредственно от текущей розничной цены товара, зафиксированной в строке документа продажи. Однако на практике часто возникает задача, когда продажа осуществляется по стандартной розничной цене, но маркетинговая акция предполагает предоставление скидки (например, 15%, 20% или 30%) от другой цены — Рекомендуемой розничной цены (РРЦ). При этом итоговая цена продажи с учетом скидки не должна превышать базовую розничную цену.
Разберем детально, с какими архитектурными ограничениями программы приходится сталкиваться в такой ситуации и какими способами можно решить эту задачу.
Проанализируем базовую логику ценообразования и скидок в 1С:Розница 2.2:
Тем не менее, решить данную задачу можно как штатным путем, так и с помощью средств расширения функционала.
Рассмотрим порядок настройки задачи средствами стандартного интерфейса без привлечения программиста.
Шаг 1. Создание динамического вида цены
В справочнике ВидыЦен создается новый вид цены (например, «Цена по акции 15% от РРЦ»). В настройках способа расчета задается формула:
[РекомендуемаяРозничнаяЦена] * 0.85
При изменении базовой рекомендуемой цены в документе УстановкаЦенНоменклатуры акционная цена будет рассчитываться автоматически.
Шаг 2. Настройка скидки и ограничение верхней границы
Для того чтобы итоговая цена со скидкой от РРЦ не оказалась выше базовой розничной цены (например, если РРЦ существенно выше розничной), используется механизм групп совместного применения скидок:
Недостаток метода: Если в компании действует гибкая шкала скидок (от 1% до 50%), потребуется создать десятки видов цен, столько же правил расчета и документов назначения скидок. Это делает административное обслуживание системы весьма трудоемким.
Для исключения необходимости плодить множество видов цен в типовом функционале подсистемы скидок предусмотрена возможность подключения внешней обработки.
Рассмотрим алгоритм работы внешней обработки в РМК или чеке ККМ:
СкидкиНаценкиОграничения создается элемент с типом «Внешняя обработка».ЦеныНоменклатуры и получает текущие значения видов цен «Рекомендуемая» и «Розничная» для товаров в чеке.
ЦенаСоСкидкой = ЦенаРекомендуемая * (1 - ПроцентСкидки / 100);
ИтоговаяЦена = Мин(ЦенаСоСкидкой, ЦенаРозничная);
СуммаСкидки = (ЦенаРозничная - ИтоговаяЦена) * Количество;
Преимущества: Конфигурация остается на типовой поддержке, нет необходимости создавать лишние виды цен и документы их установки.
Если требуется хранить процент скидки от РРЦ индивидуально для каждого товара или сегмента, можно воспользоваться доработкой через механизм расширений:
ДополнительныхРеквизитах номенклатуры или сегмента номенклатуры.РасчетСкидокНаценокСервер).ЦеныНоменклатуры, вычисляет скидку от РРЦ и применяет ограничение по розничной цене.При выборе программного способа решения (через внешнюю обработку или расширение) необходимо учитывать следующие моменты:
ЦеныНоменклатуры должна выполняться одним пакетированным запросом по всем позициям чека сразу. Построчный вызов запроса в цикле приведет к задержкам при расчете чека на кассовом месте.