Откуда берётся проблема
Интернет-магазин - это витрина. Реальный товар лежит на складе, в торговом зале или у поставщика. Между витриной и складом должна быть связь. Если её нет или она работает плохо, сайт продолжает показывать «В наличии», когда товар уже закончился.
Чаще всего это случается в трёх ситуациях. Первая: остатки обновляются вручную - кто-то из менеджеров заходит в админку и меняет цифры. Вторая: есть автоматическая синхронизация, но она идёт раз в ночь. Третья: товар продаётся одновременно через сайт и офлайн, и системы не знают друг о друге.
Результат один: покупатель видит кнопку «Купить», оформляет заказ, а через час ему звонят и говорят, что товара нет.
Сколько стоит ошибка
Клиент, которому отменили заказ, почти никогда не возвращается. Он уже принял решение, прошёл весь путь до оплаты, настроился на покупку. Отмена воспринимается как обман, даже если вы извинились.
Если заказ был с предоплатой, добавляется возврат денег. Это техническая возможность, но процесс занимает время, требует участия бухгалтерии, и клиент всё это время нервничает. Для маркетплейсов и агрегаторов каждая отмена - штраф или падение рейтинга.
Есть и обратная сторона: когда на сайте висит «Нет в наличии», хотя товар есть. Тогда теряете заказы, которые могли бы закрыть.
Как настроить учёт остатков на сайте
Правильный путь - связать сайт с той системой, где ведётся реальный учёт. Обычно это 1С, МойСклад, Битрикс24 или облачная складская программа. Сайт забирает оттуда данные об остатках и показывает их на витрине.
Связка делается через API. Система учёта отдаёт данные в структурированном виде, сайт их принимает и обновляет карточки товаров. Когда клиент оформляет заказ, сайт резервирует товар - отправляет обратно команду, что одна единица теперь занята. После оплаты или сборки заказа система списывает товар окончательно.
Если учёта нет вообще, его нужно сначала завести. Без этого синхронизация бессмысленна - не с чем синхронизироваться. Для небольшого магазина подойдёт Google Таблицы со скриптом, но это временное решение на старте.
Как часто обновлять остатки
Раз в сутки - это плохо. За день товар могут купить пять раз, и только ночью сайт узнает, что он закончился. Обновление должно идти минимум раз в час, а лучше - каждые 10-15 минут.
В реальном времени (когда каждое изменение в складской программе мгновенно летит на сайт) нужно не всегда. Это имеет смысл, если товар популярный, оборот большой и счёт идёт на минуты. Или если продаёте одновременно через сайт, офлайн-магазин и маркетплейсы - тогда задержка в час критична.
На практике для большинства интернет-магазинов достаточно обновления раз в 15-30 минут. Это технически проще, дешевле и даёт приемлемую точность.
Что делать с товаром в пути
Часть товара может быть формально в наличии, но физически недоступна: зарезервирована под другой заказ, находится на приёмке, лежит в возвратах. Если показывать это как доступное, проблема повторится.
Нужно разделять остатки на статусы. Доступно для продажи - то, что можно отгрузить прямо сейчас. Зарезервировано - занято под оформленные заказы. В пути - едет от поставщика. На сайте показываем только первую категорию.
Некоторые магазины показывают товар «под заказ» или «ожидается через неделю». Это честно, но работает, только если срок реально выдерживается. Лучше дать возможность оформить предзаказ, чем писать «В наличии» и отменять.
Несколько складов - одна витрина
Если товар лежит в разных городах или на нескольких складах, нужно решить, что показывать клиенту. Варианта два: показывать сумму остатков со всех складов или определять склад по геолокации и показывать наличие только по ближайшему.
Первый вариант проще, но клиент из Москвы может заказать товар, который есть только в Новосибирске. Тогда доставка займёт неделю вместо двух дней. Второй вариант честнее, но требует определения города и логики выбора склада.
Мы обычно делаем так: показываем общий остаток, но на этапе оформления заказа уточняем город и сразу говорим срок. Если товара нет на ближайшем складе, предлагаем подождать или выбрать аналог.
Когда остатки не нужны
Если вы продаёте услуги, цифровые товары или работаете по предзаказу, синхронизация остатков не нужна. Её нет смысла делать и для товаров, которые производятся под заказ - мебель на заказ, печать, кастомизация.
Не нужна она и в первые месяцы работы магазина, когда заказов мало и вы успеваете проверять наличие вручную перед подтверждением. Но как только поток заказов вырастает или появляется автоматическое подтверждение, откладывать интеграцию нельзя.
Бывает, что владелец боится показывать остатки, потому что их мало: «Клиент увидит, что товар один, и подумает, что магазин плохо работает». Это ошибка. Лучше показать правду, чем продать несуществующее.
Как это делается на практике
Сначала смотрим, где ведётся учёт. Если это 1С, подключаем модуль обмена - он умеет отдавать остатки по API. Если МойСклад или другая облачная система, используем их готовый API. Пишем скрипт, который забирает данные и обновляет базу сайта.
Дальше настраиваем резервирование. Когда клиент добавляет товар в корзину, ничего не происходит - корзину могут бросить. Когда оформляет заказ, товар резервируется на 24 часа. Если за это время не оплатил, резерв снимается. Если оплатил, товар списывается.
В карточке товара показываем статус: «В наличии», «Мало», «Нет в наличии», «Под заказ». Порог «мало» ставим индивидуально - для ходового товара это может быть 10 штук, для редкого - 2. Это помогает клиенту принять решение быстрее.
Что может сломаться
Самая частая проблема - API системы учёта лежит или отдаёт ошибку. Сайт не может обновить остатки и продолжает показывать старые данные. Чтобы этого избежать, добавляем логирование: если обновление не прошло, система отправляет уведомление.
Вторая проблема - остатки обновились, но менеджер в 1С ввёл неправильное число. Технически всё работает, но данные неверные. Это решается только регламентом: кто, когда и как вносит изменения.
Третья - клиент оформил заказ в последнюю секунду, когда товар ещё был, но резервирование не успело сработать. Для этого при финальном подтверждении заказа делаем проверку: если товара уже нет, показываем сообщение до оплаты, а не после.
Синхронизация остатков - это не про технологии, а про то, чтобы не обманывать клиента. Сайт должен знать, что происходит на складе, и показывать правду. Если продаёте физические товары и заказов больше десяти в день, интеграцию нужно делать сейчас, а не когда накопятся отмены. Мы настраиваем связку с 1С, МойСклад и другими системами учёта - пишите, разберём вашу ситуацию.
Частые вопросы
Можно ли обойтись без синхронизации остатков?
Можно, если заказов мало и вы успеваете проверять наличие вручную перед подтверждением. Или если работаете по предзаказу и не храните товар на складе. Во всех остальных случаях ручной учёт приведёт к отменам и потере клиентов.
Сколько стоит настроить учёт остатков на сайте?
Зависит от системы учёта и сложности логики. Простая интеграция с API МойСклада или 1С - от 30-50 тысяч рублей. Если нужна работа с несколькими складами, резервирование и сложные статусы, может быть дороже. Точную смету дадим после брифа.
Как быстро обновляются остатки на сайте?
Зависит от настройки. Минимально разумная частота - раз в 15-30 минут. Обновление в реальном времени возможно, но нужно не всегда и стоит дороже. Раз в сутки - плохо, за день товар может закончиться несколько раз.
Что делать, если товар есть на складе, но его нельзя продать?
Товар нужно разделять по статусам: доступно, зарезервировано, в пути, на приёмке. На сайте показываем только то, что можно отгрузить прямо сейчас. Это настраивается на уровне интеграции с системой учёта.