系统显示有货,为什么还会超卖?在途库存、可用库存与锁定库存如何影响采购和履约

先还原一个你可能经历过的场景:你在电商 App 上看到某件商品显示“有货”,于是下单、付款,页面提示“预计明天送达”。第二天你打开订单,状态变成了“商品已从其他仓库调拨”或者“延迟发货”。再等一天,客服打电话来:“非常抱歉,仓库实际没有货了,给您退款。”

你可能会想:系统不是显示有货吗?为什么还会超卖?

这篇文章解决的核心问题就是:为什么库存数量在系统里看起来够,但实际履约时却对不上? 我们不讲代码,只讲业务层的库存状态:实物库存、在途库存、可用库存、锁定库存分别是什么,它们如何影响采购节奏和履约承诺,以及新人理解库存状态的一个简单框架。

从“一瓶水”讲起:库存不是一个数

在研发的视角里,库存往往对应数据库里的一个字段,比如 stock_quantity。但在零售业务里,库存不是一条记录,而是一组状态的和。

假设你经营一家便利店,卖瓶装水。你手上现在有 3 箱水,每箱 24 瓶,共 72 瓶。这是实物库存(Physical Stock)——仓库或门店里实实在在放着的货。但这不是唯一需要关心的数。

你昨天已经向供应商下了一笔采购单,50 箱水正在路上,预计后天到。这是在途库存(In-Transit Inventory / On-Order Inventory)——你还没有拿到,但已经付了钱或承诺购买,未来几天内会变成实物库存。

同时,今天早上有个团购客户打电话来,说要 20 箱,你答应了,但这批货还没提走,你为了他“留着”。这是锁定库存(Locked/Reserved Inventory)——实物还在你这里,但已经被某笔订单“预占”,不能再卖给别人。

那么,现在你的可用库存(Available Inventory / Sellable Inventory)是多少?

用一个简单的计算公式:

1
可用库存 = 实物库存 - 锁定库存 + 在途库存

代入数字:72 - 20 + 50 = 102 瓶。但你的实际可立即发货库存只有 52 瓶(72 减 20)。如果系统把 102 瓶全部开放给线上顾客下单,就会出问题:当一个顾客下单 60 瓶要明天送到时,你发现手头只有 52 瓶,超卖就发生了。

这就是库存状态错位的第一个根源:把未来才能到货的在途库存,当成了现在就能履约的实物库存。

为什么在途库存会导致超卖:时间差是核心

在途库存之所以危险,是因为它看似参与了“可用”的计算,但它到得不一定是时候。

采购有一个关键概念叫提前期(Lead Time):从下采购单到货物实际入仓可卖,中间要花的时间。比如你向供应商采购一批牛奶,提前期是 3 天。今天是 10 月 17 日,你在系统看到一条在途记录:10 月 19 日会到货 100 箱。于是系统把 10 月 17 日到 10 月 19 日之间的订单也接了,承诺顾客“后天发货”。

但现实中,供应商延迟了一天,10 月 20 日才到。这中间 10 月 19 日承诺发出的订单,就全部缺货了。天猫超市和京东自营在“次日达”承诺下,对在途库存的使用尤其谨慎:一般是“到货前 N 小时”才更新可售状态,而不是一看见采购单就放开卖。

这和拼多多形成对比。拼多多大量商品是商家自发货,平台只做信息撮合,对在途库存的管控相对松散,商家自行决定接单后能不能发出来。所以拼多多上“超卖后赔款”的场景更常见,平台用惩罚机制来约束商家,而不是用系统锁库存来防止超卖。

再看一个电商大促的典型矛盾:双 11 期间,系统为了冲 GMV,会提前把采购在途的货也计入可售库存。因为如果只按实物库存卖,很多爆款会显示“缺货”,白白丢掉订单。但代价是:一旦供应商产能不足、物流中转延误,超卖就会集中爆发,售后退款和客服投诉激增。

这里引出一个业务权衡:可售库存的“深度”,决定了一次能接多少订单;但可用库存中“在途”的比例越高,履约风险越大。

锁定库存:为什么“有货”不等于“能卖”

锁定库存解决的是另一个问题:同一件实物,不能被两笔订单同时承诺。

当顾客下单并支付后,系统会把对应数量的库存从“可用”转为“锁定”。这个动作发生在下单瞬间,而不是发货瞬间。锁定的意义是:这笔订单已经“占位”了,别人不能把这瓶水买走。

但锁库不是永久的。 一个关键业务规则是锁定超时释放(Lock Timeout Release):如果订单在锁定后的一段时间内没有成功发货(比如 24 小时),系统会把这部分库存释放回“可用”,以便继续接单。这个机制在防止库存闲置和接单能力之间做平衡,但也埋下了超卖的隐患。

举个例子:顾客 A 在上午 10 点下了一单 2 瓶水,库存锁定 2 瓶。下午 2 点仓库拣货时发现有一瓶水破损,无法发货,系统触发异常处理,把 2 瓶全部释放。释放后库存变回可用,顾客 B 下单把这两瓶买走了。但此时顾客 A 的订单并没有取消,系统还在等补货或调拨。最终如果补不到货,顾客 A 收到退款——但顾客 A 下单时明明“有货”。

这就是锁定库存与实物库存之间的状态错位:锁定的意义是“承诺”,但仓库的实物状态(破损、丢失、质量不合格)不会实时同步到库存系统。系统以为锁定了 2 瓶,实物其实只有 1 瓶可发。

拆单履约让这个矛盾更隐蔽。 一个订单里有 3 件商品,分别放在不同的仓库。系统对每件商品分别锁定:仓 A 锁 1 件,仓 B 锁 2 件。但顾客期望的是“一个包裹一起到”。如果仓 B 的 2 件中有一件迟迟拣不出来,整个订单就会被挂起。此时仓 A 锁的那 1 件也不能卖,因为订单没有取消。跨仓锁定会放大局部缺货的影响,这也是京东自营“同仓出库优先”策略背后的业务原因。

品类角色决定“库存容错度”

不是所有商品超卖了都需要恐慌。在品类管理里,商品有不同的品类角色:引流品、利润品、形象品、便利品。角色不同,对库存状态错位的容忍度完全不同。

引流品是拿来吸引流量的,比如低价纸巾、爆款手机。超卖 100 单可能直接冲上热搜,影响对品牌的信任。所以引流品的库存缓冲(安全库存)会设得更高,且宁可不接单,也不超卖。盒马做“爆款”时常常对可售比例设上限,不能把在途库存 100% 全部放出去卖。

利润品的毛利高、动销慢一些。超卖几单的代价相对小,因为顾客会等,或者可以快速补货。这类商品的库存策略会偏向“适度乐观”,把一部分在途库存计入可售,以充分利用采购资金。

形象品是具有品牌展示功能的商品,比如高端家电、限量款。超卖对品牌伤害极大,一般采用保守锁库:宁可少卖,也要确保下单顾客一定收到货。Costco 和山姆在自有品牌及高端品类上就偏向保守,库存准确率优先于 SKU 数量。

便利品是随手买的补充性商品(如牙膏、电池),单价低、需求分散。超卖的影响最小,商家往往允许较高的“虚假可售”比例,因为退款成本低、顾客不太计较。

品类与库存交叉的核心逻辑是:库存策略不是统一的,而是跟着品类角色走的。 同一个仓库里,引流品的缺货率目标可能是 2%,便利品可以放宽到 8%。缺货率(Stockout Rate)的计算口径是:一定时间内,顾客下单后无法履约的库存单位(SKU)数量,除以顾客需求总量。这个指标是库存管理最核心的业务指标之一。

采购节奏:在途库存的“池子”该蓄多深

在途库存从哪里来?来自补货(Replenishment)。补货触发通常有三种模式:

  • 定期补货:每周二、周五固定下采购单,比如便利店常规商品。
  • 定量补货:当可用库存低于某个阈值(再订货点 Reorder Point)时触发采购,比如电商仓库中的快消品。
  • 预测驱动补货:根据销售预测动态计算补货量,常用于大促前的爆品备货。

采购提前期决定了在途库存要覆盖多少个需求周期。公式上,再订货点 = 日均销量 × 提前期 + 安全库存。

安全库存(Safety Stock)是应对不确定性的缓冲,比如供应商晚到两天、突然某天销量翻倍。它本质上是为预测误差买的保险。安全库存设得越高,超卖概率越低,但库存周转天数会上升。

库存周转天数(Days of Inventory Outstanding)是一个关键指标:

1
库存周转天数 = 平均库存金额 ÷ 日均销售成本

如果某品类库存周转天数是 45 天,说明从进货到卖完平均要 45 天。采购的职责是:在“不缺货”和“周转快”之间找平衡。在途库存是采购的“弹药”:下单太频繁,周转变慢、资金占用高;下单太稀,在途池子干涸,一旦销量波动就断货。

再看履约端怎么承接采购节奏:如果采购提前期是 3 天,但履约承诺是“次日达”,系统就必须保证“当天可发”的实物库存足够。此时在途库存不能替代实物库存,因为在途要 3 天后才到。所以“次日达”的商品,往往要求仓内实物库存至少覆盖未来 1.5 倍日均销量,把在途库存当作“缓冲”而不是“主力”。

履约视角:仓库距离顾客有多远,库存的“可用性”就有多真

库存不只是一个数量,还有一个物理位置。履约能力与库存位置高度绑定。

假设你的总库存是 1000 瓶水,但其中 800 瓶在一个离顾客 500 公里的中央仓,200 瓶在离顾客 5 公里的前置仓。系统显示总库存 1000 瓶“有货”,但如果顾客下单要求“1 小时达”,只有 200 瓶能真正履约。另外 800 瓶对这个订单来说是“不可用的”。

这就是库存可用性的物理约束。盒马、叮咚买菜这类即时零售,把“仓储布局”和“履约时效”绑得很紧:前置仓面积小、SKU 少,但离顾客近。它牺牲的是品类宽度,换取的是库存“够得着”。而京东、天猫的全国仓网,SKU 丰富,但跨区调拨需要时间,所以它们对“在途调拨库存”的依赖更大。

当系统把全国总库存简单相加,展示“有货”时,实际上忽略了库存分布的碎片化。一个商品在全国有 1000 件,分散在 8 个仓,每个仓 125 件。顾客下单时系统锁定最近的一个仓,如果那个仓实际只剩 2 件破损不可发,其他 7 个仓的 875 件对这个订单毫无帮助——调拨时间赶不上履约承诺。

履约成本也跟库存状态有关。 如果一个订单从离顾客 500 公里的仓发出,运费可能是前置仓的 3 倍。所以即时零售的超卖代价不只是退款,还包括为了补救而启动的“加急调拨”:用高额的专车运输成本,把一件 9.9 元的商品从远处仓送过来,一单亏 30 元。

给研发工程师的一个简单框架:三层库存

把上面所有内容浓缩成一个新人可用的框架。一个商品在任意时刻,其实同时存在于三个“层”:

1
2
3
4
实物层   |  账面层   |  承诺层
─────────┼──────────┼─────────
仓库里 | ERP里 | 订单里
的货 | 的数 | 的锁
  • 实物层:仓库里真正有多少、状态如何(完好/破损/过期/丢失)。只有实物层是客观事实。
  • 账面层:系统记录的数量,包括实物、在途、冻结、调拨中。账面层可能滞后于实物层,也可能超前(在途计入可售)。
  • 承诺层:订单锁定后的库存,代表“我答应了顾客”。承诺层越高,业务运转越快,但风险也越高。

超卖的根源,就是这三层不一致,且系统在展示“有货”时,混用了不同层的数据。

一个启发式等式:

1
履约能力 = 实物在场 + 补货时间 ≤ 顾客承诺 + 库存锁定

意思是:只有“现场有货、且能在承诺时间内送到”的库存,才是真正的可售库存。把在途库存计入可售、把锁定库存释放得过早,都是在放大履约风险。

最后留一个思考问题:如果系统里“锁定库存永不释放”,会发生什么?顾客会下不了单,因为商品都被未发货的订单占着,商家为了减少超卖却损失了大量真实订单。这反过来解释了一个现象:为什么大促期间,有些商品“付款后迟迟不发货,但页面还在继续卖”——因为锁库超时释放和补货节奏之间,存在一个时间窗,系统在和时间赛跑。

核心要点

  • 库存不是单一数字,而是“实物库存、在途库存、锁定库存、可用库存”等多状态的和,公式:可用库存 = 实物库存 - 锁定库存 + 在途库存。
  • 超卖的根源是状态错位,核心是时间差:把未来才能到货的在途库存,当成了现在就能履约的实物库存。
  • 锁定库存解决“同一件货不能卖给两个人”,但锁库超时释放、破损释放、跨仓拆单会再次制造错位。
  • 品类角色决定库存容错度:引流品和形象品宁可不卖也不超卖,便利品和部分利润品可以适度乐观。
  • 采购提前期和补货节奏决定在途库存的“池子深度”,安全库存是给预测误差买的保险,库存周转天数是衡量库存健康的核心指标。
  • 履约的物理约束很强:库存离顾客太远,对这个订单就是不可用的。全国总库存“有货”不等于本地仓能发货。
  • 新人理解框架:实物层是事实,账面层是记录,承诺层是订单锁库。三层不一致,就是超卖的起点。

参考文献

  1. 马丁·克里斯托弗《物流与供应链管理》(Logistics & Supply Chain Management) —— 供应链管理领域经典,系统讲解库存、提前期与履约协同。
  2. 巴里·伯曼、乔尔·埃文斯《零售管理》(Retail Management: A Strategic Approach) —— 零售经典教材,涵盖品类角色、商品组合与库存管理。
  3. 山姆·沃尔顿《富甲美国:沃尔玛创始人自传》 —— 沃尔玛供应链实践,强调库存准确性和履约效率在零售竞争力中的核心地位。
  4. 哈佛商业评论(Harvard Business Review) —— 收录库存管理与零售运营决策案例,可用于理解品类与库存权衡的商业逻辑。

本文由 Claude(Anthropic)辅助生成。验证日期:2026-10-17。