В 1С-Битрикс купон никогда не существует сам по себе: он всегда привязан к правилу работы с корзиной. Правило описывает саму скидку и условия, а купон лишь решает, применится она автоматически или только по вводу кода. Разберём это разделение по деталям.
Правило и купон: кто за что отвечает
Скидки в интернет-магазине на 1С-Битрикс живут в разделе Магазин → Настройки → Правила работы с корзиной (сущность \Bitrix\Sale\Discount). Именно правило хранит логику: условия применения (сумма заказа, товары, разделы каталога, свойства пользователя) и само действие — процент, фиксированную сумму или бесплатную доставку.
Купон — это отдельная запись в таблице b_sale_discount_coupon (DiscountCouponTable), которая ссылается на конкретное правило. У купона нет собственного размера скидки, условий или срока в отрыве от правила: он наследует всю логику от того правила, к которому привязан. Проще говоря, правило — это скидка, а купон — ключ, который её включает.
Автоматическая скидка против скидки по купону
Любое правило работы с корзиной может работать в одном из двух режимов, и это ключевое различие для маркетолога.
- Автоматическая скидка — правило без привязанных купонов. Как только корзина покупателя удовлетворяет условиям, скидка применяется сама, без каких-либо действий со стороны клиента.
- Скидка по купону — то же правило, но с привязанными купонами. Пока покупатель не введёт валидный код, скидка «спит» и в расчёте корзины не участвует, даже если все прочие условия выполнены.
Таким образом, отличие купона от автоматической скидки — не в типе скидки, а в условии её активации. Один и тот же процент можно раздавать всем автоматически или выдавать точечно по промокоду — меняется только наличие купонов у правила.
| Характеристика | Автоматическая | По купону |
|---|---|---|
| Купоны у правила | нет | есть |
| Когда применяется | при выполнении условий | после ввода кода |
| Видна всем | да | только владельцу кода |
| Логика скидки | в правиле | в правиле |
Купон как «активатор» правила
Удобно думать о купоне как о переключателе, который на время сессии «включает» правило для конкретной корзины. Технически при вводе кода в публичной части менеджер \Bitrix\Sale\DiscountCouponsManager регистрирует купон в сессии, а движок скидок при пересчёте корзины начинает учитывать правило, к которому этот купон привязан.
Из этого следуют важные практические выводы:
- Даже с валидным кодом скидка не сработает, если корзина не проходит по условиям самого правила (не набрана минимальная сумма, нет нужного товара и т. д.).
- Один и тот же купон включает ровно ту скидку, что описана в правиле, — изменив правило, вы меняете смысл всех его купонов сразу.
- Ограничения на количество применений (одноразовый, многоразовый, на N активаций) задаются на уровне купона, а не правила.
Флаг «скидка по купону» и вкладка «Купоны»
В карточке правила работы с корзиной поведение задаётся на вкладке Купоны. Пока список купонов пуст, правило считается автоматическим. Как только вы добавляете хотя бы один купон, Битрикс переводит правило в режим «скидка по купону» — оно перестаёт применяться само и ждёт ввода кода.
В служебных данных и в старом API это отражается признаком, что скидка активируется купоном (историческое поле USE_COUPONS в модуле catalog/sale). В визуальном редакторе отдельного чекбокса «Скидка по купону» помнить не нужно — режим определяется самим фактом наличия купонов.
Для каждого купона на этой вкладке задаётся:
- Код — то, что вводит покупатель (можно сгенерировать или задать вручную);
- Тип — одноразовый, многоразовый (без лимита) или на фиксированное число активаций;
- Активность и срок — включён ли купон и до какой даты действует.
Приоритеты и совместимость скидок
Когда правил несколько, порядок применения задаёт поле Приоритет — чем больше число, тем раньше правило обрабатывается. Это одинаково важно и для автоматических скидок, и для скидок по купону: активированное купоном правило встаёт в общую очередь по своему приоритету, а не «поверх всех».
Совместимость регулируется флагом «Прекратить дальнейшее применение правил» (в API — LAST_DISCOUNT). Если он включён у сработавшего правила, скидки с меньшим приоритетом дальше не считаются. Отсюда типовые конфликты:
- Автоматическая скидка с высоким приоритетом и флагом «последняя» может заблокировать купон, даже если код введён верно.
- Наоборот, купон с высоким приоритетом способен отменить действующую акцию для всех.
Практика: как спроектировать правило под купон
Чтобы купонная механика работала предсказуемо, стройте её от правила, а не от кода.
- Создайте правило работы с корзиной и опишите условия и действие так, будто это обычная акция.
- Проверьте её в автоматическом режиме (без купонов) на тестовой корзине — так вы отделите ошибку условий от ошибки купона.
- Только затем добавьте купоны на вкладке
Купоныи выберите тип (для рассылок — серия одноразовых). - Задайте приоритет и решите, должен ли купон суммироваться с другими скидками или отменять их (
LAST_DISCOUNT).
Отдельно держите в уме кэш: список скидок кэшируется, и после правок правила иногда стоит очистить кэш (Настройки → Настройки продукта → Автокэширование) или дождаться пересчёта корзины. При программной проверке купона используйте DiscountCouponsManager::isEntered() и пересбор скидок через \Bitrix\Sale\Basket.
Итог
Купон в 1С-Битрикс — не самостоятельная скидка, а активатор правила работы с корзиной. Правило хранит условия, размер и совместимость, а купон лишь переключает его из «спящего» состояния в рабочее по вводу кода. Отличие от автоматической скидки — только в наличии привязанных купонов; всё остальное — приоритеты, флаг «последняя скидка», условия — работает одинаково. Понимая это разделение, вы перестаёте искать «баг в купоне» и начинаете отлаживать правило.
Если купонные акции пересекаются, конфликтуют по приоритетам или тормозят корзину на пересчётах — мы поможем спроектировать логику скидок и навести порядок. Наша команда занимается разработкой и поддержкой магазинов на Битрикс и разберёт вашу схему правил до предсказуемого результата.
Частые вопросы
Может ли купон существовать без правила работы с корзиной?
Нет. Купон всегда привязан к конкретному правилу и наследует от него условия и размер скидки. Без правила купону нечего активировать.
Чем купон отличается от автоматической скидки?
Логика скидки в обоих случаях лежит в правиле. Разница только в активации: автоматическая скидка применяется сама при выполнении условий, а скидка по купону ждёт ввода кода.
Как превратить правило в скидку по купону?
Достаточно добавить хотя бы один купон на вкладке «Купоны» в карточке правила. После этого правило перестаёт применяться автоматически и срабатывает только по коду.
Почему клиент ввёл верный купон, а скидки нет?
Скорее всего, корзина не проходит по условиям самого правила — не набрана сумма или нет нужного товара. Купон включает правило, но не отменяет его условия.
Как купон взаимодействует с другими скидками?
Через приоритет правила и флаг «прекратить дальнейшее применение правил» (LAST_DISCOUNT). Правило с высоким приоритетом и этим флагом может заблокировать остальные скидки, включая купонные.
Можно ли сделать так, чтобы купон складывался с акцией?
Да, если у обоих правил выключен флаг «прекратить применение» и их действия не перекрывают одни и те же позиции. Тогда скидки суммируются по очереди приоритетов.
Ограничение на число активаций задаётся у правила или у купона?
У купона. Тип (одноразовый, многоразовый, на N активаций) и срок действия — это свойства купона, а условия и размер скидки — свойства правила.
Нужно ли чистить кэш после изменения купонного правила?
Иногда да. Список скидок кэшируется, поэтому после правок правила стоит очистить кэш в настройках продукта или дождаться пересчёта корзины, чтобы увидеть актуальный результат.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.