Multi-warehouse 1C and Bitrix exchange: turnkey setup

After exchanging 1C with Bitrix, the stock on the site shows the total quantity, even though 1C keeps separate warehouse records. A buyer from Rostov-on-Don sees an item 'in stock' at a Moscow warehouse, orders it, and the delivery cost is intercity — 5 days and 800 rubles. Sound familiar? We've enc

Our competencies:

Frequently Asked Questions

After exchanging 1C with Bitrix, the stock on the site shows the total quantity, even though 1C keeps separate warehouse records. A buyer from Rostov-on-Don sees an item 'in stock' at a Moscow warehouse, orders it, and the delivery cost is intercity — 5 days and 800 rubles. Sound familiar? We've encountered this dozens of times. Setting up multi-warehouse exchange is a routine but critical task; without it, an online store loses money on incorrect logistics and returns.

We are a team of certified engineers with 10+ years of experience in Bitrix. Over this time, we have implemented multi-warehouse exchange for 50+ projects — from small regional networks to federal retailers with dozens of warehouses. We configure everything: from XML identifiers to automatic delivery binding by region.

Prerequisites

For multi-warehouse accounting in Bitrix, the "Small Business" edition or higher is required. In "Start," warehouse management is unavailable — only one virtual warehouse exists.

In 1C, warehouse accounting must be enabled:

  • UT 11: Administration → Warehouse and Delivery → Multiple Warehouses: Yes
  • UT 10: Service → Accounting Parameters Setup → Warehouse Accounting → Keep records by warehouses

Warehouse and XML Identifier Setup

In 1C, each warehouse has a unique identifier (GUID). In Bitrix, each warehouse has a field "External code (XML ID)." Matching these values ensures correct stock distribution:

Catalog → Warehouses → [warehouse] → External code (XML ID) = GUID of the warehouse from 1C

You can obtain the warehouse GUID from 1C in the configurator or via the query SELECT Link.UniqueIdentifier FROM Directory.Warehouses. You can also take it from the exchange XML file in the <WarehouseId> tag. According to the CommerceML standard, identifiers must be unique.

Displaying Stock per Warehouse in the Product Card

If the buyer should see "in Moscow: 5 pcs., in Yekaterinburg: 12 pcs." — it requires a custom modification of the product card component. Data is fetched from \Bitrix\Catalog\StoreProductTable, described in the official documentation:

$storeRests = \Bitrix\Catalog\StoreProductTable::getList([ 'filter' => ['=PRODUCT_ID' => $productId], 'select' => ['AMOUNT', 'STORE_ID', 'STORE.TITLE', 'STORE.ADDRESS'], 'order' => ['STORE.TITLE' => 'ASC'], ])->fetchAll(); foreach ($storeRests as $rest) { if ($rest['AMOUNT'] > 0) { echo $rest['STORE_TITLE'] . ': ' . $rest['AMOUNT'] . ' шт.'; } } 

How to Bind Delivery to a Warehouse?

The "warehouse → delivery zone" binding solves the question of where to ship from. If a buyer is from Yekaterinburg, offer delivery from the Yekaterinburg warehouse with a short time, not from Moscow with a 5-day transit.

Implementation in two variants:

  • Automatically by buyer's region — when the region is determined by IP or the buyer selects a city, the priority warehouse is taken from the "warehouse → service regions" reference.
  • Through pickup point selection — each point = a warehouse, the buyer explicitly chooses where to pick up.

The first option is more convenient for online stores with nationwide delivery: the buyer doesn't need to think, the system automatically assigns the nearest warehouse. The second is for networks with self-pickup, when transparency is important. With proper configuration, a company saves up to 500,000 rubles per year on incorrect shipments.

Why Are Stock Balances Not Synchronized?

A typical reason is mismatched XML identifiers. Check: the GUID in 1C must exactly equal the "External code (XML ID)" of the warehouse in Bitrix. Even an extra space or case breaks the binding. The second most common reason is that warehouse accounting is disabled in 1C (see prerequisites). The third is errors in CommerceML exchange rules when stock is exported without specifying a warehouse.

How to Configure Multi-Warehouse Exchange: Step-by-Step Guide

  1. Check the Bitrix edition and enable warehouse accounting in 1C.
  2. Obtain the GUIDs of warehouses from 1C and set them as XML IDs of Bitrix warehouses.
  3. Configure the binding of warehouses to delivery zones (automatically or via pickup point selection).
  4. Test the exchange: create an order with different regions and check stock balances.

Multi-Warehouse Reporting

Managers often need a summary report: which items are available only at one warehouse, which are not in stock anywhere. Basic query:

SELECT e.ID, e.NAME, SUM(sp.AMOUNT) as total_amount, COUNT(DISTINCT sp.STORE_ID) as stores_count FROM b_iblock_element e LEFT JOIN b_catalog_store_product sp ON sp.PRODUCT_ID = e.ID WHERE e.IBLOCK_ID = :iblock_id GROUP BY e.ID, e.NAME ORDER BY total_amount ASC; 

This query can be used in a "Stock by warehouses" report by creating an HL-block or integrating with BI systems.

Typical Errors and Their Solutions

Error Solution
Stock not separated by warehouse Check GUID and XML ID match
Delivery assigned from wrong warehouse Configure warehouse-to-region binding
Stock per warehouse not displayed in product card Customize component using StoreProductTable

What's Included in the Work?

Stage Description Duration
Audit of current 1C and Bitrix settings Check edition, warehouse accounting enabled, correctness of XML identifiers 0.5 day
Configuration of XML identifiers Match 1C warehouse GUIDs with "External code" fields in Bitrix 0.5 day
Binding warehouses to delivery Implement automatic region determination or pickup point selection 1–2 days
Customization of stock display Modify product card and checkout components 1–2 days
Testing and bug fixing Check exchange across multiple warehouses, fix discrepancies 0.5–1 day
Documentation and training Provide configuration description, instruct managers on reporting 0.5 day

Total timeline — from 1 to 4 days depending on the complexity of customizations. Cost is calculated individually after an audit — contact us for an estimate.

Example code for displaying stock in product card (details)
$storeRests = \Bitrix\Catalog\StoreProductTable::getList([ 'filter' => ['=PRODUCT_ID' => $productId], 'select' => ['AMOUNT', 'STORE_ID', 'STORE.TITLE', 'STORE.ADDRESS'], 'order' => ['STORE.TITLE' => 'ASC'], ])->fetchAll(); foreach ($storeRests as $rest) { if ($rest['AMOUNT'] > 0) { echo $rest['STORE_TITLE'] . ': ' . $rest['AMOUNT'] . ' шт.'; } } 

Our Experience

We have been working with multi-warehouse configurations for over 10 years. We participated in launching exchange for a network of 30 warehouses across Russia — at that time, we manually assigned XML identifiers via SQL queries. Now the process is automated, but manual verification remains mandatory: one error in the GUID and the stock "shifts." We guarantee binding accuracy and provide documentation for the entire configuration. Get a consultation — we will help set up exchange without losses.

Setup Timeline

Configuring multi-warehouse exchange with XML identifier binding — 1 day. With custom stock display per warehouse and binding to delivery zones — 2–4 days. Lean towards the upper bound if integration with non-standard delivery services or own logistics is required.

If you already have settings but stock is not synchronizing, contact us for a free audit. We will evaluate the project within a day.