Developing a B2B Wholesale Portal on 1C-Bitrix: Key Features

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.

Our competencies:

Development stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    943
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    829
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1074

Typical situation: a wholesale buyer sends a list of 50–200 SKUs in Excel, expecting the site to allow one-click upload. But a standard Bitrix store cannot handle multiple price types automatically linked to user groups, and it does not upload files directly into the cart. The result — manual entry of items, errors, and lost time. Over 10+ years we have developed more than 50 solutions that turn a site into a full-fledged B2B tool: integration with 1C, custom REST endpoints for stock and credit limits, flexible pricing and document systems. Contact us — we will evaluate your project within 2 days. Typical project cost starts from 150,000 ₽, and average ROI reaches 200% within first year.

What are the key features of a B2B wholesale portal?

B2B Catalog: Price Types and Wholesale Rules

The foundation of a B2B catalog is multiple price types. In the b_catalog_group table, price groups are created:

Price Type For Whom
Retail Unauthorized users
Small wholesale Dealers category C
Medium wholesale Dealers category B
Large wholesale Dealers category A
Special Key clients

Each price type is linked to a user group via the catalog module settings. An authorized dealer sees only their price column. Additionally, at the product level, minimum lot, order multiplicity, and unit of measurement are configured — these are infoblock properties controlled in the cart.

Setting Up Multiple Price Types for Dealers

We connect several price types through the standard functionality "Trade Catalog" → "Price Types" → "Buyer Groups". For each type, we create a display rule: the price is shown only to the groups it is linked to. If a dealer needs a volume discount, we add cart rules with conditions on order amount. This allows threshold discounts without additional code.

Dealer Authorization and Access Segregation

Dealer registration is not self-service but by request. The scheme:

  1. On the site — a request form: TIN, company name, contact person, sphere of activity, estimated purchase volume.
  2. The request goes to CRM or admin panel (section "Users" → "Registration Requests").
  3. The manager checks the counterparty, creates an account, and assigns a group (small/medium/large wholesale).
  4. The dealer gets access to a personal account and sees the catalog with their prices.

Segregation of assortment (not just prices) is implemented through access rights setup to infoblock sections. For example, the "Large Wholesale" group sees the "Exclusive Collections" section that is inaccessible to small dealers.

Dealer Personal Account Contents

The personal account goes far beyond the standard sale.personal.section. Key sections:

  • Order history — with filtering by date, status, amount. Repeat order in one click.
  • Invoices — PDF documents generated by the sale module or transferred from 1C.
  • Reconciliation statements — files uploaded by the manager or generated automatically from 1C.
  • Waybills and universal transfer documents — linked to orders, available for download.
  • Credit limit — display of the current limit, used amount, and available balance.
  • Payment deferral — information about terms and conditions.

Documents are stored in a Highload-block Documents: document type, number, date, file, link to order and counterparty. This is part of Bitrix document management. Upload from 1C — via REST API on a schedule. PDF invoices generated on the Bitrix side — via the mPDF or TCPDF library, connected in the OnSaleOrderSaved event handler. The invoice template includes company details, item table, totals, and a QR code for payment.

How to set up dealer credit limits?

Integration with 1C: CommerceML + REST

Exchange with 1C is the core of a wholesale site. Two channels:

CommerceML (standard exchange):

  • Nomenclature → product infoblock.
  • Prices by type → b_catalog_price.
  • Stock by warehouses → b_catalog_store_product.
  • Orders: Bitrix → 1C (export) and back (statuses, shipments).

REST API (for operational data):

  • Actual stock — request to 1C when opening a product card (with caching for 5–10 minutes).
  • Counterparty credit limit — request at login and when placing an order.
  • Documents — export of new invoices and statements on a schedule.

More about CommerceML can be found at CommerceML.

B2B Cart with Excel Upload and Price Types

The standard Bitrix cart is designed for a retail buyer: selected a product, clicked "Add to Cart", proceed to checkout. In a B2B scenario, the buyer works differently. They come with a ready list of 50–200 items and want to upload it in one action — upload via Excel is 10 times faster than manual entry.

Quick Order by Article

On the "Quick Order" page — a text field where pairs "article — quantity" are entered, one per line:

ART-001 24
ART-002 48
ART-003 12

When submitted, the server handler parses the lines, looks up products by the ARTICLE property in the infoblock (via CIBlockElement::GetList with a filter), checks availability, and adds to the cart via \Bitrix\Sale\Basket::addItem(). If an article is not found — the line is highlighted in red with an explanation.

Example of quick order handler
// Parsing lines
$lines = explode("\n", $_POST['items']);
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), SITE_ID);
foreach ($lines as $line) {
    list($art, $qty) = explode(' ', trim($line));
    $res = CIBlockElement::GetList([], ['PROPERTY_ARTICLE' => $art], false, false, ['ID']);
    if ($el = $res->Fetch()) {
        $item = $basket->createItem('catalog', $el['ID']);
        $item->setField('QUANTITY', (int)$qty);
    }
}
$basket->save();

Excel File Upload

A more advanced option — upload XLS/XLSX. Server-side handler:

  1. File reception — via standard Bitrix upload (CFile::SaveFile).
  2. Parsing — PhpSpreadsheet library (installed via Composer). Expected format: column A — article, column B — quantity. First row — header (skipped).
  3. Validation — check each line: article existence, product availability for the user group, compliance with minimum lot and multiplicity.
  4. Result generation — table with columns:
Article Name Requested Adjusted Stock Price Total Status
ART-001 Product A 24 24 150 OK
ART-002 Product B 48 48 30 Partial (stock 30)
ART-999 12 Not found
  1. Confirmation — the user sees the result, adjusts quantities, confirms adding to cart.

Handling Price Types in the Cart

When adding a product to the cart, the price is determined automatically based on the user group. The logic:

  • Determine the authorized user's group (CUser::GetUserGroupArray()).
  • By group, determine the available price type (CCatalogGroup::GetGroupsList()).
  • From b_catalog_price, retrieve the price for the product by the required type.
  • If quantity discounts are configured for the product (module "Cart Rules" — sale.discount), they are applied during recalculation.

Additional logic — threshold discounts: when the order amount exceeds a certain threshold, an additional discount is automatically applied. Configured via cart rules with the condition "Cart amount greater than N".

Credit Limit Check

At the order placement stage, the counterparty's credit limit is checked. Data is taken from 1C via REST API. If the order amount exceeds the available limit — a warning is displayed, but the order can still be submitted (at the manager's discretion). Implementation — handler for the OnSaleOrderBeforeSaved event, which makes a request to 1C and writes the result into an order property.

Deliverables

When developing a wholesale site, we provide:

  • Technical specification describing the logic of price types and rights.
  • Configured exchange with 1C (CommerceML + REST).
  • Dealer personal account with documents.
  • Cart with Excel and quick order support.
  • Integration with payment systems and delivery services.
  • Source code and server access.
  • Administrator guide and employee training.
  • 3 months of warranty support after launch.

Savings on order processing can reach 500,000 ₽ per year, and average payback period is 4–6 months.

Technical Summary

Component Solution
Catalog bitrix:catalog with facet index
Filtering bitrix:catalog.smart.filter + AJAX
Cart Custom component with Excel support
Integration CommerceML (catalog) + REST API (stock, limits)
Documents Highload-block + mPDF
Access rights setup User groups → price types + infoblock sections

A wholesale site on Bitrix is primarily a backend: 1C and Bitrix REST API, price types, rights, document management. The frontend is secondary — the interface should be functional and fast, not flashy. Order development — get a tool that really saves your dealers' time. Typical project cost starts from 150,000 ₽, with average ROI of 200% within first year. Contact us for a consultation on your project.

How to properly design infoblocks?

When developing a 1C-Bitrix website, we see dozens of projects where poor infoblock structure slows down the site. Typical scenario: the client asks for a "product catalog." The developer creates one infoblock catalog, puts 15 properties in it. Six months later – 40 properties, 8 of which are used only for one category. The filter lags, the b_iblock_element_property table grows to millions of rows, CIBlockElement::GetList runs for 3 seconds. Consequences – conversion drop, loss of customers, additional optimization costs. In one project after catalog refactoring, page generation time dropped from 4.2 to 0.8 seconds, and annual support costs were reduced by over $10,000 through eliminated redundant queries and agents.

Our approach: design infoblocks before writing a single line of code. Separate infoblocks for entities (products, categories, brands), dictionary properties via highload blocks, trade offers for SKUs. This builds performance for years. If you want a preliminary audit of your infoblock schema, contact us for a free review of common mistakes and recommendations.

Why 1C-Bitrix outperforms most CMS for business

The choice of CMS is dictated by business needs, not preferences. Native 1C exchange via catalog.import.1c provides two-way synchronization of products, prices, balances, and orders through CommerceML without third-party modules — five times faster than developing custom exchange on OpenCart or WordPress, saving hundreds of thousands of rubles. Proactive security module includes WAF, file integrity control, SQL injection protection, and two-factor authentication; it's certified for FSTEK requirements. Modular architecture lets you enable only needed modules — iblock, catalog, sale, search — reducing DB queries per hit. Regular patches close vulnerabilities faster than open-source projects (average CVE fix time two weeks). Official documentation is maintained on the vendor's site.

What highload blocks are and how they speed up the catalog

Highload blocks are an alternative to extended infoblock properties when the list of values can grow to thousands of entries. Typical example: manufacturers, countries, colors. If stored as list properties in an infoblock, each filter triggers a full scan of b_iblock_property_enum table. With HL-blocks, selection uses indexes – filter response time drops from 1–2 seconds to 50 ms. We use HLB component and custom queries via Bitrix\Highloadblock\DataManager. This is critical for catalogs with 100,000+ items.

From our practice: an online store with 500,000 items. Standard filter by brand took 4 seconds. The server couldn't handle 50 concurrent requests – pages crashed. We moved the brand directory to an HL-block, added tagged caching for 15 minutes, and set up an agent to clear cache on change. After optimization, filter time was 120 ms, average LCP was 1.8 seconds. The project runs stable without failures.

What integrations are critical for 1C-Bitrix stores

Each e‑commerce project requires reliable connections with payments, fiscalization, logistics, and CRM. We integrate YooKassa, CloudPayments, Tinkoff, Apple Pay, Google Pay for payments; ATOL and OrangeData for 54-FZ compliance via sale.cashbox; CDEK, Boxberry, PEC, Russian Post, Yandex.Delivery for logistics; Bitrix24, amoCRM, Roistat, Calltouch, Mindbox for analytics and CRM. All integrations are configured with proper error handling and fallback logic.

What's included in 1C-Bitrix website development

Each project includes a full set of documentation and artifacts to prevent knowledge loss after handover.

  • Technical specification – user stories, infoblock diagrams, integration schemas.
  • Source code in Git – with commit history, release tags, branching rules.
  • Administrative documentation – description of custom components, deployment instructions, list of agents and events.
  • Staff training – up to a 3-hour webinar: admin panel, order management, price settings. Recorded for later review.
  • Access to staging during development – test before production deployment.
  • Warranty support – bug fixes for 30 days after launch. Post-warranty support packages with SLA (response 2 hours, resolution 8 hours).

Our process and technologies

Project type Timeline Complexity Key features
Corporate website from 1 month Medium Catalog, news, forms, CRM integration
Online store from 2 months High 54-FZ, marketplaces, 1C exchange, SKU
B2B portal from 3 months Very high Personal prices, document flow, Bizproc
Landing page from 2 weeks Low LCP < 2s, composite cache, static
Multisite structure from 1.5 months High Separate content, shared catalog, hreflang

Tech stack: mobile-first markup, tested on physical devices (iPhone, iPad, Android). Use BrowserStack for Safari on iOS. Performance goals: LCP < 2.5 s, FID < 100 ms, CLS < 0.1. Enable composite site (composite module), CDN, tagged caching, WebP/AVIF, lazy loading. SEO: Schema.org via JSON-LD, auto-generation of sitemap.xml via seo module, canonical and hreflang for multilingual versions. robots.txt blocks /bitrix/ from indexing. CI/CD: Git, auto-deploy via GitLab CI, staging. DB migrations: sprint.migration module with versioning.

Process:

  1. Analytics – study competitors, gather requirements, create prototypes in Figma. Output: technical specification with user stories.
  2. Design – UI/UX with design system. Components are reusable.
  3. Development – write components with custom templates in local/templates/. Business logic in local/modules/.
  4. Testing – functional, cross-browser, load testing (up to 1000 requests). Critical bugs fixed before launch.
  5. Launch – deploy to production, monitoring via UptimeRobot, alerts in Telegram. Fixes for first 48 hours.

Multilingual support and redesign

Full localization via language files lang/ and SITE_ID mechanism. hreflang for each version. Regional versions with different prices and content – IP detection (main.geo) or manual selection. Multidomain – unified management of multiple domains.

Redesign without losing rankings: performance audit (PageSpeed, WebPageTest), SEO (Screaming Frog). New template in local/templates/ with preserved URL structure. 301 redirects only if URL changes significantly. Kernel update, migration to D7 ORM, infoblock restructuring, migration via sprint.migration with Git.

Guarantee and support

We have been working with 1C-Bitrix for 12+ years, completed 500+ projects. Certified developers on staff. Fixed price in contract – no surprises. Warranty period covers code errors. After warranty, subscription packages with SLA (response time 2 hours, resolution 8 hours). 24/7 availability monitoring, alerts in Telegram. Get a consultation and preliminary estimate: contact us via the form on the website or chat – we'll respond within an hour. Order turnkey development – we'll design infoblocks, integrate 1C, and speed up the catalog. If you already have a site on another CMS, order a performance audit and migration to Bitrix.