Написать в Telegram@Odilient
Электронная коммерция

Остаток на складе — это обещание

Oybek Odil 8 апреля 2026 г. 8 минут чтения

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

Число остатка на странице товара — это не информация. Это обязательство: заплатите — и получите.

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

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

Это инженерная задача, в центре которой стоит бизнес-решение. Ниже — обе половины.

Почему цифра обычно неверна

Четыре причины — примерно в порядке того, как часто мы их встречаем.

За неё никто не отвечает. Остатки обновляют, когда кто-нибудь вспомнит. Процесса нет, и цифра тихо устаревает в промежутках между моментами, когда на неё кто-то смотрит.

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

Удержанный товар не учитывается. Товары в чужих корзинах, товары в неоплаченных заказах, товары, отложенные для оптового клиента. Счётчик показывает пять, а три уже обещаны.

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

Последняя причина удивляет людей сильнее всего, потому что не похожа на чью-то ошибку. Это проблема корректности, и у неё есть корректное решение.

Остатки как конечный автомат

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

Минимальная полезная модель:

СостояниеЧто означаетМожно продать
ДоступенНа полке, никем не занятДа
В резервеУдерживается под незавершённое оформление заказа, со сроком истеченияНет
ОплаченДеньги получены, ещё не отгруженНет
ОтгруженУехалНет

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

Второе, что важно: у резерва есть срок. Без срока брошенные оформления копятся фантомной недоступностью, и вы перестаёте продавать то, что у вас есть. Со сроком товар возвращается в продажу автоматически.

Этот подход работает не только для товаров

Ровно такую же механику мы построили для того, что товаром вовсе не назовёшь: слотов записи в Bronjoy — маркетплейсе онлайн-записи, в каталоге которого в сентябре 2026 года было 23 727 заведений.

Временной слот — это товар в количестве одной штуки с очень требовательным покупателем. ИИ-администратор, который записывает клиентов голосом, построен на правиле, которое стоит украсть дословно: hold_slot возвращает токен удержания, а book_appointment без него не запустится. Пути к подтверждённой записи в обход резерва не существует. Удержание и есть резерв; токен — доказательство, что он существует.

В сценарии записи для гостей нам пришлось исправить сам порядок шагов. Изначально сначала создавалась запись, а потом отправлялся код подтверждения — а значит, любой номер телефона мог поставить реальную запись в календарь партнёра. Теперь код сначала уходит на телефон или почту самого клиента, действует пять минут и годится для одной записи, а запись не существует, пока код не вернётся.

Оба случая — уроки складского учёта в другой одежде. Резервируйте до того, как подтверждать. Никогда не позволяйте непроверенному запросу занять реальную единицу.

Примите политику на случай продажи сверх остатка до того, как это случится

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

Запишите четыре вещи.

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

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

Что вы предлагаете. Немедленный возврат денег без лишних вопросов. Плюс, где это уместно: замену, ожидание с твёрдой датой или скидку за неудобство. Дайте клиенту выбор, а не решайте за него.

Разрешаете ли вы вообще предзаказ отсутствующего товара и, если да, как он помечен в момент продажи. Предзаказ, который клиент выбрал сам, и предзаказ, о котором он узнал постфактум, — совершенно разные вещи.

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

Что должно означать «управление остатками» в коммерческом предложении

Наши интернет-магазины стоят от $499 и делаются от одной до пяти недель, а остатки и заказы прямо указаны в тарифе на магазин. Но «управление остатками» — это словосочетание, которое покрывает всё: от одного числового поля до полноценной системы с несколькими складами, — так что уточняйте, что именно вы покупаете.

Спросите, что из этого входит:

  • Остатки ведутся по каждому варианту, а не только по товару: размер и цвет — это разные единицы
  • Атомарное списание, чтобы два одновременных оформления заказа не прошли оба
  • Резервы со сроком истечения, и этот срок назван
  • Пороги «мало на складе» и «нет в наличии» с оповещениями живому человеку
  • Что показывает страница товара, когда остаток маленький, нулевой или неизвестный
  • Поддерживается ли предзаказ отсутствующего товара и как он отображается
  • Журнал изменений: кто поменял остаток, когда и почему
  • Если остатки приходят из другой системы: какая система главная, как часто идёт синхронизация и что происходит, когда синхронизация падает

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

Решение о том, что показывать

Одна маленькая вещь с большим эффектом: что написано на странице.

Точное число («осталось 3») создаёт срочность — и создаёт обязательство. Если оно неверно, это бросается в глаза. Показывайте его, только если оно действительно точное в реальном времени.

Диапазон («Осталось мало») честен и менее хрупок, и для большинства магазинов это лучший вариант по умолчанию.

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

Ненормально — показывать уверенную цифру, полученную из ночной выгрузки. Это обещание, подкреплённое вчерашним днём.

И скажите что-нибудь о сроках. «В наличии, отправим в течение 24 часов» отвечает на тот вопрос, вместо которого вообще-то и показывали остаток, — потому что клиент на самом деле хочет знать не сколько у вас штук, а когда товар будет у него.

Аудит за полдня

Если у вас магазин, это стоит сделать на этой неделе.

  1. Выберите десять товаров. Сравните остаток на сайте, остаток в учётной программе и то, что лежит на полке. Запишите расхождения.
  2. Откройте товар в двух браузерах и оформите заказ одновременно. Посмотрите, пройдут ли оба.
  3. Положите в корзину товар, которого осталось мало, оставьте на час и проверьте, можно ли его всё ещё продать кому-то другому.
  4. Посмотрите, сколько заказов за последние полгода пришлось вернуть из-за отсутствия товара и во что это обошлось, включая время поддержки.
  5. Спросите одного сотрудника: что мы делаем, когда продали больше, чем есть? Если ответов два, политики нет.

Шаг 2 удивляет людей больше всего, а занимает девяносто секунд.

Расскажите, что вам нужно. В ответ вы получите фиксированную цену и дату сдачи — бесплатно и без обязательств продолжать.

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

Мы продаём всего несколько штук в день. Не перебор ли это?

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

Скрывать ли товары, которых нет в наличии?

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

А если остатки живут в отдельной системе?

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

Сколько должен длиться резерв в корзине?

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

Бывает ли продажа сверх остатка допустимой?

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

Читайте также

Ещё в рубрике «Электронная коммерция»

Давайте обсудим

Читать об этом — самое простое

Если вы и правда решаете такую задачу, расскажите о ней. Мы скажем, что бы сделали, сколько это стоит и сколько займёт времени.

Бесплатная консультация Без обязательств Быстрый ответ