В 1С-Битрикс нет единой «скидки» — есть два разных механизма, которые работают на разных этапах и в разных модулях. Пока не разложишь их по полкам, любая настройка акции превращается в лотерею: то цена не та, то скидка не применяется, то суммируется дважды. Разберём, как устроена система на самом деле.
Два механизма: скидка на товар и скидка на корзину
Первое, что нужно усвоить: в Битрикс скидки живут в двух разных модулях и решают разные задачи.
- Каталожные скидки — модуль
catalog(«Торговый каталог»). Они меняют цену самого товара ещё до того, как он попал в корзину. Именно поэтому на карточке товара покупатель видит зачёркнутую старую цену и новую. - Правила работы с корзиной — модуль
sale(«Интернет-магазин»). Они действуют на уровне корзины и заказа: скидка от суммы, подарок за покупку, бесплатная доставка, купоны.
Ключевое отличие — момент применения. Каталожная скидка формирует цену, с которой товар вообще показывается на витрине. Правило корзины срабатывает позже, когда состав корзины уже собран и известна общая сумма.
Где что настраивается в админке
Оба типа скидок в актуальных редакциях собраны в одном разделе меню, но ведут к разным сущностям. Ориентиры по административной части:
| Тип | Раздел админки | Что задаёт |
|---|---|---|
| Каталожная скидка | Магазин → Скидки → Скидки на товары | Процент/сумму от цены товара, группы товаров, диапазон дат |
| Правило корзины | Магазин → Скидки → Правила работы с корзиной | Условия по составу корзины и результат (скидка, подарок, доставка) |
| Купоны | Внутри конкретного правила корзины | Коды, которые активируют скидку вручную |
Обе сущности физически хранятся в одной таблице базы — b_sale_discount, а различаются полями и типом. Это следствие объединения механизмов, о котором ниже.
Почему исторически их было «до» и «после» конвертации
Раньше в Битрикс каталожные скидки и скидки магазина были полностью раздельными подсистемами с собственными таблицами и своей логикой. Это порождало путаницу: одну и ту же акцию иногда можно было собрать двумя способами, и они конфликтовали.
Начиная с определённых версий модулей платформа перешла на объединённые (единые) скидки. Теперь оба типа управляются общим ядром — классом \Bitrix\Sale\Discount, — и хранятся в единой таблице. Старая логика осталась как «режим до конвертации» ради совместимости.
В какой момент и в каком порядке применяются
Последовательность применения — не абстракция, а причина большинства ошибок в акциях. Упрощённо она такая:
- Пользователь открывает каталог. К каждой цене применяются каталожные скидки — товар уже показывается по итоговой цене продажи.
- Товар добавляется в корзину с этой ценой.
- При пересчёте корзины запускаются правила работы с корзиной — по возрастанию поля сортировки и с учётом приоритетов.
- Формируется финальная сумма заказа.
Отсюда важный вывод: правило корзины видит цену, уже уменьшенную каталожной скидкой. Если задать 10% в каталоге и ещё 10% в корзине, покупатель получит не 20%, а последовательные 10% от разных баз.
Условия применения: группы, даты, состав корзины
И каталожная скидка, и правило корзины включаются только при выполнении условий. Набор условий у них разный по глубине.
- Группы пользователей — базовое условие обоих типов. Скидку можно дать только «Оптовикам» или зарегистрированным.
- Период действия — диапазон дат старта и окончания акции.
- Условия по корзине — только у правил: сумма заказа, количество товаров, наличие конкретного бренда, раздела или свойства.
Условия правил корзины собираются в визуальном конструкторе, где логические блоки И/ИЛИ можно вкладывать друг в друга. Результат тоже гибкий: процент, фиксированная сумма, скидка на доставку или добавление товара-подарка.
Приоритеты и суммирование
Когда к одной корзине подходит несколько скидок, Битрикс решает конфликт по двум параметрам.
- Приоритет — числовое поле; скидки с более высоким приоритетом рассматриваются раньше и могут отменить остальные.
- Сортировка (Sort) — порядок внутри одного приоритета.
- Флаг «прекратить дальнейшее применение» — если он стоит, после срабатывания этой скидки остальные правила той же группы не проверяются.
Это тот механизм, который защищает магазин от «двойных скидок». Настроив приоритеты и флаг остановки, вы задаёте, что накопительная скидка и купон, например, не складываются, а выбирается более выгодная или заранее указанная.
Что из этого видит покупатель на витрине
Разные механизмы по-разному отображаются в публичной части.
- Каталожная скидка легко выводится компонентами каталога: старая цена, новая цена, процент экономии, бейдж «Скидка». Это штатное поведение
catalog.itemи карточки товара. - Правило корзины по своей природе рассчитывается только в корзине, поэтому «вытащить» его на карточку товара напрямую нельзя — там ещё неизвестен состав заказа.
Поэтому если задача — показать перечёркнутую цену прямо в каталоге, это делается каталожной скидкой. А «скидка 5% от суммы 5000 ₽» честно проявится только на этапе оформления. Понимание этого различия избавляет от бесплодных попыток вывести условную скидку туда, где её не может быть.
Итог
Скидки в 1С-Битрикс — это два механизма: каталожные скидки меняют цену товара на витрине, правила работы с корзиной действуют на состав и сумму заказа. Они хранятся в одной таблице, управляются единым ядром после конвертации, применяются последовательно и разруливают конфликты через приоритеты и флаг остановки. Держа эту картину в голове, вы перестаёте гадать, почему скидка «не та», и настраиваете акции предсказуемо.
Если магазин на старом (несконвертированном) режиме, скидки суммируются непредсказуемо или каталог с акциями заметно тормозит — мы помогаем навести порядок: спроектировать логику скидок, выполнить конвертацию и оптимизировать пересчёт корзины под реальную нагрузку.
Частые вопросы
Чем каталожная скидка отличается от правила корзины?
Каталожная скидка меняет цену самого товара и видна прямо в каталоге и на карточке. Правило корзины срабатывает позже, на уровне корзины и заказа, и учитывает их состав и сумму.
Можно ли показать процент скидки прямо в каталоге?
Да, но только для каталожной скидки — она формирует старую и новую цену товара. Скидка от суммы заказа проявляется лишь в корзине, вывести её на карточку нельзя.
Где физически хранятся скидки в базе Битрикс?
После объединения механизмов оба типа лежат в одной таблице b_sale_discount и управляются общим ядром модуля sale. Различаются они типом и набором полей.
Почему при двух скидках по 10% не получается 20%?
Скидки применяются последовательно от разных баз: сначала каталожная уменьшает цену товара, затем правило корзины считает свой процент уже от сниженной суммы. Итог всегда меньше простого сложения.
Как запретить суммирование нескольких скидок?
Настройте приоритеты правил и включите флаг прекращения дальнейшего применения. Тогда после срабатывания выбранной скидки остальные правила той же группы проверяться не будут.
Что значит режим «до» и «после» конвертации?
До конвертации каталожные скидки и скидки магазина работают как раздельные подсистемы старого образца. После конвертации они переходят на единое ядро с общими условиями и приоритетами.
Можно ли сделать скидку только для оптовиков?
Да, оба типа скидок поддерживают условие по группам пользователей. Достаточно указать нужную группу в настройках скидки или правила корзины.
Где в админке настраивать акцию «подарок за покупку»?
Это правило работы с корзиной: Магазин → Скидки → Правила работы с корзиной. Каталожные скидки такой логики не поддерживают, так как не видят состав заказа.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.