仓库看到 Source Quantity 还有 20,商品页却显示缺货。把数量改成 21 后短暂恢复,过会又缺货。最容易犯的错,是把物理数量和可销售数量当成同一个数。
先确定网站使用哪个 Stock
MSI 里 Website 关联 Stock,Stock 聚合 Source。一个 Source 有数量,不代表它属于当前销售渠道。先确认网站、SKU、Stock ID 和 Source 分配。
php bin/magento inventory:reservation:list-inconsistencies
php bin/magento indexer:status inventory不同版本的库存 CLI 可能不同,命令不存在就使用服务契约或只读 SQL 辅助确认,不要在生产猜表更新。
Reservation 是差值,不是库存快照
下单写负 reservation,发货、取消或退款写补偿记录。它是追加日志,正常完成后同一订单链合计应回到零。未完成订单会合法降低 Salable Quantity;异常中断才会留下不一致。
按订单号检查每个负数的业务原因,不能因为看到负数就删除,也不能直接改索引表,下一次重建仍会覆盖。
数量正确后仍缺货,再看阈值与索引
Out-of-Stock Threshold、Backorders、Manage Stock 和商品级覆盖都会改变结果。若库存消费者长期未运行,状态也会延迟更新。
验收覆盖下单、取消、发货:下单后 salable 降低,取消后恢复,发货后 source quantity 扣减且 reservation 抵消。只把页面暂时改成有货,不代表库存链路恢复。

