Налаштування акційних цін за розкладом 1С-Bitrix
Менеджер хоче запустити знижку в п'ятницю о 18:00 і зняти в понеділок о 09:00 — без ручного втручання. Модуль catalog підтримує знижки з діапазоном дат, але на практиці налаштування ламається через неправильний вибір типу знижки, ігнорування кешу та конфлікти між правилами кошика й каталогу.
Два механізми знижок: каталог vs. кошик
У Bitrix паралельно працюють два механізми знижок, і плутати їх — головна помилка.
Знижки каталогу (b_catalog_discount) — застосовуються на етапі показу ціни. Мають поля ACTIVE_FROM і ACTIVE_TO, які задають період дії. Працюють з типами цін, групами користувачів та умовами за властивостями товару. Це саме той механізм, який потрібен для розкладу.
Правила кошика (b_sale_discount) — застосовуються при розрахунку замовлення в модулі sale. Також мають ACTIVE_FROM/ACTIVE_TO, але працюють інакше: умова перевіряється в момент оформлення, а не показу. Якщо акційна ціна повинна бути видна в каталозі до додавання в кошик — використовуйте знижки каталогу.
Налаштування знижки каталогу за розкладом
Шлях: Магазин → Знижки на товари → Додати знижку.
Ключові поля:
- Активність — обов'язково «Так».
-
Дата початку / Дата закінчення — задають вікно акції. Формат залежить від налаштування сайту, внутрішньо зберігається як
DATETIMEуb_catalog_discount. - Тип знижки — відсоток або фіксована сума.
- Умови застосування — розділ каталогу, конкретні товари (за ID або властивістю), група користувачів.
- Приоритет — число, що визначає порядок застосування. Знижка з пріоритетом 1 застосовується раніше знижки з пріоритетом 2.
Прапор «Припинити застосування» — якщо ввімкнений, знижки з меншим пріоритетом не застосовуватимуться. Використовуйте його, щоб акційна ціна не сумувалася з накопичувальною знижкою.
Автоматизація через агенти
Для складних розкладів (кожну п'ятницю, перший день місяця) полів ACTIVE_FROM/ACTIVE_TO недостатньо — вони задають одноразовий період. Рішення — агент, який програмно створює та деактивує знижки.
Агент реєструється у b_agent та викликає \Bitrix\Catalog\DiscountTable::update() для зміни полів ACTIVE_FROM, ACTIVE_TO та ACTIVE. Розклад зберігається у користувацькій таблиці або у UF-полях знижки.
Альтернатива — cron-скрипт, який за таблицею розкладів (custom_discount_schedule) знаходить знижки, що підлягають активації, і перемикає прапор ACTIVE. Такий підхід простіше налагоджувати: лог виконання скрипту покаже, що саме активувалося й коли.
Кешування та відображення
Знижки каталогу кешуються компонентами catalog.section і catalog.element. Якщо TTL кешу — 3600 секунд, а акція стартує о 18:00, відвідувач може побачити стару ціну до 19:00.
Рішення:
- Зменшити TTL до 300–600 секунд в період акції.
-
Скинути кеш програмно в агенті після активації знижки:
\Bitrix\Main\Data\Cache::clearCache(true, '/bitrix/catalog.section/'). -
Використовувати тегований кеш — при зміні знижки модуль
catalogскидає тегcatalog, але тільки якщо знижка змінена через API, а не прямим SQL.
Закреслена стара ціна відображається автоматично, якщо в типі ціни вказана «стара ціна» й шаблон компонента підтримує вивід OLD_PRICE. Перевірте, що шаблон каталогу виводить обидва значення — інакше відвідувач не побачить вигоди.







