Setting Up Individual Prices for B2B Clients in 1C-Bitrix
Two customers order the same product but see different prices — because each has their own contract. Standard B2B task that Bitrix solves via price type mechanism, but requires proper configuration: wrong setup leads to customer seeing someone else's price.
Price Type Mechanism in Catalog Module
In Bitrix each product can have multiple prices — one per price type (b_catalog_group). Price type is simply a named pricing level: "Retail", "Wholesale", "VIP", "Contract". For each price type, set which user groups (b_user_group) have access to it.
Configuration in control panel: Store → Settings → Price Types. Create types for each level. In "Customer Groups" specify which group sees which type.
Individual Prices: Two Approaches
Approach 1 — Group per customer. Each B2B customer gets separate user group (b_user_group) and separate price type. Customer enters that group — sees their prices. Works while customers are dozens. With hundreds — managing becomes inconvenient: each new customer requires group and price type creation, plus price upload.
Approach 2 — Highload block of contract prices. More scalable. Create Highload block b2b_contract_prices with fields: UF_COMPANY_ID, UF_PRODUCT_ID, UF_PRICE, UF_CURRENCY, UF_DATE_FROM, UF_DATE_TO. On price request — check contract price for customer company first, then group pricing, then base price. Logic via custom price provider.
Price Application Priority
Order in which system searches for price for specific user is set in price type settings — "Sorting" field. Lower number — higher priority. Individual contract price should have sorting 1, retail base — 100.
Uploading Prices from 1C
Using CommerceML exchange with 1C, prices sync automatically by price types. In exchange file, price type identified by ТипЦены field — maps to CATALOG_GROUP_ID in Bitrix. Contract prices not in standard pricelist are exported separately and loaded into Highload block.
What to Check After Setup
- Authorized "Wholesale" group user doesn't see "Retail" price and vice versa
- Logged-out user doesn't see B2B prices at all (if catalog is closed)
- Price cache invalidated on changes — via tagged cache or
CCatalogProduct::clearCacheProductPrice()
Setup of price types and groups for standard scheme (up to 5 price types, no contract Highload): 3–5 days. Development of contract price provider with Highload block: 1–2 weeks.







