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

Нужно проследить движение одной позиции: продажа, резерв, отгрузка, возврат, приемка и обновление доступного остатка. Важно различать физический остаток, резерв и доступное к продаже количество.

Что проверить в первую очередь

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

Основные причины

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

  • Возврат денег не связан с возвратом товара на склад.
  • Система обновляет общий остаток, но не снимает резерв.
  • Позиция возвращается на другой склад или в статус брака.
  • Синхронизация с 1С перезаписывает локальное исправление старым значением.

Пошаговая диагностика

  • Проверьте историю движений товара по SKU, складу и заказу.
  • Посмотрите, какие события приходят от платежной системы и службы доставки.
  • Проверьте частичный возврат: количество может отличаться от исходного заказа.
  • Сравните обработку возврата до и после синхронизации с учетной системой.
  • Проверьте округления и единицы измерения, если товар продается наборами.

Как исправить

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

  • Разделите финансовый возврат и складскую приемку товара.
  • Добавьте движение склада на возврат с правильным складом и статусом качества.
  • Снимайте резерв после отмены или возврата, если товар снова доступен.
  • Настройте идемпотентность, чтобы повтор события не прибавлял остаток дважды.
  • Согласуйте источник истины между сайтом, 1С и WMS.

Безопасный план решения

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

Как проверить результат

  • После возврата доступный остаток увеличивается ровно на возвращенное количество.
  • Частичный возврат не меняет остатки по невозвращенным позициям.
  • Повторная синхронизация не откатывает правильное значение.
  • История движений показывает понятную цепочку от заказа до возврата.

Чего не стоит делать

  • Не отключайте проверки, права, платежные статусы или защиту только ради быстрого исчезновения ошибки.
  • Не правьте рабочую базу массовым запросом без выборки, бэкапа и понимания последствий.
  • Не ориентируйтесь только на один успешный тест: проверьте повторный запуск, отмену, ошибку и нестандартные данные.
  • Не оставляйте временные ключи, токены, debug-режим и лишний вывод в публичном доступе.

Как не допустить повторения

  • Храните движения склада как журнал, а не только итоговое число.
  • Проверяйте возвраты в тестах: полный, частичный, брак, другой склад.
  • Добавьте сверку остатков между сайтом и учетной системой.
  • Логируйте все события, которые меняют доступное количество.

Что подготовить перед исправлением

  • Ссылку на проблемную страницу, кабинет, заказ, интеграцию или API-метод.
  • Точное время ошибки и пример пользователя, товара, платежа или запроса.
  • Скриншот, текст ошибки, лог веб-сервера, приложения или webhook-события.
  • Краткое описание ожидаемого поведения: что должно было произойти вместо ошибки.

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

Почему деньги вернулись, а товар нет?

Платежный возврат и складская приемка часто живут в разных подсистемах. Их нужно связать бизнес-правилом.

Можно ли просто прибавить товар вручную?

Для разового случая можно, но без исправления причины ошибка повторится и может создать расхождение с 1С или складом.

Когда стоит обратиться за помощью

Для диагностики нужны пример заказа, SKU, склад, история возврата и доступ к логам синхронизации.

Итог

Остатки должны меняться через прозрачные движения, а не случайные правки чисел. Я могу исправить логику возвратов, резервов и синхронизации склада.