Configuration of Volume-Based Pricing in 1C-Bitrix
Wholesale discounts by volume are a standard task for B2B stores: buy 10 units — one price, 50 units — cheaper, from 100 — minimum price. In Bitrix this is implemented via price types system or via catalog discounts with quantity conditions. Both approaches work, but with different mechanics.
Approach 1: Price types by quantity
In Bitrix catalog you can create multiple price types (b_catalog_group): "Retail", "Wholesale 10+", "Wholesale 50+". For each product multiple records in b_catalog_price with different CATALOG_GROUP_ID. Users are assigned groups, each group sees their price type.
Problem: user groups are assigned in advance, not dynamically when threshold is reached in cart. Method suits permanent wholesale clients, but not one-time cumulative discounts "in this order".
Approach 2: Catalog discounts with quantity condition
More flexible variant — discounts via b_catalog_discount. In admin section: "Store → Catalog Rules" → create rule with condition "Product Quantity >=" and action "Reduce product price by X%".
Discount structure:
-
Condition:
catalog_PRODUCT_QUANTITY >= 10(quantity of specific product in cart) -
Action:
DISCOUNT_PERCENT = 10(10% discount) - Priority: multiple rules for different thresholds
Bitrix applies discounts when recalculating cart via \Bitrix\Sale\Discount. Important: quantity condition is checked at basket item level, not whole cart. For total order volume (all items together) use cart rules from b_sale_discount.
Approach 3: Volume discounts via cart rules
Cart rules (b_sale_discount) allow setting condition "Order sum >=" or writing custom condition via PHP. For thresholds by total quantity — create rule with custom condition:
Condition type: "Custom condition"
Condition class: heir to \Bitrix\Sale\Discount\Condition\Base
Logic: count total product quantity in cart >= N
This requires writing PHP class and registering it via Bitrix\Sale\Discount\Discount::registerConditionsList().
Displaying discount scale on product page
Show buyer the scale: 1–9 units — 100 rub/unit, 10–49 units — 90 rub/unit, from 50 units — 80 rub/unit. Scale data taken from b_catalog_price (with price types approach) or calculated from b_catalog_discount via \Bitrix\Catalog\DiscountTable. Scale rendered in catalog.element component template as HTML-table.
What to configure
- Price types in
b_catalog_groupand populateb_catalog_pricefor wholesale thresholds (for B2B with fixed groups) - Catalog rules in
b_catalog_discountwith quantity conditions (for dynamic thresholds) - Discount scale display template on product page
- Correct final price display in cart when quantity changes (AJAX recalculation)







