-10%Переходите к нам от другого подрядчика — дадим скидку на первый этап работ

Интеграция WMS-системы склада с 1С-Битрикс

Интеграция WMS-системы адресного склада с интернет-магазином на 1С-Битрикс: остатки, резервы, комплектация и отгрузка

Покупатель видит на витрине «в наличии: 1 шт», оформляет заказ и оплачивает. А через час менеджер выясняет, что этой единицы на складе уже нет: её отобрали под другой заказ пять минут назад, просто сайт об этом не узнал. Начинается неприятный разговор, возврат денег и потерянный клиент. Причина не в людях и не в складе — причина в том, что адресный склад (WMS) и интернет-магазин на 1С-Битрикс живут как два несвязанных мира: один знает физику товара по ячейкам, другой принимает заказы, и между ними нет надёжного моста.

Ниже — практическое руководство, как построить этот мост: какие остатки показывать на витрине, как резервировать товар под заказ, как передавать статусы комплектации и отгрузки обратно покупателю и как сделать так, чтобы обмен не терял и не задваивал сообщения. Это выжимка из наших проектов по интеграции 1С-Битрикс с внешними системами — без теории ради теории, с опорой на реальные грабли.

Коротко

  • Витрина должна показывать доступный остаток (физический минус резервы и брак), а не «сколько лежит на складе».
  • Источник истины по физике склада — WMS: она ведёт ячейки, отбор и отгрузку; сайт лишь отражает её данные.
  • Связывать можно через 1С (WMS ↔ 1С ↔ сайт по CommerceML) или напрямую через REST API и очередь событий.
  • Остатки в реальном времени — это события в очереди и идемпотентная обработка, а не опрос «раз в час».
  • Ночная автоматическая сверка остатков закрывает большинство расхождений до того, как их заметит покупатель.

Что такое WMS и почему её связывают с магазином

WMS (Warehouse Management System) — это система управления складом, которая отвечает за физику товара: где именно он лежит, как его принять, разместить, отобрать и отгрузить. В отличие от простого складского учёта, WMS оперирует не абстрактным «остатком по номенклатуре», а конкретными адресами хранения — ячейками, зонами, паллетами. Один и тот же SKU может лежать в пяти разных ячейках, в разных партиях и с разными сроками годности, и WMS точно знает, откуда его выгоднее и безопаснее отобрать под конкретный заказ.

Интернет-магазин на 1С-Битрикс решает совсем другую задачу: показать товар, принять заказ, взять оплату. Ему не нужно знать про ячейки и маршруты отбора — но ему критически нужно знать, сколько единиц реально можно продать прямо сейчас и что происходит с уже оформленным заказом. Именно на стыке этих двух задач и рождается интеграция.

Зачем вообще связывать эти системы напрямую, а не «раз в день выгружать остатки в файл»? Потому что современная розница и опт не терпят задержек. Чем выше оборачиваемость и чем меньше единиц на позицию, тем дороже стоит каждая минута расхождения между витриной и складом. Связка WMS и магазина решает четыре конкретные бизнес-задачи:

Важно понимать: интеграция WMS — это не «ещё один обмен остатками», а согласование бизнес-процесса продажи с бизнес-процессом склада. Ошибки здесь стоят дороже, чем в обычном каталоге, потому что они напрямую бьют по деньгам: пересорт, отмены, возвраты и репутационные потери.

Важно: WMS отвечает за физику склада (где лежит и сколько реально есть), а не за витрину. Витрина — зона ответственности Битрикса. Интеграция должна чётко разделять эти роли, иначе появятся два «источника истины», которые рано или поздно разойдутся.

Доступный остаток против физического: ключевое различие

Главное понятие всей интеграции — доступный остаток. Именно его, а не физическое количество, должна показывать витрина. Разберём разницу на числах.

Допустим, в ячейках склада лежит 10 единиц товара — это физический остаток. Из них 3 уже зарезервированы под оплаченные заказы, которые ждут отгрузки. Ещё 2 единицы отобраны в зону комплектации под заказы, которые собираются прямо сейчас. Одна единица помечена как брак и ждёт списания. Сколько можно продать на витрине? Не 10, а 10 − 3 − 2 − 1 = 4 единицы. Вот это и есть доступный остаток — то количество, которое магазин имеет право пообещать новому покупателю.

Формула доступного остатка в общем виде выглядит так:

Доступно = Физически в ячейках − Резервы под заказы − В зоне отбора − Брак/карантин − Ожидает списания. Всё, что уменьшает это число, должно доезжать до витрины, иначе вы продадите то, чего нельзя продать.

Отсюда вытекает частая и дорогая ошибка новичков: они синхронизируют с сайтом физический остаток, а не доступный. На складе честно лежит 10 штук, сайт показывает 10, а по факту продать можно только 4. Дальше — предсказуемый пересорт: шесть покупателей купят то, что уже обещано другим. Поэтому первое проектное решение любой WMS-интеграции — договориться, какое именно число считается «остатком для витрины» и кто его вычисляет.

Кто должен считать доступный остаток — WMS, 1С или Битрикс? Практика такая: физику и резервы на складе считает WMS, потому что только она видит зону отбора и брак в реальном времени. Резервы под заказы, которые ещё не переданы на склад (например, заказ оформлен, но не оплачен), может держать сайт или 1С. Поэтому итоговое «доступно» часто собирается из двух источников, и задача интеграции — свести их в одно непротиворечивое число. Как именно распределяются резервы между складами и как избежать двойного резервирования, мы подробно разбираем в отдельном материале про обмен остатками с нескольких складов и WMS.

Из физического остатка — в доступный Физически 10 шт − Резерв заказов −3 шт Зона отбора −2 шт Брак / карантин −1 шт = Доступно на витрине 4 шт Витрина показывает доступное количество, а не то, что лежит в ячейках
Схема: доступный остаток — это физическое количество за вычетом резервов, товара в отборе и брака. Именно это число уходит на витрину.

Архитектура связки: WMS, 1С и Битрикс

Прежде чем настраивать обмен, полезно нарисовать общую картину: какие системы участвуют, кто чем владеет и в какую сторону текут данные. В типовом проекте среднего и крупного магазина участвуют три контура.

Данные между контурами текут в обе стороны, и это принципиально. От склада к сайту идут остатки и статусы отгрузки; от сайта к складу — заказы и резервы. Если обмен настроен только в одну сторону (например, склад шлёт остатки, но не получает заказы), интеграция неполная и толку от неё немного.

Ключевой вопрос архитектуры — кто с кем разговаривает напрямую. Есть два принципиальных варианта топологии, и от выбора зависит и стоимость, и надёжность, и скорость. Первый — «звезда через 1С», где 1С в центре и общается со всеми. Второй — «прямая связка», где WMS и Битрикс обмениваются напрямую, минуя 1С или используя её только для справочников. Разберём оба ниже.

Вариант A: через 1С Вариант B: напрямую WMS 1С Битрикс WMS Битрикс 1С справочники
Схема: в варианте A все данные идут через 1С как посредника, в варианте B WMS и Битрикс общаются напрямую, а 1С используется только для согласования справочников.

Напрямую или через 1С: как выбрать контур

Выбор топологии — это не вопрос «как красивее», а вопрос ответственности, скорости и стоимости поддержки. Разберём оба варианта честно, с плюсами и минусами.

Обмен через 1С. Если у вас уже есть учётная 1С и она обменивается с сайтом по CommerceML 2.x, самый дешёвый путь — подключить WMS к 1С, а не к сайту. Тогда сайт вообще не знает про WMS: он как обычно получает от 1С товары, цены, остатки и статусы заказов, просто теперь эти остатки уже учитывают физику склада. Плюс — вы переиспользуете штатный, годами обкатанный обмен Битрикса с 1С. Минус — цепочка длиннее, и данные доезжают до сайта с задержкой на два обмена (WMS → 1С, затем 1С → сайт). Если базовый обмен с 1С у вас идёт раз в 15 минут, то и остатки на витрине будут отставать примерно на этот интервал. Как устроен штатный обмен с 1С, мы подробно разбираем в статье про интеграцию интернет-магазина с 1С.

Прямая связка WMS ↔ Битрикс. Когда нужна скорость, близкая к реальному времени, или когда 1С не хочет или не может быть посредником, WMS интегрируют с Битриксом напрямую через REST API. WMS шлёт события об изменении остатков и статусов в очередь, Битрикс их обрабатывает за секунды. Плюс — минимальная задержка и полный контроль над форматом обмена. Минус — вы берёте на себя то, что раньше делала 1С: согласование справочников, гарантию доставки сообщений, идемпотентность и обработку ошибок. Прямая интеграция требует надёжной очереди и аккуратной инженерии — эту тему мы отдельно раскрываем в материале про API, очереди и надёжность интеграций на Битрикс.

Как выбрать на практике? Ориентируйтесь на три фактора:

  1. Есть ли рабочая 1С в контуре. Если 1С уже обменивается с сайтом и вас устраивает задержка обмена — идите через 1С, это дешевле в разработке и поддержке.
  2. Насколько критична скорость. Если товар оборачивается быстро и остатки единичные, задержка в 15 минут порождает пересорт — тогда нужна прямая связка или сокращение интервала обмена до реального времени.
  3. Кто владеет справочниками. Единый источник номенклатуры и единиц измерения должен быть один. Если это 1С — логично держать её в контуре хотя бы для справочников, даже при прямой связке остатков.
Совет: не бросайтесь сразу в прямую интеграцию «ради реального времени». Сначала честно оцените, какая задержка приводит к пересорту на вашем ассортименте. Часто достаточно сократить интервал обмена с 1С с часа до 5 минут, и проблема исчезает без дорогой прямой интеграции.

Резервы под заказ: как это работает по шагам

Резерв — это обещание. Когда покупатель оформил заказ, система должна «отложить» товар, чтобы его не продали кому-то ещё. Звучит просто, но именно здесь прячется большинство ошибок интеграции, потому что резерв должен пройти через несколько систем и нигде не потеряться.

Разберём типовой сценарий резервирования по шагам:

  1. Покупатель добавляет товар в корзину. На этом этапе резерв обычно ещё не создаётся — корзина живёт недолго и брошенных корзин много. Витрина продолжает показывать доступный остаток.
  2. Заказ оформлен. Битрикс создаёт заказ и ставит «мягкий» резерв на своей стороне — уменьшает доступный остаток на витрине, чтобы следующий покупатель не купил ту же единицу. Штатный модуль торгового каталога умеет резервировать под заказ автоматически.
  3. Заказ подтверждён или оплачен. Резерв становится «твёрдым» и передаётся дальше — в 1С и/или в WMS. Теперь склад знает, что эти единицы нужно отложить под конкретный заказ.
  4. WMS формирует задание на отбор. Товар физически резервируется в ячейках: WMS выбирает, из каких именно ячеек и партий брать, с учётом сроков годности и маршрута отбора.
  5. Отбор и упаковка. Кладовщик отбирает товар, WMS переводит его в зону комплектации. Физический остаток в исходных ячейках уменьшается.
  6. Отгрузка. Товар покидает склад. Резерв закрывается, физический остаток окончательно списывается, статус заказа обновляется до «отгружен», и это уезжает обратно на сайт покупателю.

Ключевой нюанс — момент снятия резерва при отмене. Если покупатель отменил заказ или не оплатил его в срок, резерв обязан вернуться в доступный остаток. Иначе появляется «фантомный дефицит»: товар физически есть, но висит в резервах под мёртвыми заказами, и витрина показывает ноль. Настройте автоматическое снятие резерва по таймауту неоплаты и по отмене заказа — это одна из самых частых недоработок.

Второй нюанс — где именно живёт резерв. В идеале твёрдый резерв на складе держит WMS, а сайт лишь отражает его через доступный остаток. Опасно, когда одну и ту же единицу резервируют независимо и сайт, и WMS, не зная друг о друге — тогда одна физическая штука оказывается «зарезервирована дважды», и при отгрузке всплывает недостача.

Важно: резерв без таймаута — это утечка остатков. Обязательно настройте автоснятие резерва при отмене заказа и при неоплате в течение заданного времени. Иначе доступный остаток будет медленно «протекать» в ноль на популярных позициях.

Жизненный цикл заказа от корзины до отгрузки

Чтобы интеграция была предсказуемой, статусы заказа на сайте и статусы на складе должны быть согласованы. Покупатель не должен видеть «в обработке», когда товар уже уехал, и не должен видеть «доставлен», когда он ещё лежит в ячейке. Для этого статусы Битрикса маппятся на статусы WMS.

Типовое соответствие статусов выглядит так:

Статус на сайте (Битрикс)Что происходит на складе (WMS)Что меняется в остатках
ОформленЗаказ ещё не передан на складМягкий резерв на сайте
Оплачен / подтверждёнЗаказ принят, создано задание на отборТвёрдый резерв в WMS
КомплектуетсяИдёт отбор из ячеекТовар в зоне отбора, физический остаток уменьшается
Собран / упакованТовар в зоне отгрузкиГотов к передаче в доставку
ОтгруженТовар покинул складРезерв закрыт, остаток списан окончательно
ОтменёнЗадание отменено, товар возвращён в ячейкиРезерв снят, остаток вернулся в доступный

Обратный поток статусов — от склада к сайту — не менее важен, чем прямой. Когда WMS завершила отбор или отгрузку, это событие должно доехать до Битрикса и обновить статус заказа в личном кабинете покупателя. Так клиент видит реальный прогресс, а не «висящий» неделю статус «в обработке». Для B2B-клиентов это особенно ценно: закупщику важно понимать, когда именно приедет партия. Личный кабинет с прозрачными статусами — сильный аргумент, и построить его помогает разработка B2B-портала.

Отдельно продумайте частичную отгрузку. В опте нередко заказ отгружают не целиком: часть позиций есть, часть под заказ. WMS должна уметь сообщить, что отгружено 8 из 10 позиций, а сайт — корректно это отразить и не закрывать заказ целиком. Если ваш процесс допускает частичные отгрузки, заложите их в маппинг статусов с самого начала — дорабатывать потом сложнее.

Остатки в реальном времени: события и очередь

Фраза «остатки в реальном времени» звучит красиво, но за ней стоит конкретная инженерия. Есть два принципиально разных подхода к синхронизации остатков.

Поллинг (опрос по расписанию). Сайт или интеграционный слой периодически спрашивает WMS: «дай мне текущие остатки». Просто в реализации, но у поллинга два врага. Слишком редкий опрос — остатки отстают, и появляется пересорт. Слишком частый — вы гоняете полную выгрузку каталога каждую минуту, нагружая обе системы, хотя изменилось всего два товара. Поллинг хорош для медленных, редко меняющихся данных.

События (push через очередь). WMS сама сообщает об изменении: «остаток товара A-1001 изменился, теперь доступно 4». Событие попадает в очередь сообщений, а интеграционный слой применяет его к Битриксу за секунды. Меняется только то, что реально изменилось, задержка минимальна. Это и есть «реальное время» в честном смысле. Минус — нужна надёжная очередь и защита от потери и задвоения сообщений.

Почему именно очередь, а не «прямой вызов API»? Потому что системы падают, деплоятся и тормозят. Если WMS дёрнет API Битрикса напрямую в момент, когда сайт на техобслуживании, событие потеряется. Очередь выступает буфером: WMS кладёт сообщение и забывает о нём, а потребитель заберёт его, когда будет готов, — хоть через секунду, хоть после восстановления сайта. Это фундамент надёжной интеграции.

Типовой поток обработки события об остатке выглядит так:

  1. WMS фиксирует изменение. Отбор, приёмка, списание брака — любое движение, меняющее доступный остаток.
  2. Событие кладётся в очередь. С уникальным идентификатором, SKU, новым значением остатка и временной меткой.
  3. Потребитель забирает сообщение. Интеграционный слой на стороне Битрикса читает очередь.
  4. Проверка на дубль. По идентификатору события проверяем, не обработали ли мы его уже (идемпотентность).
  5. Применение к каталогу. Обновляем остаток товара в торговом каталоге Битрикса, сбрасываем кэш нужного раздела.
  6. Подтверждение. Сообщаем очереди, что обработали, — сообщение удаляется. Если упали до подтверждения, сообщение вернётся и обработается снова.
Остаток в реальном времени через очередь WMS отбор / приёмка Очередь буфер сообщений Обработчик проверка дубля Битрикс остаток обновлён повтор при сбое до подтверждения
Схема: событие об остатке проходит через очередь-буфер и идемпотентный обработчик; при сбое до подтверждения сообщение вернётся и обработается повторно без задвоения.

Согласование справочников и единиц измерения

Самая недооценённая часть WMS-интеграции — это не остатки, а справочники. Два товара «одинаковы» только тогда, когда все системы согласны, что это один и тот же товар. Если WMS знает позицию под своим внутренним кодом, 1С — под артикулом, а Битрикс — под символьным кодом или внешним ID, интеграция превращается в постоянную сверку «кто есть кто».

Нужен единый ключ сопоставления — обычно это артикул (SKU) или внешний код (XML_ID в терминах Битрикса). Правила простые, но их легко нарушить:

Отдельная боль — единицы измерения. WMS может вести учёт в штуках, а продавать вы хотите в упаковках или коробах. Если 1 короб = 12 штук, и это соотношение не согласовано, остаток «84 штуки» превратится на витрине в «84 короба», и покупатель закажет в 12 раз больше, чем есть. Коэффициенты пересчёта единиц должны быть частью справочника и применяться при обмене явно.

Ещё тонкость — партии, серии и сроки годности. Для товаров с ограниченным сроком (продукты, косметика, реактивы) WMS ведёт учёт по партиям и отбирает по принципу FEFO (первым уходит с ближайшим сроком). На витрине партии обычно не нужны — покупателю важно лишь «есть/нет и сколько». Но если вы продаёте партии как отдельные позиции (например, с указанием срока годности в карточке), маппинг усложняется, и это стоит заложить в проект заранее.

СущностьКлюч сопоставленияРиск при рассогласовании
Товар / SKUАртикул или внешний код (XML_ID)Остаток «повисает» на несопоставленной позиции
Единица измеренияКод единицы + коэффициент пересчётаОстаток и заказ множатся или делятся в разы
СкладКод склада / зоны храненияРезерв уходит не на тот склад
Партия / серияНомер партии + срок годностиОтгрузка не по FEFO, списание просрочки

Реализация в 1С-Битрикс

Перейдём к конкретике на стороне Битрикса: какие модули, компоненты и настройки задействованы и в каком порядке всё собирается. Отталкиваемся от того, что каталог у вас уже на модуле «Торговый каталог» (редакция «Малый бизнес» или «Бизнес» — в «Старте» интернет-магазина нет).

Где хранятся остатки. В Битриксе остатки живут на уровне торгового каталога и складов. Модуль catalog поддерживает складской учёт: у каждого товара есть количество (QUANTITY), а при включённом многоскладовом режиме — остатки по складам в таблице складов (store_product). Резервы ведёт модуль sale через поле резерва в заказе. Задача интеграции — писать сюда доступные остатки из WMS и корректно управлять резервами.

Как принимать данные из WMS. Для приёма событий и запросов удобнее всего использовать модуль rest и написать собственные REST-методы (или обработчик входящего вебхука), которые WMS вызывает при изменении остатка или статуса. Внутри метода вы применяете изменение через API торгового каталога и заказов. Для исходящих данных (заказы, резервы на склад) — либо штатный обмен с 1С по CommerceML, либо собственный экспорт заказов через REST.

Пошаговый порядок внедрения на стороне Битрикса:

  1. Проверьте редакцию и модули. Нужны модули «Торговый каталог» (catalog), «Интернет-магазин» (sale) и «REST API» (rest). Включите многоскладовый режим, если складов несколько.
  2. Заведите склады. Создайте в Битриксе склады, соответствующие складам WMS, и пропишите коды сопоставления. Витрина будет суммировать доступные остатки по нужным складам.
  3. Согласуйте ключ товаров. Убедитесь, что у всех товаров заполнен внешний код (XML_ID) или артикул, по которому WMS их однозначно находит.
  4. Сделайте приёмник остатков. REST-метод или вебхук, который принимает событие «SKU X, склад Y, доступно N», проверяет идемпотентность и обновляет остаток через API каталога.
  5. Настройте передачу заказов. При смене статуса заказа на «оплачен/подтверждён» отправляйте заказ и резерв в WMS (напрямую или через 1С).
  6. Обработайте обратные статусы. Приёмник статусов отгрузки, который обновляет статус заказа в sale и виден покупателю в личном кабинете.
  7. Настройте сброс кэша. После обновления остатка сбрасывайте тегированный кэш соответствующего раздела каталога, иначе витрина покажет старое число.
  8. Включите журналирование. Пишите в лог каждое входящее и исходящее сообщение с идентификатором — это спасёт при разборе расхождений.

Схематично «пульт» интеграции в админке — журнал обмена — выглядит примерно так:

Интеграция WMS · Журнал обмена Время Событие SKU / склад Статус 14:02:11Изменение остаткаA-1001 · СК-01Применено 14:02:09Отгрузка заказаЗаказ №10482Применено 14:01:55Изменение остаткаB-0207 · СК-02Дубль, пропущено 14:01:40Резерв под заказЗаказ №10481Отправлено в WMS Запустить сверку Последняя сверка: сегодня 04:00 · расхождений: 0
Схема: журнал обмена показывает входящие события, их статус обработки (применено / дубль / ошибка) и позволяет запустить полную сверку остатков. Реальный интерфейс зависит от реализации.

Идемпотентность, надёжность и сверка

Три слова, которые отделяют работающую интеграцию от той, что «вроде работает, но остатки иногда врут»: идемпотентность, доставка и сверка. Разберём каждое.

Идемпотентность. Это свойство обработчика давать один и тот же результат, сколько бы раз ни пришло одно и то же сообщение. Очереди по своей природе доставляют сообщения «хотя бы один раз» — а значит, иногда дважды. Если событие «остаток стал 4» обработать дважды без защиты, во второй раз ничего страшного (остаток и так 4). Но событие «уменьши остаток на 1» при задвоении спишет две единицы вместо одной. Поэтому передавайте абсолютные значения остатка, а не дельты, и снабжайте каждое сообщение уникальным идентификатором, по которому обработчик отсекает повторы.

Гарантия доставки. Сообщение не должно потеряться, если сайт был недоступен. Очередь хранит его до подтверждения обработки. Подтверждайте (ack) только после того, как изменение реально применено к каталогу, — тогда сбой в середине обработки приведёт к безопасному повтору, а не к потере данных.

Сверка (реконсиляция). Даже идеальный обмен со временем накапливает микрорасхождения: одно потерянное событие, одна ручная правка в обход, одна ошибка сети. Поэтому нужна регулярная полная сверка: ночью WMS отдаёт полную выгрузку доступных остатков по всем SKU, а интеграция сравнивает её с тем, что на сайте, и исправляет расхождения. Сверка — это «страховочная сетка», которая ловит всё, что просочилось сквозь событийный обмен.

Порядок надёжной сверки:

  1. Полная выгрузка из WMS. Ночью, в час низкой нагрузки, WMS формирует снимок доступных остатков по всем позициям и складам.
  2. Сравнение по ключу. Интеграция сопоставляет остатки по артикулу и складу, фиксирует расхождения.
  3. Отчёт о расхождениях. Список «где сайт разошёлся со складом» уходит в лог и, при большом числе, — ответственному на почту.
  4. Исправление. Остатки на сайте приводятся к значениям WMS (источник истины по физике).
  5. Анализ причин. Если расхождений много, ищут корневую причину: потерянные события, ручные правки, ошибки маппинга.
Важно: передавайте абсолютный остаток («доступно 4»), а не изменение («минус 1»). Абсолютные значения идемпотентны по своей природе: повторная обработка ничего не ломает. Дельты при задвоении сообщения приводят к «уплыванию» остатка, которое потом ищут неделями.

Несколько складов и распределение резервов

Как только складов становится больше одного, появляется новый пласт вопросов. Товар лежит на двух складах, покупатель делает заказ — с какого склада резервировать? Как показать суммарный остаток, но при этом корректно списать с конкретного склада? Как быть, если ближе к покупателю склад, где товара меньше?

Битрикс поддерживает многоскладовый учёт: каждый склад — отдельная сущность, у товара свой остаток на каждом складе. На витрине обычно показывают суммарный доступный остаток по всем складам, участвующим в продаже, а вот резервировать нужно с конкретного склада по правилам распределения. Правила бывают разные:

Здесь легко получить двойное резервирование: два заказа претендуют на одну единицу на одном складе, а система, не увидев чужой резерв вовремя, пообещала её обоим. Защита — единый источник резервов на складе (WMS) и атомарное резервирование: проверка доступности и постановка резерва должны быть одной неделимой операцией, а не «проверил — подумал — зарезервировал». Между «проверил» и «зарезервировал» кто-то успеет вклиниться.

Тема распределения остатков и резервов между несколькими складами достаточно объёмна, чтобы вынести её отдельно — детально мы разбираем её в статье про обмен остатками с нескольких складов и WMS, включая сценарии с транзитными складами и точками выдачи.

Сравнение сценариев интеграции

Сведём варианты интеграции в одну таблицу, чтобы было проще выбирать под свою ситуацию.

КритерийЧерез 1С (CommerceML)Прямая связка REST + очередь
Задержка остатковИнтервал обмена (обычно 5–15 мин)Секунды, близко к реальному времени
Стоимость разработкиНиже: переиспользуется штатный обменВыше: свои методы, очередь, идемпотентность
Нагрузка на сайтПакетная, предсказуемаяСобытийная, ровнее распределена
Ответственность за справочникиНа стороне 1СНужно согласовать явно
Кому подходитЕсть рабочая 1С, задержка приемлемаЕдиничные остатки, высокий спрос, нет/не подходит 1С
Риск при сбоеОтставание данных, но обмен восстановитсяНиже при надёжной очереди, выше без неё

Часто оптимум — гибрид: справочники и цены идут через 1С (там их источник истины), а критичные по скорости остатки и статусы отгрузки — прямой событийной связкой WMS ↔ Битрикс. Так вы получаете и надёжность штатного обмена, и скорость реального времени там, где она реально нужна.

Метрики и мониторинг обмена

Интеграция — не проект, который «сделали и забыли». Это живой процесс, за которым нужно следить. Без метрик вы узнаёте о проблеме от разгневанного покупателя, а не от системы мониторинга. Вот на что смотреть.

МетрикаЧто показываетТревожный сигнал
Задержка применения событияСколько проходит от изменения в WMS до обновления на сайтеРастёт — очередь не успевает, потребитель тормозит
Длина очередиСколько необработанных сообщений накопилосьРастёт монотонно — обработчик встал или отстаёт
Число ошибок обработкиСколько сообщений не применилосьВсплеск — ошибка маппинга или недоступность API
Расхождения при сверкеСколько SKU разошлись сайт vs WMSБольше единиц — событийный обмен что-то теряет
Доля заказов с пересортомСколько заказов ушло в отмену из-за нехваткиРастёт — доступный остаток считается неверно
Возраст резервовЕсть ли «зависшие» резервы без движенияСтарые резервы — не срабатывает автоснятие

Настройте оповещения хотя бы на две метрики: рост длины очереди и всплеск ошибок обработки. Эти два сигнала ловят большинство инцидентов до того, как они выльются в пересорт и жалобы. Остальные метрики достаточно смотреть в ежедневном отчёте по сверке.

Где теряется точность остатка Все заказы · 100% Учтён резерв · 92% Учтён брак и отбор · 86% Своевременная сверка · 99,5% пересорт
Схема: каждый неучтённый фактор (резерв, брак, отбор) съедает точность доступного остатка; регулярная сверка возвращает её почти к 100%.

Частые ошибки при интеграции

Мини-FAQ. Нужно ли резервировать товар уже в корзине? Как правило, нет: корзина живёт коротко и брошенных корзин много, резерв на этом этапе только «съедает» доступный остаток. Ставьте резерв при оформлении заказа, а твёрдый — при оплате или подтверждении.

Чек-лист внедрения

Сведём всё в практический список, по которому удобно принимать готовность WMS-интеграции перед запуском:

  1. Определён доступный остаток. Согласована формула «доступно = физически − резервы − отбор − брак» и кто её считает.
  2. Выбрана топология. Решено, идёт обмен через 1С, напрямую или гибридом, и почему именно так.
  3. Согласованы справочники. Единый стабильный ключ товаров, коэффициенты единиц измерения, коды складов сопоставлены во всех системах.
  4. Резервы под контролем. Настроены мягкий и твёрдый резерв, автоснятие по отмене и таймауту неоплаты, защита от двойного резервирования.
  5. Обмен идёт через очередь. События буферизуются, доставка гарантирована, подтверждение — только после применения.
  6. Обработка идемпотентна. Передаются абсолютные остатки, дубли отсекаются по идентификатору события.
  7. Статусы согласованы. Маппинг статусов заказа и склада настроен, обратный поток отгрузок доходит до личного кабинета.
  8. Сверка автоматизирована. Ночная полная сверка остатков с отчётом о расхождениях и автоисправлением.
  9. Мониторинг включён. Оповещения на рост очереди и ошибки обработки, ежедневный отчёт по сверке и пересорту.
  10. Кэш сбрасывается. После обновления остатка тегированный кэш раздела каталога инвалидируется, витрина показывает свежее число.

Вывод

Интеграция WMS с 1С-Битрикс работает надёжно ровно настолько, насколько чётко в ней разведены роли и согласованы данные. Витрина показывает доступный остаток, а не физический. Источник истины по физике склада — WMS. Обмен идёт через очередь с идемпотентной обработкой и абсолютными значениями остатков. Резервы ставятся вовремя и снимаются по таймауту. А регулярная ночная сверка ловит всё, что просочилось. Сделайте эти вещи — и связка «склад — магазин» перестанет быть источником пересорта, отмен и нервных звонков, а станет незаметной инфраструктурой, которая просто работает.

Частые вопросы

Что такое WMS и зачем её интегрировать с 1С-Битрикс?

WMS (Warehouse Management System) — система управления складом, которая ведёт учёт товара по адресам хранения (ячейкам), управляет приёмкой, размещением, отбором и отгрузкой. Интеграция с магазином на 1С-Битрикс нужна, чтобы витрина показывала реальный доступный остаток, заказы автоматически резервировали товар под комплектацию, а статусы отгрузки возвращались покупателю. Без связки склад и сайт живут отдельными жизнями: на витрине «в наличии», а по факту товар уже отобран под другой заказ.

Чем доступный остаток отличается от физического и почему это важно?

Физический остаток — это сколько единиц реально лежит в ячейках склада. Доступный остаток — это физический минус резервы под уже оформленные, но ещё не отгруженные заказы, минус товар в браке и в зоне отбора под чужие заказы. Витрина обязана показывать именно доступный остаток, иначе двое покупателей купят одну и ту же последнюю единицу, и один из заказов уйдёт в пересорт. Расхождение физического и доступного — главная причина «минусов» и отмен.

Как связать WMS и Битрикс: напрямую или через 1С?

Оба варианта рабочие. Если у вас есть учётная 1С, чаще всего WMS обменивается с ней, а 1С уже штатно обменивается с сайтом по CommerceML — тогда сайт не знает про WMS напрямую и получает готовые остатки и статусы. Если 1С нет или её контур не подходит, WMS интегрируют с Битриксом напрямую через REST API и очередь событий. Прямая интеграция быстрее по времени отклика, но перекладывает на вас ответственность за согласование справочников и идемпотентность обмена.

Как часто нужно обновлять остатки на витрине?

Зависит от оборачиваемости и риска пересортицы. Для товаров с высоким спросом и единичными остатками нужен режим, близкий к реальному времени: WMS шлёт событие об изменении остатка в очередь, а Битрикс применяет его за секунды. Для медленно оборачивающихся позиций достаточно периодической синхронизации раз в 5–15 минут. Универсальное правило: чем выше вероятность, что двое купят последнюю штуку, тем ближе к реальному времени должно быть обновление доступного остатка.

Что делать, если WMS и Битрикс разошлись по остаткам?

Сначала определить источник истины — им должна быть WMS для физических остатков и резервов на складе. Затем найти причину расхождения: потерянное событие в очереди, необработанная ошибка обмена, ручная правка остатка на сайте в обход обмена или задвоенная обработка одного сообщения. Лечится это сверкой (полной выгрузкой остатков из WMS и сопоставлением с сайтом по SKU), журналом обмена и защитой от повторной обработки. Регулярная автоматическая сверка ночью снимает 90% таких проблем.

Нужна ли отдельная WMS или хватит складского учёта в 1С?

Если у вас один небольшой склад без адресного хранения и несколько десятков отгрузок в день, штатного складского учёта в 1С обычно достаточно, а витрине хватает обмена остатками. WMS нужна, когда склад большой, товар лежит по ячейкам, важны маршруты отбора, партии, сроки годности и штучный контроль комплектации. В этом случае WMS берёт на себя физику склада, 1С — учёт и цены, а Битрикс — витрину и приём заказов; интеграция связывает эти три контура в один процесс.

Поделиться:

Нужно связать склад и магазин без пересорта?

Спроектируем интеграцию WMS, 1С и витрины на 1С-Битрикс: доступные остатки в реальном времени, резервы под заказ, статусы отгрузки и надёжный обмен через очередь. Рассчитаем стоимость под ваш склад и ассортимент.

Услуга «Интеграции»

Игорь Воскресенский

Основатель студии B2Bsite. С 2014 года команда разрабатывает и поддерживает интернет-магазины и корпоративные сайты на 1С-Битрикс, настраивает обмен с 1С, интеграции с WMS и складскими системами, резервы и остатки в реальном времени для среднего и крупного бизнеса.

← Все статьи блога