一块石材被两个客户同时看中,这种事在建材门店每周都发生。工程单三个月前就报了需求,零售客户当天就要提货。系统显示库存1,两边都能下单。
超卖发生在这里,常见解释是「并发没控住」。但并发只是表象。真正的缺口是锁的粒度:系统只知道「这个SKU还有1件」,不知道那1件已经被谁锁定、锁到什么时候。
一、建材的库存单位不是「件」
瓷砖按箱、石材按块、防水按桶、五金按套。同一个物料在不同环节用不同单位计量,这在快消品里很少见。
更麻烦的是唯一性。一块天然石材有独一无二的纹理,客户选的是「那一块」,不是「同规格的任意一块」。这类商品在系统里必须落到唯一码,锁到SKU层级等于没锁——库存写200,实际能交付给这个客户的可能只有一块。
二、四种单据,两两互相抢
建材门店的库存同时被四类单据占用,冲突并不随机。四类单据两两相遇,可以列成矩阵。
抢货双方 | 冲突点 | 判定规则 |
工程单 × 零售单 | 同一批次被两边同时下单 | 工程单先锁,零售只能看可用量 |
工程单 × 调拨 | 总部调走已锁定的货 | 已锁定量不进调拨池 |
零售单 × 零售单 | 两店同抢最后一件 | 先付款先得,未付款只占短时预留 |
退货 × 全部 | 退货入库是否立即释放 | 质检通过才释放,未检入待检区 |
矩阵里每一格的判定规则,都要能在系统里配成参数,不能靠人记。
三、锁的四个参数
要讲清锁定,得回答四个问题:锁什么、锁多久、谁释放、谁能越权。
锁什么。三个层级可选:SKU、批次、唯一码。瓷砖按批次锁就够,因为同批次可互换;石材必须按唯一码锁,因为不可互换。同一套系统要能按品类配置锁定层级,不能一刀切。
锁多久。工程单不是锁一次到底,而是按施工节点分段释放。签约锁30%,进场锁40%,收尾锁30%——三个阶段对应三笔发货,锁定量跟着节点走。如果一次性锁满,中间三个月的零售客户全部买不到货,门店会先受不了。
谁释放。节点到了不自动释放,要人工确认。理由很实际:工期延后是常态,系统按合同日期自动放货,货一放出去,工程方再来提就没货了。
谁能越权。门店经理想把工程锁定的货卖给现场客户,这个口子开不开?合理的设计是开着,但留痕:越权解锁要填原因、要审批、要在工程单上留一条记录,让后面的责任判断有据可查。
四、可用量怎么算
库存表上的数字有三个,很多系统只显示第一个。
- 现存量:仓库里实际有多少
- 锁定量:已被单据占用、尚未发货的部分
- 可承诺量:现存量 − 锁定量 − 安全库存 + 在途量
零售端看到的必须是可承诺量。工程锁定部分可以另设一个「预计可用」字段,标注释放日期,让门店知道哪天能卖,而不是简单显示为零。
在途量有两种算法,选哪种要写明。按采购订单算,在途是已下单未到货;按发货单算,在途是已发运未签收。前者乐观,后者保守,同一批货能差出半个月的可用量。工程排产依赖这个数,口径不明就会承诺出根本到不了的货。
这个拆分看起来只是多两个字段,实际决定了门店会不会私自卖工程货——系统不给他看真实可用量,他就靠人情和经验判断,超卖就是从这儿开始的。
五、账实不符的根子也在粒度
杉木石业做石材,供应商分布在各大洲,货物要走海运,运费、装箱卸箱、关税、抽查罚款、运输损益都要摊到具体货品上。系统为每一块板材建立唯一码,采购入库后按批次录入非货品成本,再按唯一码个数平均分摊,每个唯一码都带着自己的成本。
这套设计解决的是「这块板到底值多少钱」。而它暴露的另一个问题更典型:出库前客户换货、石板碎裂、退货重新入库,这些节点如果没及时记录,最后会出现系统显示库存充足、仓库实际无货。销售在系统里下单,仓库发不出来。
碎裂损益当天落到具体唯一码,可承诺量才是真的。锁定的前提是数据准,数据不准的时候,锁得再严也是锁在假数上。
丽晶星云-零售平台在这类场景里的做法,是把锁定层级做成品类参数:瓷砖按批次锁,石材按唯一码锁,门店端看到的只有可承诺量。参数跟着品类走,同一套逻辑能同时服务建材门店和工程经销体系。
判断标准是,拿一张真实的工程单去问系统三个问题:它锁了哪几块货、什么时候释放、谁能解锁。
三个都答得出来,锁定粒度才算够。答不出来,说明系统只记了「卖了多少」,没记「留着给谁」——这种系统撑不过两个工程单同时在场的月份。
FAQ
Q:预锁库存会不会把零售端锁死?
会,如果锁满且不可分级。可行做法是分段锁、按节点释放,同时保留一个越权通道并留痕。锁的目的不是禁售。是让卖的人知道自己在卖什么。
Q:工程单改单很频繁,锁定怎么跟着变?
锁定量要能按单据版本重算,历史版本留档。改单时先释放旧锁再落新锁,中间留一个短暂的空窗,避免同一批货被新旧两版同时占用。
Q:多单位换算会不会影响可用量?
会。箱、件、套之间换算取整的余数,如果不单独记,盘点时必然对不上。可用量按最小单位计算,展示时再换算成大单位,误差只出现在展示层。