Привет, я Максим — веб-разработчик. Мультискладская логистика — это одна из самых технически сложных задач, с которыми я сталкиваюсь при разработке интернет-магазинов. Когда у бизнеса один склад — всё просто: остаток есть или нет. Но как только появляются два, три, пять складов в разных городах — начинается другая жизнь. Расскажу, как устроен мультисклад изнутри, какие задачи он решает и как реализовать его технически, чтобы покупатели видели актуальные остатки, а менеджеры не путались в заказах.
Когда магазину нужно несколько складов
Мультисклад — это не блажь крупного ритейла. Вот реальные ситуации, когда без него не обойтись.
Магазин работает в нескольких регионах. Склад в Москве и склад в Новосибирске — и покупателю из Сибири логично отправлять заказ с ближайшего, а не гонять посылку через всю страну.
Есть собственный склад и склад поставщика. Часть товаров хранится у вас, часть — у поставщика, который отгружает по дропшиппингу. На сайте должен быть виден суммарный остаток.
Розница и интернет-магазин работают с общим ассортиментом. Товары лежат в торговом зале, на основном складе и на складе для онлайн-заказов. Остатки нужно учитывать раздельно, чтобы интернет-покупатель не «перехватил» товар, который уже несут к кассе в оффлайн-магазине.
Фулфилмент-оператор хранит часть товаров. Один склад ваш, другой — у оператора фулфилмента. Остатки приходят из двух источников, а на сайте должна быть единая картина.
Продажи через маркетплейсы и свой сайт. На Wildberries отгружается со склада маркетплейса (FBO), а для своего сайта — со своего склада (FBS). Нужно разделять остатки, чтобы не продать один и тот же товар дважды.
Что должна уметь мультискладская система
Вот минимум функционала, который я закладываю при разработке.
Раздельный учёт остатков. Каждый товар имеет остатки по каждому складу отдельно. Товар А: Москва — 15 шт., Новосибирск — 8 шт., Фулфилмент — 22 шт.
Суммарный остаток на сайте. Покупатель видит общий остаток (45 шт.) или просто «В наличии». Ему не нужно разбираться, на каком складе лежит товар — это задача системы.
Автоматическая привязка заказа к складу. Когда покупатель оформляет заказ, система сама определяет, с какого склада отгружать. Логика может быть разной: по близости к адресу доставки, по приоритету складов, по наличию всех товаров заказа на одном складе.
Резервирование при заказе. Как только заказ оформлен, товар резервируется на конкретном складе. Это предотвращает ситуацию «два покупателя заказали последний товар одновременно».
Отображение остатков по складам (опционально). Для некоторых магазинов полезно показывать покупателю, на каком складе или в каком городе товар в наличии — особенно если есть самовывоз с разных точек.
Синхронизация остатков: 1С → сайт
В подавляющем большинстве российских интернет-магазинов учёт ведётся в 1С. И именно 1С — источник правды по остаткам. Сайт должен получать данные из 1С и обновлять их с минимальной задержкой.
Стандартный механизм обмена — протокол CommerceML, который поддерживают все популярные CMS: Битрикс, InSales, CS-Cart, WooCommerce (через модули). При мультискладе 1С выгружает остатки не одной цифрой, а массивом: товар → склад → количество. CMS должна эти данные принять и правильно разложить.
На практике с синхронизацией мультисклада возникают типичные проблемы.
Склады в 1С и на сайте не совпадают. В 1С может быть 10 складов (включая «склад брака», «склад в пути» и прочие служебные). На сайте нужны только 3 из них. Необходимо настроить маппинг: какие склады 1С соответствуют каким складам на сайте. Некоторые склады 1С можно объединить в один виртуальный склад на сайте.
Задержка синхронизации. Если обмен происходит раз в час — за этот час покупатель может заказать товар, который уже продан в рознице. Для высокооборотных товаров критично обновлять остатки каждые 5–15 минут или в реальном времени через webhook.
Резервы не учитываются. Если в 1С товар зарезервирован под оффлайн-заказ, но на сайт выгружается полный остаток без учёта резервов — будут конфликты. Настройте 1С на выгрузку «свободного остатка» (остаток минус резерв).
Реализация на популярных CMS
1С-Битрикс
В Битрикс (редакции «Малый бизнес» и «Бизнес») мультисклад поддерживается из коробки. Можно создать несколько складов в разделе «Складской учёт», привязать к ним остатки товаров, настроить правила выбора склада при оформлении заказа. Обмен с 1С по CommerceML поддерживает передачу остатков по складам — нужно правильно настроить маппинг в модуле обмена.
InSales
Функционал мультисклада появился в InSales относительно недавно. Можно создать несколько складов, настроить приоритет и региональность (привязку заказов к ближайшему складу по региону). Синхронизация с 1С, ЕКАМ и МойСклад поддерживается через встроенные приложения. Для вывода остатков по складам на сайте может потребоваться доработка шаблона.
WooCommerce
Из коробки WooCommerce не поддерживает мультисклад — есть только один общий остаток для каждого товара. Для полноценной работы с несколькими складами нужен плагин: ATUM Multi-Inventory, Stock Locations for WooCommerce или кастомное решение. Синхронизацию с 1С обычно строю через REST API или через промежуточный сервис.
Кастомные решения (Next.js, Laravel)
На кастомных проектах архитектура мультисклада выглядит так: таблица `warehouses` (склады), таблица `stock` (товар + склад + количество + резерв). При создании заказа — логика выбора склада (ближайший / приоритетный / с полным набором товаров). API для обновления остатков из 1С или WMS-системы оператора.
Логика выбора склада при оформлении заказа
Это один из самых важных вопросов. Покупатель оформляет заказ — с какого склада его отгружать?
По приоритету. Самый простой вариант. Сначала система пытается собрать заказ с главного склада. Если там чего-то нет — берёт с резервного. Подходит для магазинов с одним основным и одним запасным складом.
По географической близости. Система определяет регион покупателя (по адресу доставки или IP-геолокации) и выбирает ближайший склад. Это снижает стоимость и время доставки. Для реализации нужно привязать к каждому складу регионы обслуживания.
По полноте заказа. Если покупатель заказал три товара и все есть на складе А, но на складе Б только два — система выбирает склад А, чтобы отправить одной посылкой. Если ни на одном складе нет полного набора — заказ разбивается на несколько отгрузок (split-shipment). Это сложнее технически, но иногда неизбежно.
Ручной выбор менеджером. Для сложных случаев оставьте возможность менеджеру вручную переназначить склад в заказе. Автоматика хороша, но бывают ситуации, когда человек принимает решение лучше.
Что показывать покупателю на сайте
Тут есть два подхода.
Простой: показывать только наличие. «В наличии» / «Нет в наличии» / «Под заказ». Покупателю не нужно знать, на каком складе лежит товар. Система сама разберётся.
Расширенный: показывать наличие по точкам. «В наличии в Москве», «Под заказ в Новосибирске», «Самовывоз из магазина на Тверской». Подходит для магазинов с оффлайн-точками и самовывозом — покупатель видит, где можно забрать товар прямо сейчас.
Типичные ошибки
Продали товар, которого нет. Классическая проблема при асинхронной синхронизации. Решение: при оформлении заказа делать проверку остатка в реальном времени (запрос к 1С или WMS через API), а не полагаться на кэшированные данные на сайте.
Split-shipment без уведомления. Если заказ разбивается на две посылки с разных складов — покупатель должен об этом знать. Иначе он получит часть заказа и подумает, что его обманули.
Не настроили резервирование. Без резервирования два покупателя могут одновременно заказать последний товар на складе. Один из них получит отмену — и негативный опыт.
Перегруженная витрина. Показывать остатки по 5 складам на карточке товара — это информационный шум. Покупателю достаточно знать: можно купить или нет, и когда доставят.
Что я рекомендую
Если у вас один склад — не усложняйте. Мультисклад нужен, когда для этого есть реальная бизнес-необходимость: несколько точек хранения, региональная доставка, совмещение розницы и онлайна.
Когда пришло время — начните с простой модели: два склада, приоритет отгрузки, базовая синхронизация с 1С. Когда отладите процесс — добавляйте географический выбор, split-shipment и более частую синхронизацию.
И помните: мультисклад — это не только задача разработчика. Это процесс, в который вовлечены логисты, менеджеры по закупкам и 1С-программист. Моя задача как веб-разработчика — сделать так, чтобы сайт корректно отражал реальность со складов и давал покупателю честную информацию.
Если нужна помощь с настройкой мультисклада на вашей CMS или интеграцией с 1С — пишите, разберёмся.