Многоскладской учёт в 1С-Битрикс позволяет хранить остаток товара раздельно по нескольким физическим или логическим точкам — центральный склад, розничные магазины, витрина, транзит — и при этом показывать покупателю единое наличие. Разберём, как это устроено в модуле sale, как настроить склады и не сломать резервирование и обмен с 1С.
Зачем нужно несколько складов
Один товар физически может лежать в разных местах: основной склад, торговый зал, склад маркетплейса, региональный филиал. Пока учёт ведётся «одной цифрой», вы не отличите товар, который реально можно отгрузить сегодня, от того, что числится в другом городе. Разделение остатков по складам решает несколько задач:
- Отгрузка из ближайшей точки — заказ списывается с того склада, который обслуживает регион покупателя.
- Раздельная инвентаризация — каждый склад считают и корректируют независимо.
- Витрина и резерв под конкретную площадку — например, склад для розницы и отдельный для интернет-магазина.
- Честное наличие — покупатель видит либо суммарный остаток, либо остаток по выбранному городу.
Включение складского учёта
Работа со складами доступна только когда включён складской учёт в настройках торгового каталога. Откройте Магазин → Настройки → Настройки модулей → Торговый каталог и убедитесь, что активны опции «Вести складской учёт» и «Использовать складской учёт». После этого в разделе Магазин → Склады появится справочник складов.
Технически остатки при складском учёте хранятся не в свойстве товара, а в таблице модуля sale — b_catalog_store_product (связка «товар + склад + количество»). Итоговое поле CATALOG_PRODUCT.QUANTITY пересчитывается как сумма остатков по всем складам. Именно поэтому при складском учёте нельзя редактировать общее количество вручную — оно вычисляемое.
Создание и настройка складов
Склады создаются в разделе Магазин → Склады. Для каждого склада указываются:
- Название и код — код (
XML_ID) критичен для обмена с 1С: по нему сопоставляются склады сайта и учётной системы. - Активность — неактивный склад не участвует в расчёте наличия.
- Привязка к сайту — если у вас несколько сайтов в одной копии Битрикс.
- Контакты и адрес — используются для отображения точек самовывоза и в документах.
- Сортировка — влияет на порядок в списках и на выбор склада по умолчанию.
После создания складов остатки заполняются либо вручную в карточке товара (вкладка со списком складов), либо складскими документами «Приход» и «Оприходование», либо обменом с 1С. Прямое проставление количества по складу возможно, но для порядка в учёте лучше проводить движения документами — тогда остаётся история.
Суммарный остаток, доступное и резерв
При нескольких складах важно различать три величины. Битрикс оперирует ими так:
| Величина | Что означает | Где хранится |
|---|---|---|
| Количество на складе | Физический остаток на конкретном складе | b_catalog_store_product.AMOUNT |
| Общее количество | Сумма по всем активным складам | CATALOG_PRODUCT.QUANTITY |
| Зарезервировано | Отложено под неоформленные/неотгруженные заказы | CATALOG_PRODUCT.QUANTITY_RESERVED |
Доступное к продаже = QUANTITY − QUANTITY_RESERVED. Обратите внимание: резерв в стандартном модуле хранится суммарно, а не по каждому складу отдельно. Поэтому если бизнес-логика требует резервировать именно на складе отгрузки, это дорабатывается на уровне обработчиков заказа или реализуется через 1С как мастер-систему остатков.
Вывод наличия по складам в каталоге
Стандартные комплексные компоненты (bitrix:catalog, catalog.element) из коробки показывают суммарное наличие: «в наличии / под заказ». Чтобы показать раздраздельно по складам («Москва — 12 шт., Склад — 40 шт.»), есть два пути:
- Параметр компонента. В
catalog.elementи в детальной карточке включите вывод остатков по складам (USE_STORE/ блок «Наличие на складах») и выберите, какие склады отображать. Компонент подтянет данные изb_catalog_store_productи выведет таблицу магазинов. - Кастомный вывод. Через API
\Bitrix\Catalog\StoreProductTable::getList()получите остатки по нужным складам и отрисуйте их в своём шаблоне — так удобнее фильтровать по городу пользователя или скрывать служебные склады.
Частая доработка — показывать посетителю остаток только по складам его региона, а «транзит» и «брак» прятать. Это делается фильтрацией списка складов по коду или по привязке к местоположению.
Обмен остатками с 1С
В большинстве проектов мастер-системой остатков выступает 1С, а Битрикс их только отображает. При стандартном обмене (протокол CommerceML) 1С выгружает остатки в разрезе складов, и они раскладываются по складам сайта по совпадению кода склада. Ключевые моменты настройки:
- Коды складов на сайте (
XML_ID) должны совпадать с идентификаторами складов в 1С, иначе остатки «схлопнутся» в один склад или не загрузятся. - В настройках узла обмена в 1С включается выгрузка остатков по складам, а не общим количеством.
- Резервы обычно тоже приходят из 1С; тогда локальное резервирование Битрикс лучше отключить, чтобы избежать двойного учёта.
Практические рекомендации
Несколько правил, которые экономят время на поддержке многоскладского учёта:
- Не плодите склады без нужды. Каждый лишний склад — это строка в расчёте наличия и потенциальная рассинхронизация. «Брак», «резерв под маркетплейс», «транзит» заводите только если реально ими управляете.
- Держите один источник истины. Если остатки ведёт 1С — не правьте их руками на сайте, иначе следующий обмен всё перезапишет.
- Кэш и остатки. На высоконагруженном каталоге вывод остатков по складам ощутимо нагружает БД. Выносите его в отдельный AJAX-запрос или кэшируйте с коротким TTL, чтобы не ломать композитный кэш страниц.
- Инвентаризация — документами. Расхождения выравнивайте документом инвентаризации по конкретному складу, а не правкой количества в товаре.
Итог
Многоскладской учёт в 1С-Битрикс строится на складском учёте модуля sale: остатки хранятся по связке «товар + склад», а общее количество и доступность считаются как сумма за вычетом резерва. Ключ к стабильной работе — согласованные коды складов с 1С, аккуратное движение остатков документами и продуманный вывод наличия в каталоге без перегрузки БД.
Если нужно настроить несколько складов, связать их с 1С и корректно показать наличие по городам в карточке товара, мы в B2Bsite делаем это под ключ: от проектирования складской структуры до тонкой настройки обмена и кэширования остатков.
Частые вопросы
Чем многоскладской учёт отличается от количественного?
Количественный учёт хранит один общий остаток в свойстве товара. Складской учёт хранит остатки раздельно по складам, а общее количество вычисляется как их сумма.
Почему нельзя вручную изменить общее количество товара?
При складском учёте общее количество — вычисляемое поле, равное сумме остатков по всем активным складам. Менять нужно остаток на конкретном складе или проводить складской документ.
Резерв в Битрикс считается по каждому складу отдельно?
Нет, в стандартном модуле резерв хранится суммарно по товару. Резервирование в разрезе складов реализуется доработкой обработчиков заказа или через 1С как мастер-систему.
Как показать покупателю остатки по конкретным складам?
Включите вывод наличия по складам в компоненте детальной карточки или выведите остатки через StoreProductTable::getList() в своём шаблоне, отфильтровав нужные склады.
Что будет, если коды складов на сайте и в 1С не совпадают?
Остатки из 1С не разложатся по нужным складам: они либо попадут не туда, либо не загрузятся вовсе. Коды складов (XML_ID) обязательно должны совпадать.
Можно ли скрыть служебные склады от покупателей?
Да. При выводе отфильтруйте список складов по коду или привязке к местоположению, оставив только те, из которых реально идёт отгрузка в регионе покупателя.
Как выровнять расхождения по остаткам на складе?
Проводите документ инвентаризации по конкретному складу — это сохранит историю движения. Прямая правка количества в товаре лишает вас аудита изменений.
Влияет ли вывод остатков по складам на скорость каталога?
Да, дополнительные выборки по складам нагружают базу. На нагруженном каталоге выносите их в AJAX или кэшируйте с коротким TTL, чтобы не ломать композитный кэш.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.