Настройка сезонного ценообразования на 1С-Битрикс
Сезонное ценообразование — это изменение цен по календарному расписанию: зимние куртки дорожают в октябре, дешевеют в марте; новогодние наборы идут с наценкой в декабре; летние товары уценяются в августе. В Битрикс это решается через скидки с условием по дате или через плановые агенты, которые меняют цены по расписанию.
Скидки каталога с ограничением по дате
Стандартный механизм — правила каталога в 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для скидочных сезонов - Инвалидацию кэша после массового обновления цен







