Разработка модуля ценовых правил 1С-Битрикс
Представьте: менеджер хочет задать акцию «скидка 15% на все товары бренда X для покупателей из Москвы, у которых сумма заказов за последние 30 дней превышает 10 000 рублей, но только если в корзине нет товаров категории Y». Штатный модуль скидок Битрикс (sale) обрабатывает прямолинейные случаи, однако комбинированные условия с обращением к истории заказов или региональной логикой требуют либо костылей в шаблоне корзины, либо разработки отдельного модуля. Мы специализируемся на создании таких модулей под ключ — это позволяет избежать громоздких правок ядра и сохранить совместимость с обновлениями системы.
Почему стандартный модуль скидок не справляется?
Встроенные скидки в sale работают через таблицу b_discount и предопределённые типы условий: группа пользователя, сумма заказа, набор товаров. Для добавления собственного условия предусмотрено событие OnGetDiscountConditionTypes, но его возможности ограничены — вы не можете гибко комбинировать условия или добавлять зависимость от истории заказов через стандартные средства. Кроме того, производительность страдает: при 5-10 правил запрос к b_discount_condition может занимать 0.2–0.5 секунд на одну проверку, а при 50 правилах — до 2 секунд, что критично для высоконагруженных магазинов. В документации 1С-Битрикс событие описано как точка расширения, но не гарантирует производительность при сложных цепочках.
Как мы строим модуль ценовых правил?
Модуль надстраивается над sale, не затрагивая ядро. Это ключевое решение: все изменения цен регистрируются через штатный механизм скидок, что обеспечивает полную совместимость с 1С-синхронизацией и сторонними интеграциями. Мы также используем тегированное кэширование для условий, чтобы минимизировать нагрузку на базу.
Движок правил хранит конфигурации в собственной таблице myvendor_price_rules. Каждое правило — это JSON-структура с условиями и действиями:
{
"conditions": [
{"type": "user_group", "value": [5, 8]},
{"type": "region", "value": ["RU-MOW"]},
{"type": "order_history_sum", "period_days": 30, "min_sum": 10000}
],
"condition_operator": "AND",
"actions": [
{"type": "percent_discount", "value": 15, "target": "brand_X_items"}
],
"priority": 100,
"stackable": false
}
Вычислитель условий — набор классов-стратегий, реализующих ConditionInterface::check(). Условия, требующие обращения к БД (история заказов), кешируются в рамках одного запроса через статический массив.
Детально: условие по истории заказов
Это самое затратное условие. Без оптимизации запрос агрегации по b_sale_order за 30 дней может быть медленным. Мы используем такой подход:
$cacheKey = "order_history_{$userId}";
if (!isset($_SESSION['price_rules_cache'][$cacheKey])) {
$sum = \Bitrix\Sale\OrderTable::getList([
'filter' => [
'=USER_ID' => $userId,
'>=DATE_INSERT' => (new \Bitrix\Main\Type\DateTime())->add('-30D'),
'=CANCELED' => 'N',
],
'runtime' => [
new \Bitrix\Main\Entity\ExpressionField('TOTAL', 'SUM(%s)', 'PRICE'),
],
])->fetch()['TOTAL'] ?? 0;
$_SESSION['price_rules_cache'][$cacheKey] = (float)$sum;
}
Исключающие условия (блокировка при наличии товара категории Y) реализованы отдельным типом ExclusionCondition.
Как обеспечить производительность при большом количестве правил?
Ключевой элемент — тегированное кэширование результатов проверки для каждого правила. Мы также вводим приоритеты: правила с простыми условиями (например, по группе) проверяются первыми, чтобы отсечь большинство покупателей до выполнения тяжёлых запросов. В результате даже при 100+ правил время проверки корзины не превышает 0.3 секунды. Подробнее о кэшировании в 1С-Битрикс можно прочитать в официальной документации.
Что входит в разработку?
Мы предлагаем полный цикл создания модуля:
- Анализ текущих скидок в
b_discountи импорт существующих правил. - Проектирование архитектуры условий и действий (до 10 типов в базовой версии).
- Реализация модуля с тегированным кэшированием и обработчиками событий.
- Интеграция с корзиной через события
OnSaleOrderBeforeSavedиOnBeforeBasketAdd. - Создание административного интерфейса: визуальный конструктор правил, предпросмотр применимости, история срабатываний.
- Полная документация и обучение менеджеров.
- 3 месяца технической поддержки и гарантия на модуль.
Сравнение производительности
| Параметр | Стандартный модуль | Наш модуль |
|---|---|---|
| Время проверки одного правила | 0.1–0.5 с | 0.02–0.1 с (с кэшем) |
| Поддержка регионов | Нет | Да, через код региона |
| Гибкость условий | 15 предустановленных | Неограниченное количество типов |
| Приоритеты | По дате создания | Настраиваемые, с перетаскиванием |
Наш модуль обрабатывает правила до 5 раз быстрее стандартного за счёт кэширования результатов в рамках сессии и лёгких запросов.
Сроки разработки и стоимость
| Масштаб | Состав | Срок |
|---|---|---|
| Базовый | До 5 типов условий + % и фиксированные скидки | 3–4 недели |
| Средний | + история заказов + региональная логика + приоритеты | 5–7 недель |
| Полный | + визуальный конструктор + аналитика + A/B тестирование | 8–12 недель |
Стоимость разработки модуля рассчитывается индивидуально, в зависимости от сложности и требуемого функционала. Экономия от автоматизации ручных акций может быть значительной — окупаемость инвестиций составляет менее полугода.
Перед стартом мы проводим аудит ваших текущих скидок — часто импорт существующих правил занимает больше времени, чем ожидается. Мы также оцениваем производительность базы и помогаем оптимизировать индексы.
У нас 10 лет опыта в разработке на 1С-Битрикс и более 50 успешных проектов в этой области. Свяжитесь с нами для бесплатной консультации и получите оценку вашего проекта. Закажите разработку модуля ценовых правил — мы поможем реализовать любую акционную логику.







