Когда в магазине одновременно работают распродажа, купоны, скидки на бренд и накопительная программа, порядок их применения перестаёт быть очевидным. В 1С-Битрикс поведением такой системы управляют три параметра каждой скидки: приоритет, сортировка и флаги прекращения применения. Разберём на конкретном примере, как из них собрать предсказуемую конфигурацию.
Постановка задачи
Возьмём типовой магазин на редакции Малый бизнес с уже выполненной конвертацией на объединённые скидки. Маркетинг хочет одновременно запустить четыре механики:
- Ликвидация склада — минус 40% на товары категории «Распродажа», и эта скидка должна «съедать» все остальные;
- Приветственный купон
FIRST10— минус 10% на первый заказ; - Скидка на бренд Bosch — минус 7% на весь ассортимент производителя;
- Накопительная программа — минус 5% для покупателей с суммой заказов свыше 50 000 ₽.
Проблема в том, что товар может подходить сразу под несколько условий. Наша задача — описать правила так, чтобы для акционных позиций работала только распродажа, а для остального скидки складывались по внятной логике.
Три параметра, которые решают всё
Любая скидка и любое правило корзины в 1С-Битрикс имеют набор полей, управляющих очерёдностью. В карточке скидки (Магазин → Настройки → Скидки) это блок «Расширенные настройки»:
- Приоритет (
PRIORITY) — целое число; скидки объединяются в группы по значению приоритета, а группы обрабатываются от большего к меньшему. - Сортировка (
SORT) — порядок применения внутри одного приоритета: чем меньше число, тем раньше применяется скидка. - Прекратить дальнейшее применение правил (
LAST_DISCOUNT) — после этой скидки не будут применяться группы с более низким приоритетом. - Прекратить применение правил на уровне приоритета (
LAST_LEVEL_DISCOUNT) — останавливает и соседние скидки той же группы.
Как Битрикс разрешает конфликты
Механизм применения работает так: система собирает все подходящие под корзину скидки, группирует их по приоритету и идёт от самого высокого значения к самому низкому. Внутри группы скидки применяются в порядке поля SORT, а базой для процента служит цена, уже уменьшенная предыдущими скидками той же группы.
Ключевой момент — флаги остановки. Если у сработавшей скидки стоит «Прекратить дальнейшее применение правил», обработка групп с меньшим приоритетом прекращается: нижние скидки к этой позиции применены не будут. Если же нужно исключить и «соседей» по группе, добавляют флаг уровня приоритета. Именно эти флаги позволяют сделать распродажу «неперебиваемой».
FIRST10 на акционный товар просто не сработает — это нужно проговаривать с маркетингом заранее.Пример конфигурации в цифрах
Разложим четыре механики по приоритетам. Чем выше приоритет, тем «главнее» скидка. Распродаже отдаём верхний уровень и включаем остановку на всех уровнях; купон и бренд ставим в один средний приоритет, чтобы они складывались; накопительную опускаем ниже всех.
| Скидка | Приоритет | Сортировка | Величина | Флаги остановки |
|---|---|---|---|---|
| Ликвидация склада | 100 | 100 | −40% | Дальнейшее + на уровне |
| Купон FIRST10 | 50 | 100 | −10% | нет |
| Бренд Bosch | 50 | 200 | −7% | нет |
| Накопительная 5% | 10 | 100 | −5% | нет |
Для товара из «Распродажи» сработает только −40%: флаги остановки отсекут все нижние группы. Для обычного товара Bosch в первом заказе применятся и купон, и бренд (обе из группы 50), а затем накопительная из группы 10 — если ни у одной из групп 50 нет флага остановки.
Условия и группы: чтобы скидки не пересекались
Приоритеты определяют очерёдность, но фактический охват задают условия применения. В конструкторе скидки они собираются в дерево с логикой И / ИЛИ. Для нашего примера:
- Ликвидация — условие «Товар принадлежит разделу Распродажа».
- Купон — условие по коду купона, тип «Один купон на один заказ» или «Многоразовый».
- Бренд — условие по значению свойства
BRAND(или через привязку к разделу производителя). - Накопительная — условие «Сумма оплаченных заказов покупателя больше 50000», реализуемое через накопительную программу лояльности.
Чтобы бренд-скидка не задваивалась с распродажей, в её условие добавляют исключение: «Товар не принадлежит разделу Распродажа». Это подстраховка на случай, если по товару вдруг снимут флаг остановки у ликвидации — логика останется корректной и без опоры на приоритет.
Проверка и отладка результата
Даже аккуратно расставленные приоритеты стоит проверить на реальной корзине. Практичный порядок действий:
- Соберите тестовые заказы под каждый сценарий: акционный товар, товар Bosch с купоном, обычный товар для накопительной.
- В детальной корзине сверьте применённую цену и список сработавших скидок — Битрикс показывает их в разбивке по позиции.
- Если результат неожиданный, проверьте не условия, а именно поля
PRIORITY,SORTи флаги: 90% ошибок — там. - Для глубокой диагностики включите режим отладки применения скидок и посмотрите лог расчёта в
Discount::getDiscount()— он показывает, какие правила были отброшены и почему.
Отдельно протестируйте оформление заказа целиком: правила корзины пересчитываются на шаге оформления, и скидка, видимая в каталоге, не всегда равна скидке в чеке. Расхождение почти всегда объясняется разной областью применения (каталог против корзины) или флагом остановки.
Итог
Сложная система скидок в 1С-Битрикс — это не про количество правил, а про дисциплину в трёх полях: приоритет группирует, сортировка упорядочивает, флаги остановки отсекают лишнее. Если заранее нарисовать таблицу приоритетов и подкрепить её точными условиями, даже десяток одновременных механик будет считаться предсказуемо. Начинать всегда стоит с самой «жёсткой» скидки (распродажи) и двигаться вниз к складывающимся.
Мы в B2Bsite регулярно проектируем такие схемы под реальный маркетинг: раскладываем механики по приоритетам, закрываем пересечения условиями и проверяем расчёт на тестовых заказах, чтобы касса и каталог показывали одну и ту же цену. Если ваша система скидок разрослась и начала конфликтовать сама с собой — поможем навести в ней порядок и не потерять в производительности.
Частые вопросы
Чем приоритет отличается от сортировки?
Приоритет объединяет скидки в группы, которые обрабатываются от большего значения к меньшему. Сортировка задаёт порядок применения внутри одной группы приоритета.
Как сделать так, чтобы на акционный товар не действовали другие скидки?
Поставьте акционной скидке высокий приоритет и включите флаги «Прекратить дальнейшее применение правил» и «на уровне приоритета». Тогда нижние группы к этой позиции применяться не будут.
Будут ли скидки складываться, если у них одинаковый приоритет?
Да, скидки одного приоритета применяются последовательно по полю сортировки, и каждая следующая считается от уже уменьшенной цены. Прервать это можно флагом остановки на уровне приоритета.
Купон подчиняется общей системе приоритетов?
Да, скидка по купону обрабатывается по тем же правилам приоритета и сортировки. Скидка с более высоким приоритетом и флагом остановки может полностью перекрыть купон.
Скидки каталога и правила корзины используют одну шкалу приоритетов?
После конвертации на объединённые скидки оба типа хранятся в общем списке и делят единую шкалу приоритетов. Планировать очерёдность нужно сразу по всем скидкам магазина.
Почему цена в каталоге и в корзине отличается?
Каталожные скидки и правила корзины применяются на разных этапах и к разной области. Чаще всего расхождение вызвано флагом остановки или тем, что часть правил работает только на шаге оформления.
Как отладить, почему скидка не применилась?
Соберите тестовую корзину и проверьте поля приоритета, сортировки и флаги остановки у конкурирующих скидок. Для детального разбора включите отладку расчёта и посмотрите лог применения скидок.
Сколько скидок можно запускать одновременно без вреда для сайта?
Технического жёсткого лимита нет, но большое число активных правил с тяжёлыми условиями замедляет расчёт корзины. При десятках правил стоит следить за производительностью и оптимизировать условия.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.