Developing a Customizable B2B Showroom for Dealers on 1C-Bitrix
We regularly face the task of building a B2B showroom for dealers on 1C-Bitrix. A dealer is not a retail customer: they need their own price list with personal prices, the ability to place orders on behalf of an end client, see warehouse stock, and export data to their accounting system. The standard Bitrix online store showroom does not cover any of these scenarios without serious customization. Our goal is to build a B2B section that works in parallel with the retail store on the same product infoblock.
Multisite vs. Section: Which to Choose?
Two approaches to separating retail and dealers.
Multisite — a separate site in Bitrix (s2) with its own domain (dealer.myshop.by). The dealer site uses the same catalog infoblock but its own price type and template. Advantage: complete isolation of design, cart settings, and order processing. Disadvantage: duplication of component templates. In 80% of projects, we choose multisite — it provides clean separation of business logic without conditional constructs.
Section on the main site — /dealer/ with a check of the user belonging to the "Dealers" group. Catalog components use the same infoblock but show the dealer price type via the PRICE_CODE parameter. Easier to maintain but harder to isolate order processing logic. Multisite wins over section by 2 times in ease of maintenance when dealing with a large number of dealers.
How to Implement Personal Prices?
Bitrix supports up to 8 price types in the standard license and unlimited in "Business" and above. For a dealer showroom, we create a separate price type (e.g., DEALER_PRICE) linked to the "Dealers" user group.
Personalization per dealer is implemented through additional price types — one for each major dealer — or through catalog discounts tied to the user group. The first option scales up to 20–30 dealers; beyond that, management becomes unwieldy. The second works with any number but lacks the flexibility of "any price for any item."
For individual price lists with thousands of items, we use a custom order property with a price calculated on the fly from the base dealer price and a personal coefficient. The coefficient is stored in a user UF field (UF_DEALER_DISCOUNT), and the price is recalculated in the OnGetOptimalPrice handler. For a distributor with 30 dealers, this approach eliminated manual price updates, reducing management overhead by 60%.
How to Display Warehouse Stock to Dealers?
A retail customer sees "In stock / Out of stock." A dealer needs exact numbers per warehouse.
The catalog.store module stores stock in the b_catalog_store_product table (fields PRODUCT_ID, STORE_ID, AMOUNT). Warehouses are in b_catalog_store. The catalog.store.amount component displays stock, but its standard template is not suitable for B2B — no grouping by region, no filtering by warehouses accessible to a specific dealer.
Solution: a custom template of the component that filters warehouses by a user UF field UF_AVAILABLE_STORES (array of warehouse IDs). A dealer from Minsk sees "Minsk-1" and "Minsk-2" warehouses, while a dealer from Gomel sees "Gomel-central."
How to Place an Order on Behalf of a Client?
The dealer places an order and specifies the end recipient. In the sale module, this is implemented via order properties of type "End Client" — a group of properties (PERSON_TYPE) for the dealer payer type.
We create a payer type "Dealer" with fields: dealer details (auto-filled from profile) + a "End Recipient" block (name, address, phone). In the OnSaleOrderBeforeSaved handler, we check that the dealer cannot place an order using the retail payer type.
How to Set Up Data Export for Dealers?
Dealers request price lists in Excel/CSV for import into their 1C. We implement this via a custom page /dealer/export/ that generates a file based on \Bitrix\Catalog\PriceTable::getList() filtered by the dealer price type. Excel format uses the PhpSpreadsheet library (installed via Composer).
For automatic export, we provide the dealer with an API endpoint authorized by token. The endpoint returns JSON with products, prices, and stock — the dealer fetches it via cron. According to the official CommerceML documentation, this approach ensures compatibility with 1C.
Scope of Work
| Component |
Description |
| Multisite setup |
Creation of a separate site with dealer design and settings |
| Price types and discounts |
Creation of dealer price type, setup of personal discounts |
| Custom templates |
Development of templates for stock, orders, export |
| 1C integration |
Exchange setup via CommerceML (prices, stock) |
| Documentation and training |
Instructions for dealers, administrator training |
| Support |
Technical support for 1 month after launch |
Timelines
| Component |
Timeline |
| Multisite + basic catalog with dealer prices |
3–4 days |
| Personal coefficients + warehouse stock |
3–4 days |
| Client order placement + export |
2–3 days |
| Testing and access rights debugging |
1–2 days |
| Total |
1–2 weeks |
Our experience in 1C-Bitrix development spans over 7 years, with more than 50 B2B projects for dealers. Contact us for a project assessment. Get a consultation on architecture and timelines.
B2B Portal Development on 1C-Bitrix
A dealer in Krasnoyarsk enters 50 SKUs, needs an instant invoice with his own price, credit limit, and delivery from the nearest warehouse. A retail catalog won’t cut it. We build such portals on 1C-Bitrix — with personalized price matrices, dealer cabinets, and real-time 1C integration. Over 50 B2B portals launched, 12-month warranty, certified 1C-Bitrix specialists with 10+ years in development. Submit a request for a free audit of your current pricing system — we will analyze your structure and propose a tailored architecture.
How does pricing work in a B2B portal?
Retail has one price. B2B has a matrix: price types in b_catalog_price multiplied by user groups, cumulative discounts, currency conversions, contractual conditions. A mistake here sinks the project.
Price types and user groups. Bitrix sets types via CCatalogGroup. Standard set: retail, small wholesale, wholesale, dealer, distributor. Each counterparty belongs to a user group, the group to a price type. Reality is more complex: one dealer may see wholesale prices for electronics and distributor prices for accessories. That requires custom logic in the OnSaleBasketItemBeforePriceSave handler.
Discounts — progressive by volume (from 100 pieces → minus 5%, from 500 → minus 12%), cumulative over a period, seasonal, category-based. Combined through priorities in b_sale_discount. With 20+ rules, debugging becomes a quest.
Credit limits. The counterparty gets a shipping credit threshold. Current debt syncs from 1C via the register РасчетыСКонтрагентами (Settlements with Counterparties). Exceeding the limit blocks order placement.
Contract prices — the price list is tied to a specific contract: validity period, number, prolongation conditions. Expiration switches prices to base ones automatically. Implemented through order custom fields and the OnSaleComponentOrderProperties handler.
Currency — mandatory for foreign trade. Conversion at the Central Bank rate (CCurrencyRates::ConvertCurrency()) or a fixed contract rate.
Compare CommerceML and REST for price sync: CommerceML is simpler but 4x slower on catalogs over 10,000 items, and it can’t handle credit limits. REST API via 1C HTTP service is 3x faster and fully flexible but requires 1C-side modifications. According to the 1C-Bitrix Developer's Guide, real-time sync of directories and balances is critical for B2B portals.
What does the dealer cabinet include?
-
Orders — full history with filtering by statuses, dates, amounts. Repeat previous order in one click — saves hours for regular purchases.
- Finances — balance of mutual settlements, reconciliation statement, payment history. No more waiting three days for accounting — data available instantly, pulled from 1C via REST or CommerceML.
- Documents — invoices, waybills, sales invoices, UPD, certificates. Generated in 1C, PDF pushed to the portal via integration. One-click download.
- Dealer employee management — admin creates accounts with role permissions: purchasing manager places orders, accountant sees only finances, director sees the big picture. Extended standard Bitrix user groups.
Quick order: SKU + quantity = invoice
A B2B client doesn’t browse beautiful cards. They need a form: SKU, quantity, next line.
- Quick order form — auto-suggest of name and price when entering SKU. AJAX search by
b_iblock_element.XML_ID or PROPERTY_ARTICLE. 50 items in 3 minutes.
- Import from Excel/CSV — client exports from their system, uploads to the portal. Auto-matching of SKUs, availability check, order generation. Parsing via
PHPExcel or PhpSpreadsheet.
- Basket with full information — weight, volume, number of packages, estimated delivery cost before checkout.
Why is 1C integration critical for a B2B portal?
Without up-to-date data from 1C, the portal is useless. Manager changed the price of nails — in 15 minutes a dealer in Krasnoyarsk sees the new price.
| Data |
Direction |
Mechanism |
| Catalog, characteristics |
1C → Portal |
CommerceML or REST, 15–60 min |
| Prices by type and counterparty |
1C → Portal |
REST API, by event or schedule |
| Stock balances by warehouse |
1C → Portal |
REST, 5–15 min or real-time via 1C HTTP service |
| Orders |
Portal → 1C |
REST, real-time |
| Statuses, shipments |
1C → Portal |
By event |
| Mutual settlements |
1C → Portal |
1–2 times per day |
| Documents (PDF) |
1C → Portal |
By event |
We often use a hybrid: CommerceML for catalog, REST for prices, stocks, and documents.
EDI: legally significant paperless exchange
For large B2B projects:
- Providers — Kontur.Diadoc, SBIS, Kaluga Astral. Invoices, certificates, waybills in electronic form with legal force.
- CEP — qualified electronic signature. The counterparty signs right in the cabinet.
- Roaming between operators — without it, half of partners with a different EDI operator are left out.
Multi-branch operation
- Regional warehouses — client sees stock of the nearest warehouse and can choose the shipping one. Product available in Novosibirsk but not in Moscow → portal shows both options with different lead times.
- Automatic manager assignment — dealer from Krasnodar works with Ivan, from Yekaterinburg with Marina. Based on
UF_REGION in the counterparty card.
- Local conditions — minimum order amount, delivery terms, lead times — differ by region.
B2B Portal Development Process
B2B portal development includes five stages.
| Stage |
Timeline |
Result |
| Process audit |
1–2 weeks |
Business process diagram, integration map |
| Design |
2–3 weeks |
Architecture, prototypes, 1C exchange specification |
| Development |
4–8 weeks |
Cabinets, pricing mechanics, integrations, document flow |
| Testing |
1–2 weeks |
Functional, integration, load testing on real data |
| Pilot |
2–3 weeks |
5–10 dealers, feedback, refinements |
What is included in the work
- Complete project documentation (terms of reference, architecture diagram, integration protocols)
- Server environment setup and deployment (On-Premise or cloud)
- Migration of all user data and configurations
- Portal administrator training (2 online sessions)
- Warranty support for 12 months with response within 4 hours
After launch — technical support and development. A B2B portal is a living system that evolves with the business.
Average time savings for a manager on order processing — up to 20 hours per week, which translates to approximately $15,000 annual savings per dealer. A self-built portal typically takes 6 months to develop, while a Bitrix-based solution is ready in 2 months.
Typical mistakes to avoid at the start
- Verify price types and user groups before going live.
- Keep discount rules to a minimum (3–4) — 20+ rules cause debugging nightmares.
- Test 1C integration on real data during pilot.
- Grant dealer access only after load testing with 50 concurrent users.
Contact us to discuss your project — we will prepare a preliminary estimate and propose the optimal solution. Get your free audit of pricing mechanics today.