If you have 80 dealers, managers spend half a day distributing price lists. That's a bottleneck we eliminate. A portal addresses three tasks: independent dealer order placement, individual terms for each partner, and automatic 1C synchronization without human intervention. We can estimate your project in one day—contact us for a consultation.
The key difference between a dealer portal and a regular B2B is the hierarchy: manufacturer → dealer → sub-dealer. One dealer may have multiple outlets and employees with different permissions. The standard Bitrix user group model (b_user_group) is insufficient—it doesn't store the "user belongs to company" relationship.
We implement this using D7 ORM: we create the DealerCompany entity (table b_dealer_company) with fields for 1C identifier, status, dealer type, and region. The user-company link is via the b_dealer_company_user table with a role field. Roles: owner, manager, accountant—each with different rights to create orders, view documents, and manage employees. Authorization through bitrix:system.auth.form is supplemented with a custom handler. On user login, we determine their company and dealer type, caching in the session. All subsequent requests for prices and catalog take dealer_type into account.
How to configure pricing for different dealer types?
Dealer pricing is the most complex part. A typical scheme:
- Base price list (public or private)
- Dealer discount by type (silver, gold, platinum)—percentage off base price
- Individual contract items—specific SKUs at fixed prices
- Promotional conditions with validity dates
The standard CATALOG_GROUP_ID mechanism in b_catalog_price covers the first two levels. For contract items, a Highload block dealer_contract_prices is needed with structure: UF_DEALER_ID, UF_PRODUCT_ID, UF_PRICE, UF_CURRENCY, UF_DATE_FROM, UF_DATE_TO. When querying a price, we first check contract items, then dealer type, then base price.
Price priority logic is implemented via the OnBeforeSaleOrderDoFinalAction event or a custom price provider implementing Bitrix\Catalog\v2\Price\BasePriceProvider. The second option is cleaner—it won't break on sale module updates. According to Bitrix documentation, BasePriceProvider ensures compatibility with future updates. A custom Bitrix solution offers better pricing flexibility than a ready-made CRM module.
Catalog and stock
Dealers often work with a limited assortment—not the entire manufacturer's catalog is available to every partner. Assortment restriction is implemented via:
- Filtering by infoblock property: add a property
AVAILABLE_FOR_DEALER_TYPES(list type), specify dealer types. In thebitrix:catalog.sectioncomponent, add filterPROPERTY_AVAILABLE_FOR_DEALER_TYPES= current dealer type. - Highload block assortment: for flexible settings—table
dealer_assortment(UF_DEALER_ID,UF_IBLOCK_SECTION_ID). The dealer only sees catalog sections listed in their records.
Stock information comes from the standard catalog module, table b_catalog_store_product. For a dealer portal, it's important to show stock at specific warehouses available to the dealer (e.g., warehouse in their region). The dealer-warehouse link is stored in a Highload block; in the component, the query to b_catalog_store_product is overridden.
| Approach | Flexibility | Complexity | Suitable for |
|---|---|---|---|
| Filtering by property | Medium | Low | Small catalog, fixed dealer types |
| Highload block assortment | High | Medium | Large catalog, individual settings |
Document workflow and finances
Dealers constantly request documents—invoices, waybills, reconciliation statements. Storing them in Bitrix is redundant if they already exist in 1C. The workflow:
- The portal requests a list of dealer documents via the 1C REST service (or uploads to an intermediate table)
- Documents are cached in a Highload block
dealer_documents:UF_DEALER_ID,UF_DOC_TYPE,UF_DOC_NUMBER,UF_DATE,UF_AMOUNT,UF_FILE_URL - Synchronization via cron every 2 hours using a
mainmodule agent (CAgent::AddAgent) - PDF files are fetched on demand, cached in
/upload/dealer/docs/for 24 hours
Debt and credit limit—similarly: Highload block dealer_credit (UF_DEALER_ID, UF_LIMIT, UF_CURRENT_DEBT, UF_OVERDUE). If the limit is exceeded or there is overdue debt, order placement is blocked via the OnBeforeSaleOrderAdd event handler.
What happens if a dealer exceeds the credit limit?
Each time an order is created, the OnBeforeSaleOrderAdd handler fires: it checks the current debt from dealer_credit. If the limit is exceeded or there is overdue debt, the order is blocked, and the dealer receives a notification. This eliminates payment risks and automates control.
Notifications and communication
A portal without notifications is half the work. We configure:
- Email events (
CEventType,CEvent::Send): order status change, approaching payment deadline, new price list - Push notifications via the
pullmodule (if a mobile app is present) - Activity feed in the dealer's cabinet—Highload block
dealer_eventswith read/unread markers
Integration with CRM
If the manufacturer uses Bitrix24, the dealer portal syncs with CRM:
- New dealer registration → creates a company in CRM (
crm.company.add) - Dealer order → deal in CRM linked to the company
- Deal status change → order status change on the portal via webhook
The connection is implemented via the Bitrix24 REST API, storing CRM entity IDs in custom company fields.
What's included in the work
- Analysis and design: prototype, technical specification
- Development of role system and authorization
- Pricing at all levels (discounts, contract prices, promotions)
- Dealer personal account with order history and documents
- Integration with 1C via CommerceML or REST
- Testing and deployment to production server
- Employee training and access handover
- 6-month warranty support
Timelines
| Stage | Duration |
|---|---|
| Analysis and design | 2–3 weeks |
| Role system and authorization | 2–3 weeks |
| Pricing (all levels) | 2–4 weeks |
| Dealer personal account | 3–5 weeks |
| Integration with 1C | 3–6 weeks |
| Document workflow and finances | 2–3 weeks |
| Testing | 2–3 weeks |
Total: 14–24 weeks. The variance is determined by the depth of 1C integration and the number of custom business rules in pricing. We can estimate your project in one day—contact us for a consultation.
Example: how we cut order processing time by 3x
For a client with 50 dealers, we automated pricing and document workflow. Previously, an order took 2 hours to process; now it's 5 minutes. That resulted in significant savings. Reach out to us to achieve similar results.Order dealer portal development and we'll audit your current processes. This will help accurately estimate the timeline and scope of work.

