В старых магазинах на 1С-Битрикс скидки каталога и корзины жили в двух разных подсистемах. Объединённые (новые) скидки сводят их в один механизм «Маркетинг» — но переключение требует конвертации данных и аккуратной проверки, иначе часть акций перестанет применяться.
Что такое объединённые скидки
Исторически в 1С-Битрикс работали два независимых механизма. Скидки каталога хранились в модуле catalog (таблица b_catalog_discount) и влияли на цену товара ещё до корзины. Скидки на заказ жили в модуле sale и применялись уже к содержимому корзины. Настраивались они в разных разделах, считались по разным правилам и нередко конфликтовали друг с другом.
Объединённые скидки — это режим, в котором оба типа обрабатываются единым движком в разделе Маркетинг. Каталожные скидки, правила работы с корзиной и купоны хранятся в общей таблице b_sale_discount и проходят через один алгоритм применения. Это то состояние, к которому идут все актуальные редакции продукта.
sale.Зачем переходить
Старый режим давно находится в статусе совместимости: новые механики маркетинга Битрикс развивает только для объединённых скидок. Пока магазин работает по-старому, недоступны или урезаны многие возможности.
- Единые правила приоритетов и суммирования — не нужно вручную согласовывать логику двух модулей.
- Полноценные правила работы с корзиной — подарки, «1+1», скидки от набора товаров.
- Маркетинговые акции с расписанием, купонами и ограничениями по группам покупателей.
- Корректная работа с новыми компонентами каталога и корзины, которые рассчитаны именно на объединённый режим.
Если вы планируете развивать акционную механику, переход — не опция, а обязательный шаг. На старом движке новые сценарии просто не соберутся.
Опция, которая всё переключает
За режим отвечает единственная настройка модуля sale — параметр use_sale_discount_only. Значение Y включает объединённые скидки, N возвращает старую схему. Проверить и изменить его можно программно:
// текущее значение
$mode = \Bitrix\Main\Config\Option::get('sale', 'use_sale_discount_only');
// включить объединённый режим
\Bitrix\Main\Config\Option::set('sale', 'use_sale_discount_only', 'Y');b_catalog_discount означает, что старые каталожные скидки просто перестанут применяться. Флаг должен меняться в связке с конвертацией.Именно поэтому в штатном сценарии опцию трогает не администратор напрямую, а мастер конвертации данных — он и выставляет её в Y после переноса.
Что происходит при конвертации
Переход выполняется через мастер Конвертация данных магазина в административном разделе. Процесс не сводится к переключению галочки — система переносит и пересобирает данные:
- Каталожные скидки из
b_catalog_discountпереносятся в единое хранилищеb_sale_discountкак правила объединённого движка. - Действующие правила работы с корзиной приводятся к новому формату условий и действий.
- Пересчитываются служебные индексы скидок по разделам и товарам (таблицы вида
b_sale_discount_*), чтобы применение работало быстро. - По завершении выставляется
use_sale_discount_only = Y.
Конвертация каталога и цен может идти в фоне пошаговым агентом — на крупных базах это десятки минут. До полного завершения индекс скидок ещё не построен, поэтому на витрине возможны временные расхождения в ценах.
Порядок перехода: по шагам
Безопасный сценарий выглядит так:
- Резервная копия. Полный дамп БД и файлов — это точка отката, если что-то пойдёт не так.
- Инвентаризация акций. Выпишите все активные скидки каталога, правила корзины и купоны с их приоритетами — понадобятся для сверки.
- Прогон на копии. Разверните тестовую площадку и выполните конвертацию сначала там.
- Запуск мастера. В админке откройте Магазин → Настройки → Конвертация данных и запустите процесс; дождитесь завершения фоновых шагов.
- Сброс кэша. После конвертации очистите кэш компонентов и меню, сбросьте цены в кэше каталога.
main, sale и catalog перед стартом. Конвертацию корректнее запускать на свежих версиях — в старых сборках встречались ошибки переноса.Проверка после перехода
Формальное «мастер завершился без ошибок» ещё не означает, что акции считаются верно. Пройдитесь по контрольному списку:
| Что проверить | Как |
|---|---|
| Каталожные скидки | Карточка и список товаров — старая цена и процент отображаются, размер скидки совпадает |
| Правила корзины | Собрать тестовый заказ и сверить итоговую сумму с ожидаемой |
| Приоритеты и суммирование | Товар под несколько скидок — применяется корректная комбинация |
| Купоны | Ввод купона в корзине даёт нужную скидку |
| Раздел Маркетинг | Все перенесённые правила видны и активны |
Особое внимание — товарам, которые попадали под несколько старых скидок одновременно. Именно на них чаще всего меняется итоговая цена из-за новой логики приоритетов.
Риски и типичные проблемы
Что встречается на практике после перехода:
- Скидки «пропали». Обычно это незавершённый фоновый агент или несброшенный кэш цен — дождитесь конца конвертации и очистите кэш.
- Изменилась итоговая цена. В старой схеме каталожная и корзинная скидки могли складываться иначе; в объединённой действует единый приоритет. Пересмотрите настройки суммирования правил.
- Просадка производительности. На больших каталогах пересчёт индексов и применение правил нагружают базу — следите за медленными запросами к таблицам скидок.
- Кастомные обработчики. Самописный код, работавший с
CCatalogDiscount, после перехода может не влиять на цену — логику нужно переносить в\Bitrix\Sale\Discount.
Итог
Объединённые скидки — штатное состояние современного магазина на 1С-Битрикс: единый движок в разделе «Маркетинг», предсказуемые приоритеты и доступ ко всем новым механикам акций. Переход упирается не в опцию use_sale_discount_only, а в аккуратную конвертацию данных, сверку акций и проверку итоговых цен.
Если магазин большой, а акций много — мы поможем спланировать миграцию: прогоним конвертацию на копии, перенесём кастомную логику скидок в новый формат и проследим, чтобы после переключения ничего не «просело» ни по ценам, ни по скорости витрины и корзины.
Частые вопросы
Что делает опция use_sale_discount_only?
Это настройка модуля sale, которая включает объединённый режим скидок. Значение Y переводит магазин на единый движок в разделе «Маркетинг», N возвращает старую раздельную схему.
Можно ли просто включить флаг без конвертации?
Нет. Без переноса данных из таблицы b_catalog_discount старые каталожные скидки перестанут применяться. Флаг должен меняться в связке с мастером конвертации, который и выставляет его сам.
Где запускается конвертация?
В административном разделе: Магазин → Настройки → Конвертация данных. Мастер переносит скидки в единое хранилище и по завершении включает объединённый режим.
Сколько длится переход?
На небольшом магазине — минуты, на крупном каталоге пересчёт индексов и цен идёт фоновым агентом и может занять десятки минут. До завершения на витрине возможны временные расхождения.
Можно ли откатиться назад?
Технически флаг вернуть можно, но перенесённые в новый формат правила при этом не восстанавливаются в старый вид. Надёжный откат — это восстановление магазина из резервной копии.
Почему после перехода изменились итоговые цены?
В объединённом режиме действует единый механизм приоритетов и суммирования. Товары, попадавшие под несколько старых скидок сразу, теперь считаются по новой логике — это нужно проверить и при необходимости донастроить.
Что будет с кастомным кодом скидок?
Обработчики, работавшие через CCatalogDiscount, после перехода могут не влиять на цену. Логику следует перенести в новый API \Bitrix\Sale\Discount и его события.
Обязательно ли переходить?
Если планируете новые акции, правила корзины и подарки — да. Эти механики развиваются только в объединённом режиме и на старом движке недоступны.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.