Настройка мультискладовости 1С-Битрикс
Когда у магазина несколько точек хранения — центральный склад, региональные, розничные точки — и нужно показывать покупателю доступность товара по каждому из них или автоматически выбирать склад отгрузки при заказе, стандартного одного склада недостаточно. Мультискладовость в Битрикс — часть модуля catalog, требует лицензии не ниже «Малый бизнес».
Включение мультискладовости
Магазин → Каталог → Настройки → вкладка "Склад":
- Использовать склады — включить
- Создать минимум два склада (
Магазин → Каталог → Склады)
После включения остатки начинают храниться в b_catalog_store_product с разбивкой по STORE_ID. Таблица содержит поля: PRODUCT_ID, STORE_ID, AMOUNT (остаток), QUANTITY_RESERVED.
Настройка складов отгрузки в заказах
В настройках службы доставки (Магазин → Настройки → Службы доставки → [редактировать]) указывается склад, с которого производится отгрузка. Это позволяет разным службам доставки работать с разными складами.
Для более гибкого управления — правила выбора склада настраиваются через обработчик события OnSaleOrderBeforeSaved:
AddEventHandler('sale', 'OnSaleOrderBeforeSaved', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
// логика выбора склада отгрузки на основе состава заказа, региона и т.д.
});
Отображение остатков по складам на публичной части
В компоненте catalog.element (bitrix:catalog.element) параметр USE_STORE_QUANTITY — включить отображение остатков по складам. Шаблон компонента получает переменную $arResult['STORE_QUANTITY'] — массив остатков по каждому складу.
Для вывода остатков используется вспомогательный метод:
$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')
)
]
]);
Резервирование при мультискладовости
Резервы в b_sale_order_reserve содержат поле STORE_ID — резерв привязан к конкретному складу. При автоматическом резервировании Битрикс выбирает склад по приоритету (поле SORT в b_catalog_store). Если на первом складе нет достаточного количества — резервирование по умолчанию не разбивает заказ на несколько складов: это требует кастомной логики.
Синхронизация остатков с 1С
При обмене с 1С через CommerceML 2 остатки передаются в секции <Склады> файла обмена. XML_ID складов в Битрикс должны совпадать с идентификаторами складов в 1С. Мэппинг складов настраивается в /bitrix/admin/1c_exchange.php.
Сроки выполнения
Настройка мультискладовости с двумя-тремя складами, правилами отгрузки и отображением на сайте — 4–8 часов. Если нужна кастомная логика выбора склада и интеграция с 1С — 1–2 рабочих дня.







