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