Отрицательные остатки после синхронизации почти всегда означают, что два процесса списывали один и тот же товар одновременно, не зная друг о друге.
Типичный сценарий возникновения
Заказ оформлен на сайте в момент, когда синхронизация как раз читает остатки из 1С. Обе системы видят одно и то же исходное количество, обе списывают заказанное количество независимо — в результате товара продано больше, чем было физически, и остаток уходит в минус.
Решение — атомарное списание, а не сравнение снимков
Вместо того чтобы читать остаток, вычитать и записывать новое значение отдельными шагами, используйте атомарную операцию базы данных (например, UPDATE stock SET qty = qty - 1 WHERE qty >= 1) — она не даст списать больше, чем реально доступно, даже при одновременных запросах.
Не позволяйте синхронизации перезаписывать активные заказы
Если синхронизация просто заменяет остаток целиком на значение из 1С, она может затереть корректировку, сделанную сайтом за секунду до этого. Синхронизация должна учитывать заказы, оформленные после последнего снимка данных, а не работать так, будто их не было.
Как поймать проблему на раннем этапе
Настройте алерт при появлении любого отрицательного остатка — само по себе отрицательное число невозможно физически и всегда указывает на ошибку логики синхронизации, которую стоит расследовать сразу, а не откладывать.



