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