Setting Up Wholesale Prices by Order Volume in 1C-Bitrix
Wholesale discount by volume — classic mechanic: bigger order, lower unit price. In Bitrix implemented several ways depending on which volume type counts: units of specific product, total cart sum, or quantity per category.
Quantized Prices: Built-in Mechanism
The catalog module supports quantized (tiered) prices via b_catalog_price table. For one product can set multiple rows with one price type, but different QUANTITY_FROM and QUANTITY_TO values. Bigger quantity in row — lower price.
Configuration in control panel: product card → "Prices" tab → for needed price type add multiple rows with different ranges. Or programmatically via CCatalogProductPrice::Add() / CCatalogProductPrice::Update() on import.
When adding product to cart, Bitrix automatically determines correct row by quantity and applies corresponding price. Works without additional code — standard module logic.
Discounts by Cart Sum
If price depends not on quantity of specific product but on total order sum — use discount module (CCatalogDiscount). Create "On cart" type discount with condition ORDER_PRICE > N → X% discount. Multiple levels: sum 50K — 5%, 100K — 8%, 200K — 12%.
Configuration: Store → Price Rules. Condition — "Order sum", action — "Discount on entire cart" in percentages or fixed amount. Discounts stack by priority — important to set "Stop further application" flags correctly.
Discounts by Volume in Category
More complex scenario: discount applies if buyer took products from category X totaling more than Y. Standard catalog module tools cover this via advanced discount conditions — select "Infoblock section" in condition, specify sum threshold.
If logic non-standard (e.g., discount calculated by sum of multiple categories or with weight coefficients) — implement via OnSaleBasketBeforeSaved event handler with custom calculation.
Displaying Tiered Prices
Customer should see price table at different volumes before adding to cart. In product card component (bitrix:catalog.element) in result_modifier.php pull all b_catalog_price rows for product with QUANTITY_FROM > 0, form QUANTITY_PRICES array and output as table:
| Quantity | Price per unit |
|---|---|
| 1–9 | 1,200 rubles |
| 10–49 | 1,050 rubles |
| 50+ | 900 rubles |
Setup of tiered prices for existing catalog (via interface + import): 3–5 days. Development of custom discount logic with display: 1–2 weeks.







