Мы в МПФИТ делали модуль «Единый сток» и наивно думали, что задача звучит просто: есть поставщик, есть один или несколько магазинов, значит надо синхронизировать остаток и жить спокойно.

На практике спокойствия не наступает. Селлер ведет продажи на нескольких витринах, у поставщика свой склад, иногда есть партнеры по дропшиппингу, плюс FBS, где ошибка на последнем шаге превращается в отмену, штраф или плохую метрику продавца. А еще есть наборы, комплекты и прочие умные конструкции, которые выглядят безобидно в карточке, но подрывают учёт, если неправильно связать.

Что селлер обычно называет «единым стоком»

В разговоре единый сток звучит как пусть везде показывается одно число. Но в реальности это не число, а система правил:

  1. Есть физический остаток у поставщика (или на вашем складе).

  2. Есть несколько каналов продажи: разные магазины, разные площадки, иногда партнеры.

  3. Есть логика продаж, которая не всегда одинаковая. FBS особенно строгая.

  4. Есть риск oversell: продали больше, чем реально есть.

  5. Есть риск противоположный: заморозили продажи, хотя товар есть, просто “не дошел остаток”.

Селлеры обычно приходят к единому остатку по двум причинам.

Первая причина: растет объем. До 30-50 заказов в день можно жить на внимательности. Когда в пике становится 100-300 заказов в день (а у неко��орых и больше), ручные корректировки начинают стоить слишком дорого.

Вторая причина: появляется распределение между каналами. Акции, разные цены, разные витрины, партнерские продажи. Без дисциплины один канал быстро начинает “высасывать” остаток.

Мы заложили в модуль две роли, даже если вы в голове просто селлер на Ozon, WB и т.д..

Поставщик: тот, кто держит физический остаток, его учет и пополнения.
Дропшиппер: тот, кто продает этот остаток через свою витрину (включая вашу же витрину, если вы продаете со склада поставщика).

Это позволяет говорить на одном языке: кто источник правды, кто потребитель остатка, кто должен делать ручные действия и где нужно ограничение.

Когда мы в МПФИТ поняли, что «единый сток» это общий ресурс, стало ясно: без правил один канал съедает все, а остальные ловят ноль и отмены. Справа то, к чему мы пришли: слой правил распределяет остаток по витринам и делает продажи предсказуемыми.
Когда мы в МПФИТ поняли, что «единый сток» это общий ресурс, стало ясно: без правил один канал съедает все, а остальные ловят ноль и отмены. Справа то, к чему мы пришли: слой правил распределяет остаток по витринам и делает продажи предсказуемыми.

Первая набитая шишка. Сопоставление SKU оказалось важнее синхронизации

Если вам нужно запомнить один тезис из статьи, пусть будет этот: единый остаток не начинается с остатков. Он начинается со связок.

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

У нас в модуле предусмотрено три способа связки карточек:

  • Автоматическая связка
    Она хороша, когда у поставщика и селлера совпадают идентификаторы или совпадает структура карточек, а отличия минимальны.

  • Связка через Excel
    Это основной рабочий способ, когда артикулы отличаются, варианты разъезжаются, а карточки на маркетплейсе не отражают структуру поставщика один к одному.

  • Ручная связка
    Ок для маленького ассортимента или для “досвязки хвоста”, когда Excel уже сделал основную работу.

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

Пример из жизни про связки SKU

Один селлер продавал одежду на Wildberries. У поставщика размеры жили в одной карточке и отличались вариациями, а у селлера часть вариантов была разведена по разным SKU, причем артикулы различались сильнее, чем хотелось бы.

Автосвязка дала красивую картину: “все сопоставилось”. Через пар�� дней начались странности. На витрине размер “M” показывался как доступный, а на сборке выяснялось, что реальный остаток лежит в “L”. В системе все выглядело правдоподобно, потому что ошибка была не в остатках, а в том, что два разных варианта стали “одним товаром”.

Мы остановили запуск и перевели связки в Excel, но самое важное было не “перейти в Excel”, а добавить валидации.

Внедрили правило №1 → Перед включением остатков валидируем связки

Мы используем три проверки, которые спасают больше, чем любые частые обновления.

  • Проверка на дубликаты
    Один и тот же код поставщика не должен маппиться на два разных кода дропшиппера. Если это случилось, вы получите «двойное списание» или «внезапный ноль».

  • Проверка на варианты
    Если товар имеет варианты (размер, цвет), маппинг должен учитывать конкретный вариант. Иначе вы будете продавать «усредненный товар», которого не существует.

  • Проверка на изменения
    Если вы обновили связки, это событие не должно бесконтрольно переписывать уже пришедшие заказы. Я вернусь к этому в FBS части, потому что там это особенно критично.

В среднем по рынку, когда селлер включает единый сток “на авось”, мы видим порядка 1–3% ошибочных связок на первых итерациях по ассортименту 500–2000 SKU. Кажется мелочью, но это тысячи рублей потерь и десятки отмен в месяц, потому что ошибка концентрируется на ходовых позициях.

С этого экрана в нашей WMS МПФИТ начинался «единый сток» в реальности: сначала связки SKU, потом остатки. Если в Excel не заполнить корректно две колонки, код поставщика и код дропшиппера, дальше любые обновления будут синхронизировать не тот товар.
С этого экрана в нашей WMS МПФИТ начинался «единый сток» в реальности: сначала связки SKU, потом остатки. Если в Excel не заполнить корректно две колонки, код поставщика и код дропшиппера, дальше любые обновления будут синхронизировать не тот товар.

Шишка вторая. Общий остаток без лимитов превращается в конфликт каналов

Вторая шишка обычно появляется у селлеров, которые уже выросли и продают через несколько витрин Ozon / Wildberries, либо подключили партнеров по дропшиппингу.

Сценарий простой: у вас есть общий остаток, и один канал внезапно начинает продавать активнее. Это может быть акция, изменение цены, удачная реклама, или просто сезон. Этот канал съедает весь доступный остаток, остальные каналы уходят в ноль и ловят отмены или нет в наличии.

Люди часто говорят: «Ну и хорошо, пусть продает тот, кто лучше продает». На практике это ломает бизнес-логику.

  1. На разных витринах могут быть разные маржинальности.

  2. У вас могут быть договоренности с партнерами.

  3. У вас может быть приоритет: свои магазины важнее партнеров.

  4. У вас может быть стратегия: держать остаток на одном канале для стабильности рейтинга.

Поэтому мы добавили настройку ограничение остатков на дропшиппера. В терминах селлера это звучит как квота или лимит на канал.

История клиента про лимиты

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

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

Мы ввели лимиты на каждого партнера и договорились о политике: у партнеров фиксированная квота, у собственных магазинов больше лимит и право “добора”. Эффект был не в том, что продажи выросли, а в том, что продажи стали управляемыми.

Придумали правило №2 → Лимиты ставим до старта, а не после первых отмен

Если вы включаете единый сток на несколько витрин и не поставили лимиты, вы не управляете распределением. Вы просто наблюдаете, кто победит.

Вот типовая настройка для старта, если нет сложных приоритетов:

  • собственный основной магазин: 60% доступного остатка

  • второй собственный магазин: 20%

  • партнеры: по 10% каждый, или фиксированное число

Дальше вы калибруете на данных. За 2–4 недели обычно видно, где лимиты слишком жесткие (упущенная продажа), а где слишком мягкие (канал забирает все).

По опыту пилотов у селлеров, которые включают лимиты сразу, доля отмен из-за отсутствия товара после заказа может снижаться примерно в 2–3 раза. Если стартовали с 2.5–3% отмен по причине “нет товара”, можно прийти к 0.8–1.2% за счет дисциплины связок и лимитов. Это не чудо, это банальная управляемость.

И третья шишка. FBS и неприятная правда про «автоматику»

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

Есть два FBS сценария, которые регулярно вызывают вопросы и раздражение.

Сценарий 1. Заказ пришел, когда остатка у поставщика не было

Селлер ожидает, что после пополнения все само подтянется: появился товар, значит заказ можно автоматически забронировать.

Мы сознательно не делаем автоматическую бронь в таком кейсе. Почему?

Потому что между заказ пришел при нуле и остаток пополнился может измениться контекст:

  • связки могли поменяться

  • поставщик мог привезти не тот вариант

  • часть остатка могла быть распределена лимитами на другие каналы

  • могли появиться параллельные заказы, которые должны занять этот остаток первыми

Автоматическая бронь в такой ситуации выглядит удобной, но на практике повышает риск oversell в других каналах. Лучше неприятная ручная проверка, чем красивый автомат, который делает дорогую ошибку.

Это та самая неприятная правда про FBS: если заказ пришел при нуле или вы поменяли связки SKU, мы сознательно ставим автобронь на паузу. Дальше работает короткий runbook: обновить остатки, проверить связки и лимиты, и только потом разрешать сборку.
Это та самая неприятная правда про FBS: если заказ пришел при нуле или вы поменяли связки SKU, мы сознательно ставим автобронь на паузу. Дальше работает короткий runbook: обновить остатки, проверить связки и лимиты, и только потом разрешать сборку.

Сценарий 2. Связки поменялись после того, как заказ уже пришел

Тут логика похожая. Если у вас пришел заказ, и вы вдруг перепривязали карточки, нельзя позволять системе задним числом переписать “что именно заказали”. Это прямой путь к тому, что вы соберете не то, отправите не туда, а потом будете искать, где исчезла единица товара.

Поэтому изменение связок не применяется автоматически к уже поступившим заказам. Это кажется неудобством, но это барьер от хаоса.

История одного нашего клиента про FBS

Селлер по электронике получил FBS заказ в момент, когда у поставщика был ноль. Через час поставщик принял поставку, остаток появился, и команда ожидала, что заказ автоматически подхватится.

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

Дальше мы дали простой runbook оператору: где обновить остаток, где проверить связки, когда вручную подтвердить бронь и когда лучше отдать приоритет другому заказу.

Результат: да, добавился ручной шаг. Но количество “странных” ошибок в пике снизилось заметно. В цифрах это обычно выглядит так: вместо 15–25 минут суммарной паники и перепроверок на серию заказов, вы тратите 2–5 минут на точечную проверку и не ловите цепные ошибки.

Так родилось правило №3 → Для FBS обязателен короткий runbook, без него единый сток становится нервным

Вот минимальный runbook, который мы рекомендуем селлеру, который собирается подключатся к нашей WMS МПФИТ:

  1. Если заказ пришел при нуле, не ждите автоподхвата.

  2. После пополнения обновите остатки дропшиппера.

  3. Проверьте связки по SKU в заказе, особенно если недавно что-то меняли в сопоставлении.

  4. Проверьте лимиты на канал, чтобы не забрать остаток у более приоритетной витрины.

  5. Только после этого подтверждайте сборку.

Это звучит как “лишняя бюрократия”, но на практике снижает вероятность дорогих ошибок.

Наборы и smart товары: почему мы связываем компоненты, а не набор целиком

Если вы продаете наборы (комплекты), то почти всегда наступает момент, когда хочется сделать простую связку: вот набор на витрине, вот набор у поставщика, давайте соединим.

Проблема в том, что набор как товар на витрине часто не равен тому, что реально лежит на складе. На складе лежат компоненты. Один набор может иметь вариативность, компоненты могут пересекаться между наборами, и остаток набора вычисляется из остатков компонентов.

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

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

Чеклист запуска единого стока для селлера

Я специально делаю чеклист коротким, чтобы он работал, а не пугал.

  • Приведите ассортимент к нормальной структуре
    Варианты, размеры, цвета должны быть описаны стабильно. Не идеально, но стабильно.

  • Выберите стратегию связок
    Если ассортимент больше 200 SKU, почти всегда нужна Excel-связка как база.

  • Введите валидации связок
    Это про дубликаты, варианты, контроль изменений.

  • Настройте лимиты на каналы
    Хотя бы грубо, чтобы избежать конфликта витрин.

  • Опишите FBS runbook для двух edge cases
    Заказ при нуле, изменение связок после заказа.

  • Отдельно проверьте наборы
    Связываются компоненты, а не набор как единица.

  • Прогоните тестовый пик
    Пусть это будет 20–30 заказов в симуляции, но с реальными вариантами и разными каналами.

  • Включайте поэтапно
    Сначала топ-50 SKU, потом топ-200, потом весь хвост. На хвосте ошибок больше, но цена ошибки ниже.

Короткая шпаргалка всей статьи: единый сток ломается на трех местах, связки SKU, распределение остатков по каналам и FBS контроль.
Короткая шпаргалка всей статьи: единый сток ломается на трех местах, связки SKU, распределение остатков по каналам и FBS контроль.

Подытожу

Единый сток для селлера на маркетплейсах выглядит как миссия синхронизировать остатки. Реальность ближе к инженерной задаче: сопоставление SKU, контроль распределения, защита от опасной автоматики, особенно на FBS.

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

Роман Камушкен, аналитик из МПФИТ