Задача звучит просто: у клиента есть накопительная скидка за историю покупок, и он вводит купон — но получить он должен только одну, бо́льшую скидку, а не их сумму. В 1С-Битрикс это решается не запретом купона, а правильными приоритетами правил корзины и флагом остановки дальнейшего применения.
Что именно нужно запретить
По умолчанию скидки в 1С-Битрикс, работающие через правила работы с корзиной (модуль sale), применяются последовательно и способны накладываться друг на друга. Если накопительная скидка даёт клиенту 10%, а купон — ещё 15%, то без настройки покупатель получит обе, и итоговая цена «просядет» сильнее, чем планировал маркетолог.
Правильная бизнес-логика в большинстве магазинов — «или-или»: применяется либо накопительная скидка, либо купон, обычно та, что выгоднее покупателю или та, что выгоднее магазину. Важно понимать: речь идёт не об отключении механик, а об управлении порядком и остановкой их применения.
Как устроены накопительная скидка и купон
Обе механики живут в разделе Магазин → Маркетинг → Правила работы с корзиной. Разница в условии срабатывания:
- Накопительная скидка — обычное правило корзины, у которого в условиях задан порог по истории клиента: «Профиль покупателя → Сумма оплаченных заказов». Правило применяется автоматически, если сумма прошлых покупок превысила заданный порог.
- Купон — то же правило корзины, но с включённым чекбоксом «Применяется по купону». Оно срабатывает только когда покупатель ввёл валидный код на странице оформления заказа.
Ключевое: и накопительная скидка, и купон — это однотипные сущности (правила корзины). Именно поэтому ими можно управлять единым механизмом приоритетов, а не искать отдельные «галочки несуммирования» в разных модулях.
Настройка накопительной скидки
Создайте правило корзины и на вкладке «Условия» добавьте блок по покупателю. В визуальном конструкторе выберите Профиль покупателя → Сумма оплаченных заказов и укажите порог, например «больше 30000». В блоке «Действия» задайте скидку — процент или фиксированную сумму на корзину либо на выбранные товары.
- Тип — накопительная скидка обычно оформляется как процент на всю корзину.
- Ограничения по товарам — если акционные позиции не должны участвовать, добавьте условие исключения по разделу или свойству.
- Активность и сроки — задайте период действия, чтобы правило не «висело» вечно.
Настройка купона
Второе правило создаётся так же, но с флагом «Применяется по купону». После сохранения правила откройте его и на вкладке «Купоны» сгенерируйте коды. Битрикс поддерживает три типа купонов:
| Тип купона | Поведение |
|---|---|
| Одноразовый | Действует на один заказ одного пользователя |
| На один заказ | Многоразовый код, но по одному разу на клиента |
| Многоразовый | Без ограничения числа применений |
Действие купона задаётся тем же блоком, что и у накопительной скидки — например, «минус 15% на корзину». На этом этапе у вас есть два независимых правила, которые пока сложатся, если клиент с накоплениями введёт купон. Дальше мы это запретим.
Как запретить суммирование
Главный инструмент — поле «Приоритет» и флаг остановки дальнейшего применения на каждом правиле. Логика движка: правила сортируются по приоритету (чем выше значение, тем раньше применяется правило), и если у сработавшего правила стоит запрет на продолжение — расчёт для товара останавливается.
- Решите, что должно «побеждать». Чаще купон делают приоритетнее накопительной скидки, чтобы промо-код всегда давал ожидаемый эффект.
- У правила-победителя (купон) выставите больший приоритет, например
100, у накопительной — меньший, например50. - На обоих правилах включите флаг «Прекратить дальнейшее применение правил» (в интерфейсе — чекбоксом «Последнее правило» /
Прекратить дальнейшее применение скидок к товару).
Теперь при вводе купона движок применит его первым как более приоритетное правило, увидит стоп-флаг и не пойдёт к накопительной скидке. Если купона нет — сработает только накопительная. Суммирования не будет ни в одном сценарии.
OnSaleDiscountBeforeApply) или дополнительное условие, отсекающее одно правило при наличии другого.Проверка и типичные ошибки
После настройки обязательно проверьте оба сценария на реальном профиле, у которого накоплена сумма покупок. Сложите товары в корзину и сравните итог с купоном и без него — скидка не должна «складываться».
- Оба правила с одинаковым приоритетом — самая частая причина суммирования. При равном приоритете стоп-флаг срабатывает непредсказуемо; разведите значения.
- Забыли стоп-флаг — приоритет только меняет порядок, но без флага «Последнее правило» второе правило всё равно применится.
- Разные области действия — если накопительная скидка действует на всю корзину, а купон только на один раздел, они формально не конкурируют за одни товары. Проверяйте пересечение областей.
- Кэш скидок — после правок очистите кэш (
Настройки → Настройки продукта → Автокэшированиеили сброс через админ-панель), иначе увидите старый расчёт.
Итог
Несуммирование накопительной скидки и купона в 1С-Битрикс — это не отдельная функция, а комбинация трёх настроек правил корзины: условия срабатывания, приоритета и флага остановки дальнейшего применения. Правило с бо́льшим приоритетом применяется первым, стоп-флаг обрывает цепочку, и второе правило до товара уже не доходит.
Если логика сложнее, чем «фиксированно побеждает купон» — например, нужно отдавать бо́льшую скидку или учитывать бренды и акционные категории — без обработчика событий модуля sale не обойтись. Мы в B2Bsite настраиваем такие системы скидок под конкретную маркетинговую логику магазина, пишем обработчики пересчёта корзины и следим, чтобы правила не конфликтовали и не роняли производительность каталога.
Частые вопросы
Почему накопительная скидка и купон складываются по умолчанию?
Правила работы с корзиной в Битрикс применяются последовательно, и если у сработавшего правила не стоит флаг остановки, движок продолжает применять следующие. Суммирование — это поведение по умолчанию.
Каким флагом запретить дальнейшее применение скидок?
В настройках правила корзины включите чекбокс «Прекратить дальнейшее применение правил» (в интерфейсе также встречается как «Последнее правило»). После срабатывания такого правила расчёт по товару останавливается.
Как сделать, чтобы купон был приоритетнее накопительной скидки?
Задайте купону большее значение в поле «Приоритет», чем у накопительной скидки, и включите стоп-флаг на обоих правилах. Тогда при вводе купона накопительная скидка применяться не будет.
Где в Битрикс настраивается накопительная скидка?
В разделе Магазин → Маркетинг → Правила работы с корзиной. В условиях правила выбирается «Профиль покупателя → Сумма оплаченных заказов» с нужным порогом.
Можно ли выдавать бо́льшую из двух скидок, а не всегда купон?
Одними приоритетами это не решается. Потребуется обработчик на событии пересчёта корзины (например, OnSaleDiscountBeforeApply), который сравнивает скидки и оставляет выгодную.
Почему на тестовом заказе накопительная скидка не появляется?
Условие «Сумма оплаченных заказов» учитывает только заказы в статусе оплаты. Неоплаченные тестовые заказы порог не поднимают, поэтому скидка не срабатывает.
Что будет, если у обоих правил одинаковый приоритет?
При равном приоритете порядок применения и работа стоп-флага становятся непредсказуемыми, и скидки могут сложиться. Всегда разводите приоритеты разными значениями.
Нужно ли чистить кэш после настройки скидок?
Да. Скидки кэшируются, и до сброса кэша вы можете видеть старый расчёт корзины. После правок правил очистите кэш и перепроверьте оба сценария.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.