We have been developing wholesale (B2B) sections for online stores on 1C-Bitrix for over 7 years. During this time, we have completed over 50 projects — from simple two-level price lists to full-scale dealer portals with credit limits, 1C integration, and electronic document workflow. If you need your retail catalog to work for wholesale clients as well — with separate prices, minimum order quantities, fast order by article, and Excel upload — we will provide a turnkey solution. Development of basic functionality starts from $500. We will assess your project and provide timelines within a day. Order the development of your wholesale section today to give your B2B clients a convenient purchasing tool. Our guaranteed timeline is 2 weeks for basic setup, and our certified developers have 7+ years of Bitrix experience.
Why standard Bitrix functionality is insufficient
The built-in price types and user groups cover only simple scenarios. Real B2B requirements include individual discounts, tiered prices, currency exchange rates, credit limits, and separate document workflow. Without core and module customizations, it is unavoidable. Our custom solution is 2 times faster than standard modules.
Configuring price types for B2B
The basis of the pricing architecture is the b_catalog_group table. Each price type ("Retail", "Wholesale", "Dealer") is linked to a user group. The CCatalogProduct::GetOptimalPrice() function returns the best price for an authorized customer. But in practice, this is not enough.
For individual contractor discounts, we use basket rules (sale.discount) with group conditions. Tiered prices (e.g., from 100 units one price, from 1000 another) are implemented through quantity ranges in b_catalog_price (QUANTITY_FROM / QUANTITY_TO). If wholesalers work in different currencies, we create price types in different currencies, with conversion via the currency module.
An important nuance: a price type is tied to a group, not a user. Creating 200 groups for 200 contractors is not rational. In such cases, we write a handler for the OnGetOptimalPrice event that pulls prices from 1C or ERP via cache. For more on price types, read the official documentation.
| Scenario | Implementation in Bitrix | Limitations |
|---|---|---|
| 3–5 price levels | Price types + user groups | Standard mechanism, works out of the box |
| Tiered prices by quantity | Ranges in b_catalog_price |
Not displayed in the product card without template customization |
| Individual price per contractor | OnGetOptimalPrice event + external source |
Requires caching, otherwise a request to 1C per each product |
| Category discount for a group | Basket rules (sale.discount) |
Not visible in the catalog until added to cart |
Minimum order quantity and order multiple
Wholesale products require a minimum quantity and a step (multiple). Bitrix has the "Unit of measurement coefficient" field (b_catalog_measure_ratio), but it only acts as a multiplier. A full implementation requires:
- An infoblock property "Minimum order quantity" — validation via
OnSaleBasketItemBeforeUpdate. - A "Multiple" property — rounding up to the nearest multiple.
- Display in the product card: a selector with steps (10, 20, 30) or a field with validation.
Implementing quick ordering by article
Wholesale clients often order by article numbers without browsing the catalog. Follow these steps:
- Create a form "article + quantity" — a list of rows. The server matches the article with
PROPERTY_CML2_ARTICLEorXML_IDand adds to the cart. - Implement Excel/CSV upload using PhpSpreadsheet (via Composer). The parser processes the file and forms the cart. Unmatched articles are output in a report.
- Add a "Reorder" button in the personal account, copying the previous order composition into the current cart via
Bitrix\Sale\Basket::loadItemsForOrder().
Credit limits and deferred payment
In B2B, payment often occurs post-factum. Mechanism:
- In the contractor's profile (UF fields), store the limit and current debt.
- The
OnSaleOrderBeforeSavedhandler checks: order sum + debt ≤ limit. - If exceeded, the order is not placed and the available balance is shown.
- After payment (status via 1C exchange), the debt is recalculated.
Document workflow in the personal account
A wholesale client expects: invoices (generated when an order is created, PDF via sale_print or TCPDF), reconciliation statements (from 1C, in a highload block), waybills and UPD (with digital signature), order history with filtering by period, status, and amount. The standard component sale.personal.order is customized or replaced with a custom one.
Why basket separation is critical
Technically, Bitrix has one basket per user. If a customer buys both retail and wholesale, isolation is needed. Solutions:
-
Two sites in one installation — baskets are separated by
FUSER_ID+LID. Downside: duplicate settings. -
Basket item property (
BASKET_TYPE = wholesale). During checkout, only wholesale items are filtered. Downside: more complex implementation.
The first option is more reliable: two sites with a shared catalog, different templates, and independent baskets. Switching is done via subdomain or URL section.
1C integration for the wholesale section
Standard CommerceML (Wikipedia) does not cover B2B entities: contractors (mapping by TIN), mutual settlements (debt, credit limit), individual prices (contractor-product-price). Customization is required: either extending XML nodes or a separate REST exchange.
Common mistakes to avoid
- Price types not tied to user groups — price is not recalculated.
- No handling of minimum order quantity — a client can order 1 piece.
- Basket is shared between retail and wholesale — confusion in stock.
- No caching of individual prices — catalog slows down.
- Documents not generated automatically — clients leave.
| Stage | Duration | Result |
|---|---|---|
| Analysis and design | 2-3 days | Technical specification |
| Price type configuration | 2-4 days | Working pricing scheme |
| Module development | 5-10 days | Ready functionality |
| 1C integration | 3-5 days | Data exchange |
| Testing | 2 days | Report |
What is included in our work
When you order the development of a wholesale section, you receive:
- Audit of the existing catalog and configuration of price types.
- Implementation of mechanisms for minimum order quantity, multiples, and credit limits.
- Development of a quick order interface and Excel upload.
- Document workflow setup (invoices, statements) in the personal account.
- 1C integration (contractors, mutual settlements, price lists).
- Testing and handover of documentation, including admin training.
- Access to development environment and post-launch support (under contract).
Our expertise
Over 7 years of experience in developing on 1C-Bitrix. Stack: PHP 8.1+, infoblocks v2.0, ORM, components 2.0, MySQL/MariaDB, integrations with YooKassa, Sber, CDEK, Russian Post. We work with both cloud and on-premise versions of Bitrix24. We guarantee 95% client satisfaction.
Get a consultation on your project — we will propose the optimal solution and provide timelines.







