Налаштування сезонного ціноутворення на 1С-Bitrix
Сезонне ціноутворення — це зміна цін за календарним розписанням: зимові куртки дорожають в жовтні, дешевіють в березні; новорічні набори йдуть з наценкою в грудні; літні товари уцінюються в серпні. У Bitrix це вирішується через знижки з умовою за датою або через планові агенти, які змінюють ціни за розписанням.
Знижки каталогу з обмеженням за датою
Стандартний механізм — правила каталогу в b_catalog_discount. У кожного правила є поля ACTIVE_FROM та ACTIVE_TO (тип DateTime). Створіть правило з потрібним періодом та дією «Зменшити ціну на X%»:
- Правило «Зимова наценка»:
ACTIVE_FROM = 2024-10-01,ACTIVE_TO = 2025-02-28, знижка -15% (негативна = наценка не підтримується напрямо — див. нижче) - Правило «Літня розпродаж»:
ACTIVE_FROM = 2024-07-01,ACTIVE_TO = 2024-08-31, знижка 20%
Обмеження: знижки каталогу вміють тільки зменшувати ціну. Для наценок потрібен інший підхід.
Наценка через типи цін
Для сезонного підвищення цін створіть окремий тип ціни bl_season_price в b_catalog_group. Агент у потрібну дату заповнює b_catalog_price для цього типу, а в кінці сезону очищує. Групи користувачів переключаються на сезонний тип через CGroup::Update() або залишаються на базовому (сезонний тип як додатковий).
Інший варіант — агент напрямо оновлює базову ціну в b_catalog_price:
\Bitrix\Catalog\PriceTable::updateMulti(
['CATALOG_GROUP_ID' => 1, 'PRODUCT_ID' => $productIds],
['PRICE' => new \Bitrix\Main\DB\SqlExpression('PRICE * ?f', 1.15)]
);
Зберігайте вихідні ціни перед зміною — у таблицю bl_price_backup з полями product_id, original_price, backup_date. Агент повернення в кінці сезону відновлює ціни з бекапу.
Розписання сезонів
Зберігайте сезонні періоди у таблиці bl_seasonal_pricing:
| Поле | Опис |
|---|---|
name |
Назва сезону («Зимова колекція») |
active_from |
Дата початку |
active_to |
Дата окінчення |
modifier |
Коефіцієнт ціни (1.15 = +15%) |
iblock_section_id |
Розділ каталогу (NULL = весь каталог) |
applied |
Прапорець, застосовано ли зміна |
Агент SeasonalPricingAgent запускається раз в день, перевіряє записи де active_from = TODAY та applied = 0, застосовує коефіцієнт та ставить applied = 1. Аналогічно — агент повернення при active_to < TODAY.
Інтеграція з кешем
Після масового оновлення цін потрібно скинути кеш каталогу. Використовуйте \Bitrix\Main\Data\Cache::clearByTag('b_catalog') або викликайте \Bitrix\Main\Data\TaggedCache::clearByTag('catalog_element_'.$productId) у циклі. На великих каталогах (10 000+ товарів) робіть це пакетами по 500 товарів з паузами.
Що налаштовуємо
- Таблицю розписання
bl_seasonal_pricingтаbl_price_backup - Агент застосування сезонних цін з бекапом вихідних значень
- Агент повернення цін по закінченні сезону
- Правила каталогу в
b_catalog_discountдля скидочних сезонів - Інвалідацію кешу після масового оновлення цін







