仓库有一百六十件物料,订单只要七十件,系统却跳过了最早到货的批次。仓管员担心违反先进先出,销售担心客户收到临期货。判断这次分配,需要同时看到库存资格、需求日期和采用的排序规则。
本篇接着 WMS 基础篇拆解 FIFO 与 FEFO。SO-F70 和五批库存均为独立教学模拟,不改变前文支架工单的数量;日期、最低剩余有效期和分配规则只供复算,不代表真实产品要求或厂商接口。
先说明先入和先到期分别按什么算
FIFO(First In, First Out)按已约定的入库或库龄依据优先选择较早库存;FEFO(First Expiry, First Out)按约定的到期依据优先选择较早到期库存。后入库的一批可能更早到期,两种排序自然会得出不同结果。
Microsoft 的库位指令文档分别列出 FEFO 批次预留和 Location aging FIFO。后者根据进入仓库的库龄日期寻找较早库存位置,说明产品中的具体策略有自己的粒度与前提,不能假定所有 WMS 都只按批次收货日排序。
| 日期或记录 | 在本篇的作用 | 需要避免的混用 |
|---|---|---|
| 首次收货时刻 | 本样本 FIFO 主排序键 | 移到新库位的时间不能直接覆盖它 |
| 本次上架、移库时刻 | 解释实物位置和操作历史 | 不自动改变产品年龄或到期日 |
| 到期时刻 | 本样本 FEFO 主排序键和资格条件 | 与建议复验日、最佳使用日期分开 |
| 客户约定到货时刻 | 最低剩余有效期的计算锚点 | 不能默认按今天或发货日判断 |
| 库存版本与规则版本 | 还原本次判断采用的事实 | 当前状态不能覆盖原分配快照 |
仓储实物轮转与财务 FIFO 计价也要分开。Microsoft 的 FIFO 成本说明讨论库存结算与计价机制;账上采用 FIFO 不能单独证明现场实际先拣了旧批。
本例统一使用带时区的时间戳,首次收货时间相同则按库存明细 ID 稳定排序;FEFO 同期到期时再比较首次收货时间。实际系统的日期精度、同日边界和并列规则,应写入接口契约。
把一百六十件筛成九十件候选库存
2026 年 10 月 19 日 08:00,工厂 A 的同一种物料有下表库存,单位均为件。货权、版本与位置条件在本样本中已满足,数量分组互不重叠。订单 SO-F70 需要 70 件,约定 10 月 22 日 08:00 到货,并要求当时至少剩余 7 个完整的 24 小时。
| 批次 | 首次收货 | 到期时刻 | 实物数量 | 当前条件 | 本单候选量 |
|---|---|---|---|---|---|
| F0 | 9 月 29 日 08:00 | 10 月 21 日 08:00 | 20 | 已放行,但到货时已到期 | 0 |
| F1 | 10 月 1 日 08:00 | 11 月 2 日 08:00 | 60 | 已放行,其中 10 件被其他任务预留 | 50 |
| F2 | 10 月 10 日 08:00 | 10 月 30 日 08:00 | 40 | 已放行、未预留 | 40 |
| F3 | 10 月 5 日 08:00 | 10 月 29 日 08:00 | 30 | 质量冻结 | 0 |
| F4 | 10 月 12 日 08:00 | 未确认 | 10 | 缺少到期依据 | 0 |
以上时刻均为北京时间。本例规定到期时刻起禁止使用,最低剩余期比较允许等于阈值;因此日期门槛是 10 月 29 日 08:00。F3 在日期上恰好满足门槛,但质量冻结仍使它不可分配。F4 保持“日期依据未知”,不补成一个很远的日期。
最低到期门槛 = 10月22日08:00 + 7×24小时 = 10月29日08:00
F1 候选量 = 60 − 其他任务预留10 = 50件
F2 候选量 = 40件
本单候选量 = 50 + 40 = 90件
Microsoft 的有限保质期计划说明将客户可销售天数与约定收货日期联系起来,并区分到期、建议检查和最佳使用日期。这是产品实现依据;本例“7 个完整日”和精确边界由教学规则 RULE-F / 1 自行设定。
资格筛选应逐条保留失败原因,允许同一明细存在多个原因。这里 F0、F3、F4 和 F1 的预留部分互不重叠,才能直接核对 160 = 候选90 + 不参加本单70。实际字段若有重叠,不应按“冻结加预留加过期”重复扣减。
在同一份候选库存上比较两种分配
本样本允许拆批,单件单位精度为 1,不限制整托或整箱。FIFO 在 F1 与 F2 中先取 F1;FEFO 则先取较早到期的 F2。以下两列为互相独立的比较方案,不会同时锁定两遍库存。
| 方案 | 优先次序 | 需求 70 件的分配 | 本单分配后的候选余量 |
|---|---|---|---|
| FIFO | F1 → F2 | F1 50、F2 20 | F2 20 |
| FEFO | F2 → F1 | F2 40、F1 30 | F1 20 |
两者都能满足数量和本例资格条件。企业选用哪种策略,还要确认产品、客户、包装和仓储作业要求。减少拆托或缩短行走距离可以参与策略设计,但调整后仍需满足不能绕过的资格条件,并记录采用依据。
假设到货日期改为 10 月 24 日 08:00,其余条件不变,到期门槛随之变为 10 月 31 日 08:00。F2 不再满足,F1 只可提供 50 件,本单出现 20 件缺口。原来 70 件的预留方案应重新评估,不能因曾经选中过 F2 就继续出库。
分配成功以后仍可能失效
本例选择 FEFO 方案,原子核对库存版本并预留 F2 40 件和 F1 30 件。并发任务如果先占用了部分库存,当前任务需要重新计算或返回冲突,不能使用过期的 90 件快照超量分配。
从任务生成到实际扫码,可能又发生冻结、改期或日期资料修订。拣货和出库动作需要按当时有效条件复核。操作员扫描另一批时,应重新核对身份、资格和可分配量,形成换批记录;主管批准“换一批”也不能代替质量放行或未经授权的有效期变更。
选择记录与实际用料一起留下来
一份可追溯的分配记录至少保存需求行、时间锚点、所需数量、来源快照、规则版本、候选明细、跳过原因、排序键及分配结果。执行记录再保存实际扫描批次、容器、数量、位置和回执。
本例原计划选 F2 40、F1 30,但仓库实际只从 F2 拣到 38 件,暂不从 F1 额外补足。实际为 F2 38 加 F1 30,共 68 件,短拣 2 件;这两件对应的库存事实仍待复核,不能自动当作实物损失或直接改账。
需求70 = 已确认实际拣选68 + 未完成2
实际拣选68 = F2批38 + F1批30
原计划70仍保留,但不作为实际用料凭据
若这些物料以后进入生产,应由实际接收与耗用记录连接到工单及产品。客户异常反查时,可以同时看见“为什么选”和“实际用了什么”。质量影响范围篇继续解释分拆、合批和返工后的产品谱系,分配单本身不能替代耗用证据。
移库、拆箱和退回未耗用余料时,继续关联原批次、容器关系与日期依据。新的交接时间单独记录,原收货年龄和有效期按适用规则传承。退回物料若已开封,还需核对开封与环境时钟,详见在制品与时间约束专题。
用边界和异常样本验收规则
批次选择 JSON保存五批库存、规则、两种分配和改期/短拣结果。校验程序可复算候选量、顺序、期限边界和重复回执;数字均为模拟,不连接实际 WMS。
| 验收输入 | 应得到的结果 |
|---|---|
| 完整基准快照 | 候选 90 件,FIFO 为 50+20,FEFO 为 40+30 |
| 冻结 F3,即使日期满足 | 不参加本单分配,保留质量原因 |
| F4 的到期日为空 | 列为日期未知,不默认为长期有效 |
| 到期日恰好等于到货后 7 天 | 按本例含等号规则通过日期条件,其他条件仍检查 |
| 到货推迟两天 | 候选变为 50 件,缺口 20 件 |
| 扫码时 F2 又被质量冻结 | 拒绝本次 F2 执行,原选择记录保留 |
| F2 实际拣选 38 件,回执重发 | 实际总量仍为 68 件,未完成 2 件 |
资料于 2026-10-19 核对。库位指令文档支持实物策略的产品例子,成本文档解释财务 FIFO,有限保质期文档支持剩余期与需求的关联;具体规则、字段及数值均在样本中另行声明。执行验收还需要企业批准的日期口径、批次主数据和仓库操作记录。