Если после возврата не восстанавливается остаток товара, магазин теряет продажи: товар физически есть, но система считает его недоступным. Ошибка может быть в статусах возврата, резерве, партиях, синхронизации с 1С или двойной логике склада.
Нужно проследить движение одной позиции: продажа, резерв, отгрузка, возврат, приемка и обновление доступного остатка. Важно различать физический остаток, резерв и доступное к продаже количество.
Что проверить в первую очередь
- Найдите заказ, позицию, склад, количество и статус возврата.
- Проверьте, прошла ли приемка возврата или только финансовая операция.
- Сравните остаток в магазине, учетной системе и складской таблице.
- Проверьте, не висит ли старый резерв по отмененному заказу.
Основные причины
Такая проблема редко появляется сама по себе. Обычно ломается связка из нескольких настроек: данные уходят не туда, событие приходит не в том порядке, старая логика остается в кеше или права проверяются не на том уровне. Поэтому сначала нужно отделить симптом от причины.
- Возврат денег не связан с возвратом товара на склад.
- Система обновляет общий остаток, но не снимает резерв.
- Позиция возвращается на другой склад или в статус брака.
- Синхронизация с 1С перезаписывает локальное исправление старым значением.
Пошаговая диагностика
- Проверьте историю движений товара по SKU, складу и заказу.
- Посмотрите, какие события приходят от платежной системы и службы доставки.
- Проверьте частичный возврат: количество может отличаться от исходного заказа.
- Сравните обработку возврата до и после синхронизации с учетной системой.
- Проверьте округления и единицы измерения, если товар продается наборами.
Как исправить
Исправление лучше делать небольшими шагами. Сначала зафиксируйте текущее поведение, затем внесите одну правку, проверьте контрольный сценарий и только после этого переходите к следующему месту. Так проще понять, какая именно правка решила проблему.
- Разделите финансовый возврат и складскую приемку товара.
- Добавьте движение склада на возврат с правильным складом и статусом качества.
- Снимайте резерв после отмены или возврата, если товар снова доступен.
- Настройте идемпотентность, чтобы повтор события не прибавлял остаток дважды.
- Согласуйте источник истины между сайтом, 1С и WMS.
Безопасный план решения
- Сделайте резервную копию файлов, базы или конфигурации, если правка затрагивает рабочий проект.
- Повторите ошибку на тестовом пользователе, заказе, заявке или окружении, чтобы не работать вслепую.
- Внесите минимальное изменение и сохраните возможность быстрого отката.
- Проверьте основной сценарий, крайние случаи и права доступа для разных ролей.
- После выкладки посмотрите логи и реальные события за первые часы работы.
Как проверить результат
- После возврата доступный остаток увеличивается ровно на возвращенное количество.
- Частичный возврат не меняет остатки по невозвращенным позициям.
- Повторная синхронизация не откатывает правильное значение.
- История движений показывает понятную цепочку от заказа до возврата.
Чего не стоит делать
- Не отключайте проверки, права, платежные статусы или защиту только ради быстрого исчезновения ошибки.
- Не правьте рабочую базу массовым запросом без выборки, бэкапа и понимания последствий.
- Не ориентируйтесь только на один успешный тест: проверьте повторный запуск, отмену, ошибку и нестандартные данные.
- Не оставляйте временные ключи, токены, debug-режим и лишний вывод в публичном доступе.
Как не допустить повторения
- Храните движения склада как журнал, а не только итоговое число.
- Проверяйте возвраты в тестах: полный, частичный, брак, другой склад.
- Добавьте сверку остатков между сайтом и учетной системой.
- Логируйте все события, которые меняют доступное количество.
Что подготовить перед исправлением
- Ссылку на проблемную страницу, кабинет, заказ, интеграцию или API-метод.
- Точное время ошибки и пример пользователя, товара, платежа или запроса.
- Скриншот, текст ошибки, лог веб-сервера, приложения или webhook-события.
- Краткое описание ожидаемого поведения: что должно было произойти вместо ошибки.
Частые вопросы
Почему деньги вернулись, а товар нет?
Платежный возврат и складская приемка часто живут в разных подсистемах. Их нужно связать бизнес-правилом.
Можно ли просто прибавить товар вручную?
Для разового случая можно, но без исправления причины ошибка повторится и может создать расхождение с 1С или складом.
Когда стоит обратиться за помощью
Для диагностики нужны пример заказа, SKU, склад, история возврата и доступ к логам синхронизации.
Итог
Остатки должны меняться через прозрачные движения, а не случайные правки чисел. Я могу исправить логику возвратов, резервов и синхронизации склада.