Налаштування цін за обсягом замовлення 1С-Bitrix
Оптові знижки за обсягом — стандартне завдання для B2B-магазинів: купи 10 штук — одна ціна, 50 штук — дешевше, від 100 — мінімальна ціна. У Bitrix це реалізується через систему типів цін або через знижки каталогу з умовами за кількістю. Обидва підходи робочі, але з різною механікою.
Підхід 1: Типи цін за кількістю
У каталозі Bitrix можна створити кілька типів цін (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 застосовує знижки при перерахунку кошика через \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-перерахунок)







