Живой остаток на сайте растений и Авито: как не продать растение дважды
Наличие живого товара — не список «что есть», а машина состояний с одним доступным числом, из которого читают все каналы. Разбираем формулу доступного остатка, окно рассинхрона,…
Оглавление статьи (12)
Когда питомник продаёт один и тот же живой товар через сайт, Авито, мессенджеры и ручную выдачу, главная опасность не в том, что менеджер не успел обновить красивый список. Опасность в том, что один и тот же экземпляр одновременно выглядит свободным в двух местах. Клиент нажал «купить» на сайте, второй уже договорился в чате, третий приехал забирать с витрины — а в рабочей таблице всё ещё стоит вчерашнее число. Так появляется ложный заказ: бизнес не хотел обманывать, но контур остатка позволил пообещать исчезнувшее растение.
Эта статья — не про красивый каталог и не про скорость ответа. Про публикацию числа на витрине есть отдельный материал — как обновлять остатки без разочарования клиента, а про время реакции в каналах — SLA по каналам продаж растений. Здесь фокус другой: синхронизация наличия живого штучного товара как машина состояний. Главный тезис прост и держит всю статью: наличие растения — это не список «что есть», а машина состояний с одним доступным к продаже числом; все каналы — потребители этого числа, а не отдельные склады. Дальше каждый раздел — один узел этой машины или один рычаг, с числом, механизмом и правилом решения. И всё это работает на обычной таблице или Google-таблице, без дорогой учётной системы.
Не список, а машина состояний

Список наличия отвечает на вопрос клиента: «что можно купить сейчас». Машина состояний отвечает на другой: «почему мы уверены, что это всё ещё можно купить». Разница не косметическая. В списке стоит строка «гортензия, 12 шт.» — но для продажи важно знать, сколько из этих 12 шт. физически стоит в зоне выдачи, сколько уже обещано, сколько ждёт оплаты, сколько снято после осмотра и сколько осталось только во внешнем объявлении, потому что оно обновится позже. Из 12 шт. реально доступными к обещанию могут оказаться 7–8 шт. Список этих различий не делает: «в наличии» в нём значит сразу и «свободно», и «уже обещано».
Механизм, из-за которого список ломается на живом товаре: каждое обещание клиенту меняет состояние конкретного экземпляра, а не число в строке. Растение может физически стоять на столе, но уже быть обещанным; быть на фото в объявлении, но после утреннего осмотра уйти в доращивание; быть оплаченным, но ещё висеть на витрине. Если все эти случаи в учёте называются одинаково — «в наличии», — два канала рано или поздно посчитают один экземпляр свободным.
Минимальная машина состояний для небольшого питомника — это восемь состояний экземпляра и потоки между ними. Пять каналов продаж (сайт, Авито, мессенджеры, ручная выдача, опт) при этом не хранят свои числа: они читают одно доступное число из общего источника.
| Состояние экземпляра | Что значит | Виден ли как свободный каналам |
|---|---|---|
| Физически годно | Найден в зоне продажи, прошёл осмотр | нет, пока не переведён в «доступно» |
| Доступно | Не обещан никому, можно продать следующему клиенту | да — это и есть публичное число |
| Удержание | Коротко придержан под диалог, оплату, подбор фото | нет |
| Резерв | Привязан к заказу или клиенту по правилу | нет |
| Оплачено | Деньги получены, снимается со всех витрин | нет |
| В сборке | Ищется, маркируется, переносится к выдаче | нет |
| Отпущено | Резерв снят — экземпляр вернулся в «доступно» | да, снова свободен |
| Снято | Ушло в доращивание, уценку, пересорт, списание | нет |
Вести эти состояния можно в учётной системе, CRM или дисциплинированной таблице — важен не бренд инструмента, а запрет на серую зону. Правило раздела: веди не остаток-список, а состояние каждого экземпляра; если позиция не в состоянии «доступно», её нельзя обещать ни одному каналу. Восемь состояний выглядят громоздко только на бумаге — на практике 6 из них («удержание», «резерв», «оплачено», «в сборке», «отпущено», «снято») просто прячут экземпляр из публичного числа, и каналам остаётся видеть ровно одно: «доступно».
Единый источник остатка и формула доступного

Единый источник остатка — это не обязательно дорогая система. Для команды из нескольких человек это одна учётная база или одна таблица, если все каналы берут число оттуда и никто не правит публичное наличие «на глаз». Главный признак такого источника: он хранит не только физический остаток, но и обязательства перед клиентами. Рабочая формула для оператора собирается из пяти вычитаемых:
доступно = физически годно − резервы − удержания − снято по качеству − канальный буфер
Эта арифметика — не «авторская». Тот же принцип лежит в индустриальном понятии «доступное к обещанию»: оно считается как «физически на руках плюс ожидаемый приход минус зарезервировано минус недопоставки». В российских системах учёта это же видно дословно: в МойСклад «доступный = фактический − резерв», в retailCRM остаток определён как «количество свободного товара, доступного для реализации». То есть формула — это операционный принцип, а не доказательная норма: 5 вычитаемых можно адаптировать, но логику «каналу отдаём производное, не физическое» — нельзя.
Доступное число почти всегда меньше того, что стоит в питомнике. Если на столе 20 одинаковых саженцев, но 3 уже подтверждены в заказах, 2 удерживаются под оплату, 1 сомнительный после осмотра и 1 оставлен как страховой запас под пересорт, то публично доступно не 20, а 13. Каналы должны видеть именно 13 — число, которое бизнес готов без спора продать следующему клиенту.
Правило раздела: реши, где у тебя «одно правдивое число», и сделай так, чтобы любой канал получал доступное, а не физическое. Каналов больше одного без единого источника — двойная продажа неизбежна: при 2 каналах и 0 точках синхронизации каждый считает себя складом. Где взять единое число, когда учёт ещё «в голове», разбирает соседний материал — граница ручного управления теплицей: когда уже нужна таблица.
Состояния позиции и переходы
Состояние полезно только тогда, когда у него есть разрешённые переходы. Иначе «резерв» становится словом без последствий: один менеджер ставит его после сообщения «хочу», другой только после оплаты, третий снимает через час, четвёртый держит до вечера. Для живого товара это особенно опасно: растение занимает место, меняет вид, нужно другому клиенту и не должно висеть в вечном обещании.
Сначала развести два близких состояния. Удержание — короткое настраиваемое окно, пока менеджер уточняет фото, считает доставку, ждёт быстрый ответ; в одной из платформ это «удержание неоплаченного заказа» в минутах (например, 60 минут — настраиваемый дефолт платформы, не отраслевая норма; у быстрой оплаты хватает и 15 минут). Резерв — более сильное состояние: экземпляр уже нельзя предлагать другому без решения ответственного. Резерв обязан иметь три поля — основание (заказ, предоплата, подтверждённый диалог, оптовая бронь), срок (типично до конца рабочего дня или до оплаты по счёту) и ответственного (кто снимает или продлевает).
Разрешённые переходы машины состояний:
| Переход | Триггер | Что происходит с доступным |
|---|---|---|
| доступно → удержание | клиент задал предметный вопрос | −1 на короткий срок |
| удержание → резерв | клиент подтвердил покупку по правилу | остаётся −1, но прочно |
| удержание → отпущено | не ответил / истёк короткий срок | +1, экземпляр снова доступен |
| резерв → оплачено | деньги получены | снят со всех витрин |
| резерв → отпущено | срок прошёл, отказ, не подтвердился физически | +1, обязательное снятие резерва |
| оплачено → в сборке | заказ передан в выдачу | без изменений |
| в сборке → исключение | не найден, повреждён, перепутан | уходит в разбор |
Снятие резерва так же важно, как сам резерв. Российские маркетплейсы это подтверждают механикой: при отмене заказа резерв обязан сняться, иначе «доступно для заказа» не вернётся. Без дисциплины снятия публичное число тихо умирает: товар физически есть, но команда боится его показать, потому что «кто-то вроде спрашивал». Правило раздела: резерв без срока снятия запрещён, удержание ≠ резерв (короткое окно отпускай автоматически), а мёртвый резерв — это заблокированный оборот: каждая отмена без снятия занижает доступное на 1 экземпляр.
Каналы продаж не должны спорить

Сайт, Авито, мессенджер и ручная продажа отличаются скоростью обновления. Здесь и прячется механизм ложного заказа — окно рассинхрона. Канал публикует своё число с задержкой; в этом окне два канала считают один экземпляр свободным; и приходит второй заказ на уже проданное растение. Задержки — измеримые, а не гипотетические: у крупного маркетплейса витрина обновляется после передачи данных до 15 минут, а автозагрузка на Авито идёт по расписанию, не мгновенно. Эти 15 минут — и есть ширина окна, в котором рождается двойная продажа.
Канальный остаток — это публикационная форма, а не источник истины. Он может быть меньше доступного, если канал медленный или рискованный. Правило раздела: внешний канал — это витрина, а не склад; на медленный канал отдавай число не больше доступного, а буфер компенсирует лаг. Для единичного дорогого растения внешнее объявление может показывать «уточняйте наличие» и вести к ручному подтверждению; для массовой живой позиции — публиковать только часть доступного количества. Если канал не умеет надёжно синхронизироваться, его не «подкручивают в голове», а ограничивают. Для остатков конца сезона канал лучше связать с отдельным решением — распродать, дорастить или списать, как разбирает материал про остатки сезона растений.
Резерв растения до оплаты

Резерв до оплаты нужен не всегда. Если позиция массовая, спрос спокойный, а оплата мгновенная — хватит короткого удержания. Если растение единичное, дорогое, сезонно горячее или требует фото-подтверждения — резерв защищает и клиента, и менеджера: на время решения никто другой не забирает тот же экземпляр. Механизм один: намерение купить превращается в удержание или резерв со сроком, а отмена обязана вернуть экземпляр обратно через снятие резерва, иначе доступное число не восстановится.
Плохой резерв бывает двух форм. Слишком мягкий: менеджер сказал «отложу», но в остатке ничего не изменил — второй канал продаёт это же растение. Слишком жёсткий: любое «интересно» закрывает экземпляр на сутки, и реальный покупатель уходит. Рабочий резерв строится через четыре вопроса: что его запускает (предоплата, заказ, подтверждённый диалог, оптовая заявка); на сколько действует (короткое удержание — минуты, например 60 минут; полноценная бронь — до конца дня или до оплаты по счёту); что происходит при молчании (автоснятие, звонок, одно напоминание); что при этом видят каналы (уменьшается ли сайт, снимается ли объявление).
Чтобы понять, где контур ломается, в первый месяц достаточно следить за четырьмя метриками, а не за десятками: сколько раз клиенту пришлось отказать после принятой заявки; сколько было мёртвых резервов; сколько раз канал показывал устаревшее число; сколько расхождений нашли при сверке. По каждой метрике хватает простого счётчика за 30 дней — этого 1 месяца достаточно, чтобы увидеть слабое звено. Правило раздела: каждый резерв — со сроком и ответственным; нет дисциплины снятия — доступное занижается, и продажи теряются на «фантомных» резервах при каждой неснятой отмене. Качество резерв не заменяет: если после осмотра растение слабее фотографии, бронь не должна автоматически превращаться в отгрузку — здесь подключается маршрут сборки заказа в теплице.
Ритм синхронизации: хотя бы раз в день
Даже без сложной интеграции можно держать устойчивый ритм. Его задача — не идеальная цифровая красота, а чтобы вчерашнее число не продавало сегодняшние растения. Механизм прямой: редкая синхронизация расширяет окно рассинхрона (а оно у маркетплейса и так до 15 минут), частая — гасит лаг. Нижняя норма проста и подтверждена вендорной документацией для продавца, который сам ведёт отгрузку: передавать остатки нужно хотя бы 1 раз в сутки. В пик сезона ежедневного ритма мало — синхронизировать нужно после каждой волны заказов, перед массовой рассылкой, перед публикацией свежего объявления, после крупной оптовой заявки.
Минимальный ритм дня: утром — физический осмотр зон продажи, снятие слабых растений, возврат вчерашних истёкших удержаний, обновление источника; перед открытием каналов — передача безопасного доступного числа на сайт и объявления; в течение дня — каждое подтверждённое намерение сразу в удержание или резерв, каждая ручная продажа сразу минусует источник; вечером — снятие просроченных удержаний и подготовка числа на завтра.
Правило раздела: синхронизируй как минимум ежедневно, в распродажу — после каждой волны; буфер под лаг подбирай по скорости продаж, цене и частоте обновления, а не копируй чужие числа. Пример: при 10 шт. одинаковых саженцев на быстрый сайт можно держать всё доступное, а на медленное объявление отдать 7–8 шт. — но это иллюстрация, а не норма. Лаг публикации обосновывает само существование буфера, а не его размер: эти 7–8 шт. — не рекомендованная величина, у другого питомника при другой скорости продаж буфер будет иным.
Конфликт каналов: кто получает растение
Конфликт каналов неизбежен, если продажи растут. Делать вид, что его не будет, — ошибка. Порядок распределения должен быть известен до конфликта, а не выбираться эмоцией «кто первый написал» или «кто больше покупает». Общий принцип распределения обещаний (англ. order-promising) в омниканальной торговле один: зарезервированное обещание бьёт незарезервированное, оплаченное бьёт всё. Из него собирается приоритетная лестница из пяти уровней.
| Приоритет | Уровень претендента | Защита экземпляра |
|---|---|---|
| 1 (высший) | Оплачено и подтверждено физически | снимается из всех каналов |
| 2 | Действующий резерв со сроком | защищён до снятия или оплаты |
| 3 | Оформленный, но неоплаченный заказ / удержание | держится по правилу канала, не вечно |
| 4 | Диалог без подтверждения | не блокирует дольше короткого удержания |
| 5 (низший) | Публичное наличие без заявки | проигрывает любому подтверждённому состоянию |
Типичный сценарий: на сайте оформлен заказ на последний экземпляр, а через 5 минут менеджер в мессенджере обещает его клиенту с Авито — оба претендуют на 1 шт. Правило раздела: при коллизии двух претендентов на этот спорный экземпляр сравни их уровни — растение получает верхний; публичное наличие (уровень 5) проигрывает всему. Если конфликт случился, оператор делает четыре действия: ставит спорную позицию в стоп, проверяет физическое наличие, выбирает клиента по лестнице, фиксирует причину. Повторяющийся однотипный спор — не «менеджер ошибся», а поломка процесса; для разбора таких событий полезен журнал исключений заказа растений.
База не заменяет стол: физическая проверка
Учётная база может быть аккуратной и всё равно расходиться с реальностью. Это неточность учётных записей — измеренный, а не выдуманный эффект. В исследовании рознично-сетевого учёта проверили около 370 000 записей в 37 магазинах: примерно 65% (около двух третей) расходились с фактом на полке. Это розница упакованных товаров, не саженцы, поэтому цифра — иллюстрация механизма, а не норма для растений. А живой товар дрейфует от записи сильнее упакованного: его двигают, пересаживают, сортируют, переносят, снимают после осмотра. Значит, цифровой резерв требует физического подтверждения перед сборкой тем более.
Считать всё каждый день не нужно — это дорого и бессмысленно. Работает выборочный пересчёт по приоритету ценности: дорогие экземпляры и последние 1–2 штуки полезно пересчитывать раз в 2–3 дня, активные объявления на внешних каналах и позиции с частыми заменами — чаще, а спокойный массовый ассортимент — реже. Правило раздела: перед сборкой подтверди наличие физически, но сверяй не «всё», а группы риска; если экземпляр не найден или утратил продажное качество — заказ не «доталкивают» через процесс, его переводят в исключение, предлагают замену или останавливают обещание. Здесь пересекаются остаток, качество карточки и сборка: даже точное число не спасёт, если карточка обещает внешний вид, которого живой экземпляр уже не несёт — об этом карточка растения к сезону: фото, остаток, дата готовности и лимит обещаний в карточке живого товара.
Сколько стоит ложный заказ: рублёвая экономика ошибки
Дисциплина доступного остатка выглядит как бюрократия, пока ошибку считают «в штуках». Переведём её в рубли на сквозном примере — это и есть та экономика, ради которой вообще стоит вести машину состояний без дорогой системы. Все числа — ориентир на июнь 2026 по рознице саженца гортензии метельчатой в РФ-питомниках.
Исходные данные (питомник, пик сезона). Цена-якорь розницы — 700 ₽/шт (наблюдаемый коридор по питомникам 690–1870 ₽/шт в зависимости от контейнера: P9/С2 ниже, С3 выше). Допустим честную себестоимость одного укоренённого саженца на продажу — 320 ₽/шт (черенок/подвой, субстрат, контейнер, доля полива, потери). Тогда:
| Показатель | Расчёт | Значение |
|---|---|---|
| Цена продажи | якорь розницы | 700 ₽/шт |
| Себестоимость | прямые затраты на экземпляр | 320 ₽/шт |
| Маржа с экземпляра | 700 − 320 | 380 ₽/шт |
| Наценка к себестоимости | 380 ÷ 320 | ≈ 119% |
| Цена ложного заказа | 1 потерянная продажа = упущенная маржа + риск оттока | 380 ₽ и выше |
Что стоит одна ошибка. Ложный заказ = отмена = упущенная маржа 380 ₽ с экземпляра плюс риск, что клиент уйдёт к другому продавцу: по сводным данным о реакции покупателя на дефицит значимая доля (порядка трети) при отсутствии товара уходит в другой магазин — это зарубежная розница упакованных товаров, иллюстрация поведения, не норма для саженцев. Мёртвый резерв — та же сумма, только замороженная: пока экземпляр висит в неснятой брони, его 380 ₽ маржи не работают.
Безубыточность дисциплины. Теперь сравним с ценой буфера. Партия 10 саженцев публикуется и на сайт, и на медленное объявление; без буфера два покупателя обещают последний экземпляр почти одновременно — ложный заказ и отмена. С буфером «недопоказать 2 из 10» бизнес временно недопродаёт 2 позиции (они никуда не делись — продадутся следующей волной), но не отменяет ни одного оплаченного заказа. Арифметика безубыточности простая: буфер окупается, как только он предотвращает хотя бы 1 отмену на каждые недопоказанные 2 экземпляра, потому что упущенная маржа отменённого заказа (380 ₽) и риск оттока дороже отложенной во времени продажи двух доступных саженцев. На дорогих единичных позициях (контейнер С3, 1870 ₽, маржа ≈ 1150 ₽) дисциплина окупается тем более — одна предотвращённая отмена закрывает буфер с запасом.
Чувствительность ±20%. Сдвинем допущения, чтобы вывод не висел на одной точке. Если себестоимость выше на 20% (320 → 384 ₽), маржа падает до 316 ₽ — цена ошибки всё ещё трёхзначная и дисциплина окупается. Если цена ниже на 20% (700 → 560 ₽) при себестоимости 320 ₽, маржа 240 ₽ — буфер по-прежнему дешевле отмены. Даже в худшем углу (цена −20%, себестоимость +20%: 560 ₽ и 384 ₽) маржа 176 ₽ остаётся положительной, и предотвращённая отмена окупает недопоказ. Правило раздела: считай ошибку в рублях маржи экземпляра, а не в «штуках»; дисциплина доступного остатка окупается уже на единичных дорогих живых позициях — дорогая учётная система для этого не нужна, хватает таблицы. Гортензия здесь — лишь ценовой пример; так же считается любая живая штучная позиция — например, укоренённые черенки из каталога, которые тоже продаются мультиканально и поштучно.
Минимальный контур внедрения
Начинать с полной интеграции всех каналов не нужно. Достаточно маленького дисциплинированного контура, где каждый шаг оставляет след и меняет доступное число. Для команды из нескольких человек хватает пяти артефактов — все они закрывают машину состояний на одной таблице или Google-таблице, без отдельной учётной системы, и собираются за 1–2 дня.
| Артефакт | Что в нём | Что закрывает в машине состояний |
|---|---|---|
| Строка позиции | название, зона, физически годно, удержание, резерв, оплачено, снято, доступно | формулу доступного |
| Правило резерва | что запускает, сколько действует, кто снимает | переходы состояний |
| Карта каналов | сайт, Авито, мессенджеры, выдача, опт; кто обновляет, какая задержка | окно рассинхрона и буфер |
| Стоп-лист | последние штуки, спорные позиции, объявления под ручное снятие | конфликт каналов |
| Журнал расхождений | дата, позиция, что было/что оказалось, какой канал создал риск | диагностику синхронизации |
Журнал расхождений по каждому каналу — это диагностика, где именно ломается синхронизация: в учёте, в обещаниях менеджера, во внешнем канале или в сборке. Практика раздельного учёта по каждому каналу — не корпоративная бюрократия, а обычный приём мелких хозяйств, продающих через несколько точек сбыта. Достаточно ревизовать журнал ежедневно, а полную сверку артефактов проводить раз в 7 дней. Правило раздела: стартуй с 5 артефактов и 3 правил запуска — не обещать без отметки в источнике; не держать без срока; не публиковать на канал всё физическое количество, только безопасное доступное. На этом уровне уже появляется рабочая защита от двойной продажи: каждый канал становится потребителем единого остатка, а не отдельным складом.
Публичные источники схемы
Схема собрана не из одного программного продукта, а из повторяющихся операционных принципов в системах учёта, маркетплейсах и исследованиях точности остатка:
- МойСклад — разделение фактического остатка, резерва, ожидания и доступного количества (доступный = фактический − резерв).
- retailCRM: остатки и автобронирование — «количество свободного товара, доступного для реализации»; резерв привязан к статусу заказа.
- Яндекс Маркет для продавцов — передача свободного количества для новых заказов, лаг витрины до 15 минут, норма «хотя бы раз в день».
- Авито: шаблоны автозагрузки и практическая справка AutoZ по полю остатка — внешний канал имеет собственную публикационную форму, но не становится источником истины.
- Shopify inventory states — пример подхода по состояниям остатка: физическое, доступное, обязательства, недоступные остатки.
- WooCommerce inventory settings — настраиваемое удержание неоплаченного заказа и возврат позиции после отмены.
- Available-to-Promise (доступное к обещанию) — индустриальный якорь формулы: «физически на руках + ожидаемый приход − зарезервировано − недопоставки».
- Oracle SCM и Microsoft Dynamics Inventory Visibility — синхронизация обещаний, наличия и резервов между каналами как общая задача омниканальной торговли.
- DeHoratius & Raman, Inventory Record Inaccuracy (Management Science, 2008) — около 65% из ~370 000 записей в 37 магазинах расходились с фактом: почему нужна физическая проверка.
- UMN Extension: recordkeeping и Penn State Extension: marketing for small growers — учёт по каждому каналу сбыта как практика мелких хозяйств.
Словарь терминов
- Единый источник остатка
- Одна рабочая точка (база, CRM или дисциплинированная таблица), по которой команда решает, свободно растение или уже обещано, для сайта, Авито, мессенджеров и ручных продаж.
- Доступный остаток
- Количество, которое можно пообещать новому клиенту после вычета резервов, удержаний, снятых по качеству растений и канального буфера. Каналу отдают именно его, а не физическое число.
- Доступное к обещанию
- Индустриальный аналог доступного остатка (англ. available-to-promise): физически на руках + ожидаемый приход − зарезервировано − недопоставки. Та же арифметика без дорогой учётной системы.
- Резерв
- Привязка экземпляра к конкретному заказу, клиенту или основанию так, чтобы другие каналы не продали его повторно. Обязан иметь основание, срок и ответственного.
- Удержание
- Короткое настраиваемое удержание экземпляра под диалог, оплату или подбор фото — слабее полноценного резерва, отпускается автоматически по короткому сроку.
- Снятие резерва
- Возврат удержанного или зарезервированного растения в доступную продажу после отмены, истечения срока или исправления ошибки. Без него доступное число занижается.
- Канальный остаток
- Число, которое показывает или принимает конкретный канал. Меньше или равно доступному остатку, если канал обновляется с задержкой или требует буфера под лаг.
- Окно рассинхрона
- Промежуток между изменением доступного числа и его публикацией в канале (у маркетплейса до 15 минут, у Авито — расписание). Именно в этом окне два канала считают один экземпляр свободным.
- Конфликт каналов
- Ситуация, когда два канала одновременно считают одну позицию свободной: например, заказ на сайте и ручная договорённость в мессенджере. Разрешается приоритетной лестницей.
- Неточность учётных записей
- Расхождение между числом в базе и фактом на полке. Даже аккуратная база его накапливает, поэтому перед сборкой нужна выборочная физическая проверка групп риска.