Настройка цен по объему заказа 1С-Битрикс
Оптовые скидки по объёму — стандартная задача для B2B-магазинов: купи 10 штук — одна цена, 50 штук — дешевле, от 100 — минимальная цена. В Битрикс это реализуется через систему типов цен или через скидки каталога с условиями по количеству. Оба подхода рабочие, но с разной механикой.
Подход 1: Типы цен по количеству
В каталоге Битрикс можно создать несколько типов цен (b_catalog_group): «Розница», «Оптовая 10+», «Оптовая 50+». Для каждого товара заводятся несколько записей в b_catalog_price с разными CATALOG_GROUP_ID. Пользователям назначаются группы, каждая группа видит свой тип цены.
Проблема: группы пользователей назначаются заранее, а не динамически при достижении порога в корзине. Метод подходит для постоянных оптовых клиентов, но не для разовых накопительных скидок «в этом заказе».
Подход 2: Скидки каталога с условием по количеству
Более гибкий вариант — скидки через b_catalog_discount. В административном разделе: «Магазин → Правила каталога» → создаём правило с условием «Количество товара >=» и действием «Уменьшить цену товара на X%».
Структура скидки:
-
Условие:
catalog_PRODUCT_QUANTITY >= 10(количество конкретного товара в корзине) -
Действие:
DISCOUNT_PERCENT = 10(скидка 10%) - Приоритет: несколько правил для разных порогов
Битрикс применяет скидки при пересчёте корзины через \Bitrix\Sale\Discount. Важно: условие по количеству проверяется на уровне позиции в корзине, а не всей корзины. Для суммарного объёма заказа (все товары вместе) нужны правила корзины из b_sale_discount.
Подход 3: Объёмные скидки через правила корзины
Правила корзины (b_sale_discount) позволяют задать условие «Сумма заказа >=» или написать собственное условие через PHP. Для порогов по суммарному количеству — создаём правило с кастомным условием:
Тип условия: "Собственное условие"
Класс условия: наследник \Bitrix\Sale\Discount\Condition\Base
Логика: подсчитать суммарное количество товаров в корзине >= N
Это требует написания PHP-класса и регистрации его через Bitrix\Sale\Discount\Discount::registerConditionsList().
Отображение шкалы скидок на странице товара
Покажите покупателю шкалу: 1–9 шт — 100 руб/шт, 10–49 шт — 90 руб/шт, от 50 шт — 80 руб/шт. Данные для шкалы берутся из b_catalog_price (при подходе с типами цен) или вычисляются из b_catalog_discount через \Bitrix\Catalog\DiscountTable. Шкала рендерится в шаблоне компонента catalog.element как HTML-таблица.
Что настраиваем
- Типы цен в
b_catalog_groupи заполнениеb_catalog_priceдля оптовых порогов (для B2B с фиксированными группами) - Правила каталога в
b_catalog_discountс условиями по количеству (для динамических порогов) - Шаблон отображения шкалы скидок на странице товара
- Корректное отображение итоговой цены в корзине при смене количества (AJAX-пересчёт)







