Настраиваем расчёт скидок только там, где они реально отображаются, а не на каждом товаре
Дата публикации: 24.06.2026

Настраиваем расчёт скидок только там, где они реально отображаются, а не на каждом товаре

Хочу себе такие же кнопки
ccb9a536

Что вы получите сразу после чтения

  • Понимание, почему «общий» расчёт скидок замедляет работу сайта и приводит к неверным ценам.
  • Чёткую схему, как ограничить вычисления только теми товарами, где скидка действительно показывается покупателю.
  • Пошаговый инструктаж по настройке в админке Битрикс 24/1С‑Ритейл, а также через API.

1. Почему важно считать скидку лишь там, где она видна

Проблема Последствия Как решается
Глобальный расчёт (на каждый SKU) Нагрузка на базу, увеличение времени генерации страницы, «залипание» в кеш‑слое. Перенести расчёт в точки применения – только в каталоге и/или в корзине.
Скидка, не отображаемая (например, только для определённого пользовательского сегмента) Пользователь видит обычную цену, а в бэкенде уже списана скидка → разница в отчётах. Установить условие отображения в правиле скидки.
Дублирование правил (одна и та же скидка в нескольких модулях) Конфликт приоритетов, непредсказуемый результат. Сконсолидировать правила в одном модуле – «Скидки в каталоге» или «Скидки в корзине».

2. Основные места, где Битрикс может применять скидку

  1. Каталог (Catalog) – цена, которую пользователь видит в карточке товара и в списках.
  2. Корзина (Basket) – окончательная цена перед оформлением заказа.
  3. Заказ (Order) – итоговая цена в документе, часто используется для отчётов и интеграций.

Каждая из этих точек имеет свой триггер. Если правило скидки привязано к “все места”, Битрикс будет выполнять запросы к базе три раза для одного SKU, даже если пользователь никогда не увидит цену в каталоге (например, скидка только для партнёров в корзине).


3. Как ограничить расчёт только нужными точками

3.1. Создаём правило скидки в админке

  1. Маркетинг → Скидки и наценки → Добавить правило.
  2. В поле «Тип правила» выбираем «Скидка».
  3. В секции «Точки применения» ставим галочки только там, где нужно:
    • «Каталог» – если скидка должна быть видна в карточке и списках.
    • «Корзина» – если скидка применяется только при оформлении.

Важно: Если галочка «Все» оставлена, система будет вычислять скидку в каждом из трёх модулей, даже если пользователь не увидит её в двух из них.

3.2. Условие отображения (Condition)

Условие Пример Как влияет
Группа пользователей USER_GROUP = "Оптовики" Скидка будет рассчитана только для этой группы; остальные пользователи не будут участвовать в запросе.
Наличие свойства PRODUCT_PROPERTY["SHOW_DISCOUNT"] = "Y" Если у товара нет свойства SHOW_DISCOUNT, правило просто игнорируется.
Минимальная сумма заказа BASKET_TOTAL >= 5000 Скидка будет вычислена только в корзине, когда сумма превысит порог.

3.3. Пример практического правила

Сценарий: Скидка 10 % только для товаров, у которых в каталоге включён флаг «Акция», и только для оптовых клиентов.

Шаг Действие
1 Тип правила – Скидка.
2 Точки применения – Каталог.
3 УсловиеPRODUCT_PROPERTY["SALE_FLAG"] = "Y" И USER_GROUP = "Оптовики".
4 Ставка – 10 %.
5 Приоритет – 100 (чтобы перекрывать общие правила).

В результате Битрикс будет выполнять запрос к базе только для товаров, у которых SALE_FLAG = Y. Для всех остальных товаров запросы не будет, экономя ресурсы.


4. Технические детали: как работает механизм в коде

// Пример получения цены с учётом только нужных точек
$price = \Bitrix\Catalog\Product\Price::getBasePrice($productId);
$discount = \Bitrix\Sale\Discount::getDiscountList([
    'PRODUCT_ID' => $productId,
    'USER_ID'    => $userId,
    'APPLY'      => ['CATALOG'] // <-- ограничиваем точку применения
]);
$finalPrice = $price - $discount;
  • Параметр APPLY принимает массив точек (CATALOG, BASKET, ORDER).
  • Если передать пустой массив, система будет искать скидку во всех точках, что замедляет работу.

4.1. Кеширование

Битрикс кэширует результат расчёта в зависимости от ключа:

discount_{PRODUCT_ID}_{USER_GROUP}_{APPLY}

Если точка применения меняется, кэш‑ключ меняется, и кэш будет построен заново. Поэтому уменьшение количества точек ускоряет не только расчёт, но и повышает hit‑rate кэша.


5. Как проверить, что правило работает только в нужных местах

  1. Откройте карточку товара в публичной части сайта.
    • Если скидка не должна показываться, цены должна быть оригинальная.
  2. Добавьте товар в корзину и перейдите в корзину.
    • Если правило привязано к корзине, цена должна измениться.
  3. Откройте админку → Отчёты → Скидки и отфильтруйте по полю Точка применения.
Точка Ожидаемый результат
Каталог Цена в карточке изменена.
Корзина Цена в корзине изменена, в каталоге – нет.
Заказ Цена в документе изменена, в каталоге и корзине – нет.

Если наблюдается расхождение, проверьте приоритеты и условия в правиле.


6. Частые ошибки и как их избежать

Ошибка Почему происходит Как исправить
Скидка считается в всех точках, хотя нужна только в каталоге. Галочка «Все» оставлена в «Точках применения». Снимите галочки, оставьте только Каталог.
Пользователь видит цену без скидки, но в отчёте скидка учтена. Условие отображения (SHOW_DISCOUNT) не добавлено. Добавьте условие PRODUCT_PROPERTY["SHOW_DISCOUNT"] = "Y".
Система генерирует «запросы к базе» в цикле для каждого SKU. Правило без фильтра по свойствам, применяется к всех товарам. Добавьте фильтр по свойству, например PRODUCT_PROPERTY["SALE_FLAG"] = "Y".
Кеш не обновляется после изменения правила. Ключ кэша не меняется, потому что точка применения не изменилась. Очистите кеш вручную или измените приоритет/условие, чтобы ключ изменился.

7. Как масштабировать на крупном магазине

  1. Разделите правила по модулям – один набор для каталога, другой для корзины.
  2. Группируйте товары по свойствам (SALE_FLAG, DISCOUNT_GROUP) и создавайте правила уровня группы.
  3. Используйте API‑метод \Bitrix\Sale\Discount::setApplyPoints для динамического переключения точек применения в зависимости от нагрузки.
$discount = \Bitrix\Sale\Discount::load($discountId);
$discount->setApplyPoints(['BASKET']); // переключаем только на корзину
$discount->save();
  1. Отслеживайте метрики: запросы к b_sale_discountb_sale_discount_applies. При росте количества запросов в логах, проверяйте, не «перепрыгивают» правила в лишние точки.

8. Лучшие практики

Практика Описание
Минимальный набор условий Чем меньше условий, тем быстрее фильтрация в базе.
Явные приоритеты Указывайте приоритеты, чтобы избежать конфликтов.
Тестирование в режиме «Только для админа» Позволяет проверить логику без влияния на реальных покупателей.
Регулярный аудит кэша Очистка кэша после массовых изменений правил избавит от «залипания» старых цен.
Документирование правил Внутренний вики‑список с описанием, где и почему применяется каждая скидка.

Практика для закрепления

  1. Создайте правило скидки 15 % для товаров с свойством SHOW_DISCOUNT = "Y" и привяжите его только к корзине. Проверьте, что в каталоге цена не меняется, а в корзине — меняется.

  2. Сделайте тест: у вас есть две группы пользователей – «Розничные» и «Оптовые». Настройте правило, которое дает 20 % скидку только оптовым клиентам, но только в каталоге. Какой запрос к базе будет выполнен для розничного пользователя?

  3. Оптимизируйте существующее правило: в вашей базе есть правило «Скидка 5 % на все товары», привязанное к «Все». Перепишите его так, чтобы оно учитывалось только в корзине, а в каталоге цены оставались оригинальными. Оцените, насколько сократилось количество запросов к таблице b_sale_discount.

  4. Разработайте скрипт, который будет автоматически переключать точку применения правила с «Каталог» на «Корзина» в ночное время (период низкой нагрузки). Какие функции Битрикс вам потребуются?

  5. Проанализируйте отчёт: в админке откройте «Отчёты → Скидки», отфильтруйте по точке «Каталог». Сколько правил применяются только в каталоге? Какой процент от общего количества правил? Что это говорит о вашей текущей стратегии?


Итого: вы теперь знаете, как правильно ограничить расчёт скидок в Битрикс только теми точками, где они действительно нужны, как построить эффективные условия и как проверять корректность работы. Применяйте эти принципы, и ваш сайт будет работать быстрее, а цены – всегда точными.


CamZamZam - онлайн фото с вебкамеры с эффектами
Cartoon Network: игры с персонажами
Чат рулетка в 2026: будущие функции
Эксперт по доменным стратегическим решениям
Хостинг для e-commerce проектов
Как играть в слоты
Как настроить CDN для сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как оптимизировать производительность сайта с хостингом Host.bg
Как выбрать правильный хостинг для вашего сайта
Какие бывают ЛОР болезни у детей
Кассовые терминалы с оплатой картами
LOL куклы витрина детская
Лучшие видеорегистраторы для водителей
Онлайн QR-код сканер
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Основы настройки веб-хостинга: что вам нужно знать
Партнёрская программа без блога: как получать трафик из Telegram
Профессиональные хитрости для пользователей хостинга Host.bg
Регистрация ИП в Москве для иностранных граждан
Сравнение хостинга Host.bg с другими провайдерами
Субтитры — нет, уши — включены: погружение в английский за 5 минут
Сумки с бусинами
Техника для строительства загородных трасс
ТОП-10 VPS для разработчика: рейтинг серверов под рабочие задачи
WordPress блог для бизнеса
рейтинг хостингов 2026 Быстрые VDS серверы