Когда в 1С товар лежит на нескольких складах, а сайт видит один общий остаток, продажи начинают расходиться с реальностью. Правильное соответствие складов 1С и сайта определяет, какие остатки покупатель увидит в карточке и сможет ли он выбрать пункт самовывоза.
Зачем сопоставлять склады, а не выгружать общий остаток
По умолчанию обмен CommerceML выгружает из 1С единый остаток по каждой номенклатуре — сумму по всем складам. Для небольшого магазина этого достаточно, но как только появляется несколько физических точек (розничный магазин, оптовый склад, витрина, транзитный склад поставщика), общая цифра начинает вводить в заблуждение.
- Покупатель видит «в наличии 40 шт», но на складе самовывоза, который он выбрал, товара нет — он лежит на удалённом оптовом складе.
- Резервы и брак с технического склада попадают в доступный остаток и приводят к перепродажам.
- Магазин не может показать наличие по конкретному городу или пункту выдачи.
Механизм складов в 1С-Битрикс (модуль catalog, объект Bitrix\Catalog\StoreTable) позволяет хранить остаток отдельно по каждому складу и сопоставлять его со складами 1С по внешнему коду. Это основа для многоскладового учёта, самовывоза и точной картины наличия.
Как склады передаются в CommerceML
В файле выгрузки каталога import.xml склады описываются отдельным блоком <Склады> — с наименованием, адресом и, что важнее всего, идентификатором <Ид>. Именно этот GUID из 1С становится ключом привязки. В файле остатков (обычно offers.xml или отдельный rests-блок) количество указывается уже с разбивкой:
- элемент
<Остатки>внутри товара или торгового предложения; - вложенные
<Остаток>со ссылкой на<Склад><Ид>…</Ид>и полем<Количество>.
Чтобы 1С вообще начала передавать остатки в разрезе складов, в настройках обмена (обработка «Обмен с сайтом» / модуль 1С-Битрикс: Сайт в конфигурации) должна стоять галка «Выгружать остатки по складам» и выбраны конкретные склады. Без этого 1С отдаёт единое число, и разбивку на стороне Битрикса взять будет неоткуда.
<Склады>. Если его нет — проблема на стороне 1С, а не сайта.Привязка складов на стороне Битрикса
При первом обмене с включённой выгрузкой по складам Битрикс сам создаёт склады в разделе Магазин → Склады (или Каталог → Склады в старых сборках) — по одному на каждый <Ид> из 1С. Каждому складу присваивается свойство XML_ID, равное GUID склада из 1С. Именно по совпадению XML_ID при следующих обменах остатки раскладываются по нужным складам, а не дублируются.
Дальнейшая настройка выполняется вручную под задачи магазина:
- Активность. Ненужные технические склады (брак, резерв, транзит) деактивируйте — их остатки не будут суммироваться в доступное количество.
- Привязка к сайту. В многосайтовой конфигурации у склада указывается, к каким сайтам он относится.
- Пункт выдачи. Для самовывоза складу задаётся адрес, график и координаты — они используются в оформлении заказа.
Как формируется итоговое наличие в карточке
Общий остаток товара, который видит покупатель, Битрикс считает как сумму количеств по всем активным складам, привязанным к текущему сайту. Управляет этим поведением опция модуля каталога catalog — «Использовать складской учёт» (константа default_use_store_control) в настройках модуля.
| Режим | Что показывает сайт | Когда использовать |
|---|---|---|
| Складской учёт выключен | Единое поле «Количество» из 1С | Один склад, простой магазин |
| Складской учёт включён | Сумму остатков по активным складам | Несколько складов, самовывоз, наличие по городам |
При включённом складском учёте поле общего количества товара становится расчётным — редактировать его вручную нельзя, оно пересобирается из складских остатков при каждом обмене. Поэтому все технические манипуляции (исключение резерва, скрытие брака) делаются именно через активность и состав складов, а не правкой итоговой цифры.
Типовые сценарии сопоставления
На практике встречается несколько устойчивых схем — под каждую своя настройка складов:
- Все склады в один общий остаток. Активны все продажные склады, самовывоз не важен — покупатель видит суммарное наличие. Простейший вариант многоскладового учёта.
- Наличие по пунктам самовывоза. Каждый склад = точка выдачи с адресом; в корзине покупатель выбирает, откуда забрать, и видит остаток именно этой точки.
- Основной склад + резерв. В доступное наличие идёт только основной склад, а резервный/транзитный деактивирован или не выгружается из 1С вовсе.
- Разные склады на разные сайты. В многосайтовой конфигурации московский склад привязан к одному сайту, региональный — к другому. Подробнее — в статье про обмен по нескольким сайтам.
Отдельно стоит согласовать перечень выгружаемых складов между 1С и сайтом: если менеджер в 1С добавит новый склад, но не включит его в настройки обмена, на сайте он не появится, и часть остатков «исчезнет».
Частые ошибки и как их диагностировать
Проблемы со складами почти всегда сводятся к рассинхрону идентификаторов или неверной активности. Что проверять в первую очередь:
- Дубли складов. В списке складов появились две одинаковые записи с разными XML_ID — обычно после переноса базы 1С или смены GUID. Остатки разъезжаются. Лечится сопоставлением XML_ID и удалением дубля.
- Остаток не разбивается. В карточке одна цифра, складов нет — значит, в 1С не включена выгрузка по складам либо на сайте выключен складской учёт.
- Товара «нет», хотя он есть. Нужный склад деактивирован или не привязан к текущему сайту — его остаток не попадает в сумму.
- Двойное наличие. Один и тот же склад выгружается из 1С дважды под разными Ид, либо резервный склад ошибочно активен.
offers.xml, посмотрите блок <Остатки> и сверьте <Ид> складов с XML_ID в разделе Магазин → Склады. Расхождение видно сразу.Как проверить корректность после настройки
После правок соответствия складов имеет смысл прогнать короткий чек-лист, а не полагаться на первую попавшуюся карточку:
- Запустите обмен вручную и убедитесь, что он завершился без ошибок (статус в
Магазин → Настройки → Настройки обмена с 1С). - Возьмите товар, который точно лежит на нескольких складах, и сверьте остатки по каждому складу с 1С.
- Проверьте расчётное общее количество — оно должно равняться сумме по активным складам.
- Оформите тестовый заказ с самовывозом и убедитесь, что доступные точки соответствуют складам с ненулевым остатком.
Полезно зафиксировать эталонные значения по нескольким SKU до и после обмена — так регрессия по складам ловится за минуты. Смежные проверки описаны в материале о проверке корректности выгрузки из 1С.
Итог
Соответствие складов держится на трёх вещах: включённой выгрузке остатков по складам в 1С, стабильных XML_ID, равных GUID складов 1С, и осознанной настройке активности и привязки складов к сайтам. Общий остаток в карточке — это всегда сумма по активным складам, поэтому управлять наличием нужно составом складов, а не правкой итоговой цифры. Большинство «пропавших» или «удвоенных» остатков — следствие дублей и рассинхрона идентификаторов, которые видны прямо в XML обмена.
Если многоскладовой учёт нужно завести с нуля, распутать дубли складов или связать наличие с пунктами самовывоза, мы в B2Bsite настраиваем обмен 1С-Битрикс с 1С «под ключ» и сопровождаем его дальше — от каталога и цен до остатков по складам.
Частые вопросы
Как включить выгрузку остатков по складам из 1С?
В настройках обмена с сайтом в 1С (обработка «Обмен с сайтом» или модуль «1С-Битрикс: Сайт») нужно отметить опцию выгрузки остатков по складам и выбрать конкретные склады. Без этого 1С передаёт единое суммарное количество без разбивки.
Почему на сайте один остаток, а складов нет?
Либо в 1С не включена выгрузка по складам, либо на сайте выключен складской учёт в настройках модуля каталога. При выключенном учёте Битрикс хранит одно поле количества и не раскладывает его по складам.
По какому полю склады 1С сопоставляются со складами Битрикса?
По XML_ID склада на стороне сайта, который равен идентификатору (GUID) склада из блока «Склады» в XML-выгрузке. По совпадению этого значения остатки при каждом обмене раскладываются по нужным складам.
Появились два одинаковых склада, что делать?
Это дубль из-за разных XML_ID, обычно после переноса или смены GUID в 1С. Нужно оставить склад с актуальным XML_ID, перенести на него остатки и удалить лишнюю запись, иначе наличие будет двоиться.
Как показать наличие по пунктам самовывоза?
Каждый склад настраивается как точка выдачи с адресом и графиком, а в оформлении заказа покупатель выбирает склад. Тогда он видит остаток именно выбранной точки, а не общий по магазину.
Как исключить резервный или технический склад из наличия?
Деактивируйте такой склад в разделе «Магазин → Склады» или не включайте его в перечень выгружаемых складов в 1С. Остатки неактивных складов не суммируются в доступное количество товара.
Можно ли редактировать общий остаток товара вручную при складском учёте?
Нет. При включённом складском учёте общее количество расчётное и пересобирается из остатков по складам при каждом обмене. Управлять наличием нужно через состав и активность складов.
Как распределить склады между несколькими сайтами?
В многосайтовой конфигурации у каждого склада указывается привязка к сайтам, и в общий остаток на сайте попадают только его склады. Подробности — в отдельной статье про обмен с 1С по нескольким сайтам.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.