БесплатноБесплатный прототип ключевой страницы и черновик ТЗ при старте проекта

Синхронизация остатков с МойСклад: пошагово

Синхронизация остатков между МойСклад и интернет-магазином на 1С-Битрикс: API, вебхуки, сопоставление номенклатуры

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

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

Коротко

  • МойСклад — единственный источник правды по остаткам, сайт — его актуальное отражение.
  • Сердце интеграции — стабильное сопоставление товаров по коду или артикулу, в том числе для вариантов.
  • Вебхуки дают мгновенное обновление, обмен по расписанию страхует от пропущенных событий.
  • Делайте обмен двусторонним и устойчивым к сбоям: заказы уходят в МойСклад, ошибки повторяются.

Зачем нужна синхронизация остатков

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

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

МойСклад как источник правды

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

В МойСклад стекаются поступления от поставщиков, продажи по всем каналам (сайт, розница, маркетплейсы), возвраты, списания и резервы. Он видит полную картину, тогда как сайт — лишь одна из витрин. Поэтому правильная архитектура такая: остатки считаются в МойСклад, а сайт получает их и отражает, но не редактирует. Сайт может передавать в МойСклад заказы (это списывает остаток), но сам остаток — всегда следствие того, что происходит в учёте. Это снимает вопрос доверия к данным раз и навсегда.

Обмен данными сайта с 1С Сайткаталог, заказытовары, заказыОбменочередь / APIДанные идут в обе стороны по расписанию или по событию
Схема: сайт и 1С обмениваются данными в обе стороны — по расписанию или по событию. Товары и остатки приходят на сайт, заказы уходят обратно.

Способы интеграции: модуль или API

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

КритерийГотовый модульКастомная интеграция через API
ЗапускБыстро, типовые сценарииДольше, любая логика
СопоставлениеПо заданным правилам модуляГибко, под структуру каталога
ВебхукиНе всегда поддержаныПолная поддержка
МногоскладностьОграниченноЛюбая модель складов и резервов
Двусторонний обменБазовыйПолный, с очередями и повторами
Кому подходитНебольшой магазинСложный каталог, B2B, свои правила

МойСклад предоставляет REST API (JSON) для получения остатков, номенклатуры, цен и передачи заказов. Готовые модули из Маркетплейса закрывают типовые сценарии небольшого магазина. Для нестандартной логики — сложное сопоставление, многоскладность, двусторонний обмен с очередями — делают кастомную интеграцию через API. Такую разработку мы ведём в рамках автоматизации на 1С. Про безопасную работу с внешними API и вебхуками — в статье про REST, вебхуки и безопасность в Битрикс.

Сопоставление номенклатуры

Самый важный и самый хрупкий момент интеграции — сопоставление товаров между сайтом и МойСклад. Остатки прилетают из МойСклад по конкретной позиции, и сайт должен точно понять, какому его товару они соответствуют. Связывают через стабильный уникальный ключ, общий для обеих систем.

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

Ошибки сопоставления — причина большинства проблем с остатками после запуска. Товар с вариантами особенно коварен: если сопоставить только родителя, остатки по размерам и цветам будут неверными. Данные для сопоставления удобно готовить и хранить через D7-ORM в Битрикс, строя корректные связи между сущностями.

Обмен по расписанию и вебхуки

Есть два механизма получения остатков, и лучший результат даёт их сочетание.

Обмен по расписанию — сайт периодически запрашивает у МойСклад актуальные остатки: раз в несколько минут, в час или несколько раз в день в зависимости от динамики. В 1С-Битрикс это удобно организовать через агент или крон-задачу. Плюс — простота и предсказуемость; минус — между запусками остатки могут устаревать.

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

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

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

МойСклад ведёт остатки в разрезе складов, и это нужно осознанно спроецировать на сайт. Простой вопрос «какой остаток видит покупатель» на деле требует решения нескольких аспектов:

Главное — заранее решить, какой именно остаток отражает сайт, чтобы не продавать зарезервированный или недоступный товар. Ошибка здесь возвращает нас к исходной проблеме: показали доступным то, что продать нельзя, — получили отменённый заказ. Модель складов и резервов согласовывают до начала работ, а не по ходу.

Двусторонний обмен: заказы обратно

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

При двустороннем обмене оформленный на сайте заказ передаётся в МойСклад, где резервирует или списывает остаток, попадает в обработку и отгрузку. Обновлённый остаток тут же возвращается на сайт. Это убирает окно между продажей и обновлением наличия и даёт менеджеру единый поток заказов в учётной системе. Момент передачи настраивают под процесс: сразу при оформлении, после подтверждения или после оплаты. Двусторонний обмен — это уже не «показ остатков», а полноценная автоматизация продаж.

Обработка ошибок и повторы

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

  1. Очередь заказов. Заказ, который не удалось передать сразу, ставится в очередь и повторяется, когда API снова доступен.
  2. Отложенное обновление остатков. При сбое обновление остатков откладывается до восстановления связи, сайт показывает последние известные значения.
  3. Повторные попытки. Неудачные запросы повторяются с нарастающей задержкой, а не бесконечно подряд.
  4. Логирование. Все ошибки пишутся в лог для разбора, чтобы находить систематические проблемы.

Категорически недопустимо, чтобы недоступность МойСклад роняла оформление заказа на сайте или приводила к потере уже переданных заказов. Оформление всегда должно завершаться, а расхождения — выравниваться фоновыми повторами. Устойчивость к сбоям — не опция, а обязательная часть любой интеграции с внешней системой, и её закладывают с самого начала, а не «когда что-то сломается».

Пошаговая настройка

Соберём порядок работ в единую последовательность.

  1. Подготовьте доступы. Токен API МойСклад, настроенные склады, решение о структуре обмена.
  2. Проведите сверку номенклатуры. Убедитесь, что у каждого товара есть стабильный ключ сопоставления в обеих системах.
  3. Настройте получение остатков. Обмен по расписанию плюс вебхуки для мгновенных изменений.
  4. Определите модель складов. Какой остаток видит покупатель, как учитываются резервы и регионы.
  5. Включите передачу заказов. Двусторонний обмен: заказ с сайта уходит в МойСклад и списывает остаток.
  6. Заложите устойчивость. Очереди, повторы, отложенное обновление, логирование.
  7. Протестируйте сценарии. Продажа, приход, возврат, сбой API — на тестовых данных до запуска.
  8. Запустите с мониторингом. Первое время следите за расхождениями и логами, чтобы поймать проблемы сопоставления.

Производительность обмена

Обмен с МойСклад не должен нагружать сайт и упираться в лимиты API. Несколько принципов держат его лёгким:

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

Тестирование перед запуском

Интеграцию остатков нельзя запускать в бой без прогона реальных сценариев — цена ошибки слишком высока. Обязательно проверяют:

Первое время после запуска стоит держать усиленный мониторинг: сравнивать остатки на сайте и в МойСклад, следить за логами ошибок сопоставления. Именно в первые дни всплывают позиции с неверным ключом, и лучше поймать их сразу, чем через жалобы клиентов.

Частые ошибки

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

  1. Источник правды определён. Остатки считаются в МойСклад, сайт их отражает, но не редактирует.
  2. Сверка проведена. У каждого товара есть стабильный ключ сопоставления, варианты учтены.
  3. Получение остатков настроено. Вебхуки для мгновенных изменений плюс обмен по расписанию.
  4. Модель складов согласована. Определено, какой остаток видит покупатель, учтены резервы и регионы.
  5. Обмен двусторонний. Заказы с сайта уходят в МойСклад и списывают остаток.
  6. Устойчивость заложена. Очереди, повторы, отложенное обновление, логирование работают.
  7. Обмен производителен. Инкрементальность, пакеты, разнесение с пиком нагрузки.
  8. Сценарии протестированы. Продажа, приход, возврат, сбой проверены на тесте, запуск под мониторингом.

Вывод

Синхронизация остатков с МойСклад решает базовую, но дорогую проблему — расхождение наличия на сайте с реальностью, из-за которого отменяются заказы и теряются продажи. Работает это на одном принципе: МойСклад — единственный источник правды по остаткам, а сайт лишь точно его отражает. Всё остальное — техника вокруг этого принципа.

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

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

Зачем синхронизировать остатки с МойСклад, а не вести их на сайте?

Потому что реальные остатки живут в учётной системе, а не на сайте. МойСклад отражает поступления, отгрузки, продажи по всем каналам и возвраты; сайт — лишь одна из витрин. Если вести остатки вручную на сайте, они мгновенно расходятся с реальностью: товар продали в офлайне, а на сайте он ещё «в наличии», и клиент оформляет заказ, который нечем закрыть. Синхронизация делает МойСклад единственным источником правды по остаткам, а сайт — его актуальным отражением. Это убирает пересорт и отмены заказов из-за отсутствия товара.

Как технически связать МойСклад и 1С-Битрикс?

Через API МойСклад. У сервиса есть REST API (JSON), позволяющий получать остатки, номенклатуру, цены и отправлять заказы. Интеграцию строят как обмен: сайт периодически запрашивает актуальные остатки или получает уведомления об изменениях через вебхуки, а также передаёт в МойСклад новые заказы. Есть готовые модули из Маркетплейса для типовых сценариев и кастомная разработка через API для нестандартной логики. Для стабильной работы нужен токен доступа МойСклад и продуманное сопоставление товаров между системами.

Как сопоставить товары сайта и МойСклад?

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

Как часто обновлять остатки?

Зависит от динамики продаж. Для быстро оборачиваемого товара остатки обновляют часто — раз в несколько минут или в реальном времени через вебхуки, чтобы избежать продажи отсутствующего. Для медленного ассортимента достаточно обновления раз в час или несколько раз в день. Оптимально сочетать: вебхуки МойСклад дают мгновенное обновление при изменении, а регулярный полный пересчёт по расписанию страхует от пропущенных событий. Слишком частый полный обмен нагружает и API, и сайт, поэтому баланс подбирают под реальную интенсивность.

Что такое вебхуки МойСклад и зачем они нужны?

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

Что делать с несколькими складами в МойСклад?

МойСклад ведёт остатки в разрезе складов, и на сайт можно передавать либо суммарный остаток, либо по конкретным складам. Для простого магазина обычно достаточно суммарного доступного остатка. Для распределённой торговли остатки передают по складам и показывают покупателю наличие на складе его региона или отгрузки — это особенно важно в B2B. Настройка зависит от бизнес-логики: какие склады участвуют в онлайн-продаже, учитывать ли резервы. Главное — заранее решить, какой именно остаток видит покупатель, чтобы не показывать товар, который зарезервирован под другие заказы.

Нужно ли передавать заказы обратно в МойСклад?

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

Что если API МойСклад временно недоступен?

Интеграция должна переживать сбои без потери данных и без блокировки продаж. Заказы, которые не удалось передать сразу, ставятся в очередь и отправляются повторно, когда API снова доступен. Обновление остатков при сбое просто откладывается до восстановления связи — сайт показывает последние известные значения. Все ошибки логируются для разбора. Категорически нельзя, чтобы недоступность МойСклад роняла оформление заказа на сайте или приводила к потере переданных заказов. Устойчивость к сбоям и повторные попытки — обязательная часть надёжной интеграции.

Поделиться:

Остатки на сайте расходятся с реальностью?

Настроим синхронизацию с МойСклад: сопоставление номенклатуры, вебхуки, обмен заказами и устойчивость к сбоям. Рассчитаем работу под ваш каталог.

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

Команда B2Bsite. С 2014 года разрабатываем интернет-магазины на 1С-Битрикс и настраиваем обмен с учётными системами: синхронизацию остатков, цен и заказов с 1С, МойСклад и CRM.

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