Multi-Warehouse Configuration in 1C-Bitrix: Complete Guide

When an online store outgrows a single warehouse — opens distribution centers or connects retail outlets — the challenge arises: to show the customer real stock and automatically select the shipping warehouse? Standard inventory management in 1C-Bitrix with one warehouse does not cover these scen

Our competencies:

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1415
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    995
  • 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
    734
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    863
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    773
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1134

When an online store outgrows a single warehouse — opens distribution centers or connects retail outlets — the challenge arises: to show the customer real stock and automatically select the shipping warehouse?

Standard inventory management in 1C-Bitrix with one warehouse does not cover these scenarios: you risk selling a product that is not in the required warehouse, or sending an order 500 km away when there is a warehouse nearby. A typical situation: an electronics store with 5 warehouses in different cities. Managers manually check stock and inform the customer which warehouse ships. Result — 30% of orders are canceled due to mismatch between promised and actual delivery time. Automating multi-warehouse solves this: the customer sees accurate stock for their region, and the system automatically selects the nearest warehouse.

We are a team with 10+ years of experience in multi-warehouse accounting, having set up multi-warehouse for 200+ stores — from catalogs of 50,000 products to chains with 15 warehouses. Our certified specialists guarantee reliable integration. The catalog module includes multi-warehouse starting from the 'Small Business' edition. Below we will cover setup, typical challenges, and custom modifications with real numbers and code examples. If you face similar issues, get a consultation — we will analyze your configuration and offer a solution.

Enabling Multi-Warehouse

Path: Store → Catalog → Settings → 'Warehouse' tab.

  • Use warehouses — enable
  • Create at least two warehouses (Store → Catalog → Warehouses)

After enabling, stock is stored in the b_catalog_store_product table with breakdown by STORE_ID. The table contains fields: PRODUCT_ID, STORE_ID, AMOUNT (stock), QUANTITY_RESERVED. For large catalogs (50,000+ products), it is important to create indexes on STORE_ID and PRODUCT_ID — default indexes are not always optimized.

Configuring Shipping Warehouses in Orders

In the delivery service settings (Store → Settings → Delivery services → [edit]), specify the warehouse from which the shipment is made. This allows different delivery services to work with different warehouses. For more flexible management — warehouse selection rules are configured via the OnSaleOrderBeforeSaved event handler:

AddEventHandler('sale', 'OnSaleOrderBeforeSaved', function(\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); // logic for selecting shipping warehouse based on order composition, region, etc. }); 

In one project, we implemented warehouse selection by the region closest to the customer: the handler parsed the delivery index and substituted the required warehouse. This reduced delivery times by 30%.

How to Display Warehouse Stock on the Storefront?

In the catalog.element component (bitrix:catalog.element), parameter USE_STORE_QUANTITY — enable to display warehouse stock. The component template receives the $arResult['STORE_QUANTITY'] variable — an array of stock per warehouse. For custom output, use:

$storeData = \Bitrix\Catalog\StoreProductTable::getList([ 'filter' => ['=PRODUCT_ID' => $productId], 'select' => ['STORE_ID', 'AMOUNT', 'STORE_TITLE' => 'STORE.TITLE'], 'runtime' => [ new \Bitrix\Main\ORM\Fields\Relations\Reference( 'STORE', \Bitrix\Catalog\StoreTable::class, \Bitrix\Main\ORM\Query\Join::on('this.STORE_ID', 'ref.ID') ) ] ]); 

If you have 10+ warehouses, consider adding tagged caching for this query — otherwise each product view will hit the database. More about caching can be read in the 1C-Bitrix documentation.

Limitations of Standard Reservation

Reserves in b_sale_order_reserve contain the STORE_ID field — the reserve is tied to a specific warehouse. During automatic reservation, Bitrix selects a warehouse by priority (the SORT field in b_catalog_store). If the first warehouse does not have sufficient quantity, reservation by default does not split the order across multiple warehouses — this requires custom logic. Here is a comparison of approaches:

Criteria Standard mechanism Custom reservation
Warehouse selection By single priority By set of rules (region, stock)
Split across multiple warehouses No Yes, via agent or event
Implementation complexity Zero Medium (2-4 hours of work)
Flexibility Low High

We most often use the custom approach — it gives up to 40% savings on logistics by reserving from the nearest warehouse. Custom reservation is approximately 2 times more efficient than standard in order processing speed.

Example of custom reservation:

AddEventHandler('sale', 'OnSaleReserveQuantity', function($orderId, $basketId, $reserveInfo) { // Your distribution logic across warehouses }); 

In one project, we processed 500 orders per day through this handler — the system worked without failures for a year.

Stock Synchronization with 1C

During exchange with 1C via CommerceML 2, stock is transmitted in the <Stores> section of the exchange file. A critical requirement: the XML_ID of warehouses in Bitrix must match the warehouse identifiers in 1C. Mapping is configured in /bitrix/admin/1c_exchange.php. If identifiers differ, the exchange will produce errors. More about the format can be read in the CommerceML documentation.

A typical mistake: in 1C warehouses are named in Russian, while in Bitrix they are in Latin, causing stock to "go to zero." We always verify mapping on a test exchange.

Edition Comparison for Multi-Warehouse

Edition Multi-warehouse Reservation by warehouse 1C integration
Start No No No
Small Business Yes (basic) Yes (single warehouse) Yes
Business Yes (extended) Yes (with custom) Yes
Enterprise Yes (full) Yes (custom) Yes

What is Included in the Multi-Warehouse Setup Work?

  1. Audit of the current configuration and identification of bottlenecks
  2. Enabling and configuring multi-warehouse in the admin panel
  3. Creating warehouses and linking them to delivery services
  4. Writing a warehouse selection handler for your business process
  5. Modifying component templates to display warehouse stock
  6. Custom reservation logic (if splitting is required)
  7. Integration with 1C: setting up mapping and test exchange
  8. Testing all scenarios: orders, returns, stock recalculations
  9. Providing documentation, access credentials, and training for your team
  10. Post-setup support for 30 days

Timeframes and Costs

Basic setup with two or three warehouses, shipping rules, and storefront display — 4–8 hours, from $500. If custom warehouse selection logic and 1C integration are needed — 1–2 working days, from $1,200. Complex cases (reservation splitting, dynamic region-based selection) may require 3–4 days, from $2,500. The exact cost is calculated individually after reviewing your configuration. Request a consultation on multi-warehouse setup — we will analyze your store and offer an optimal solution. Contact us for a project evaluation.