库存 · Excel 升级

Excel 管理库存,什么时候该升级成系统?

如果库存批次、出入库、盘点、多人协作和查询追踪已经让 Excel 吃力,就该考虑做库存管理系统或 WMS。

Excel 很适合早期管理库存,因为灵活、便宜、上手快。但当仓库、销售、采购、财务都开始依赖同一份库存数据时,Excel 的自由度就会变成风险。

多人同时改表,是第一个危险信号

多人维护同一份表格时,版本、权限、误删和覆盖都会带来数据风险。

批次和追溯会让表格迅速复杂

只看数量还好,一旦涉及批次、保质期、供应商、客户订单和追溯,系统化会更可靠。

盘点经常对不上,说明流程缺少记录

库存系统不是简单替代表格,而是记录每一次入库、出库、调整和盘点。

先做轻量版,不一定上来就是完整 WMS

可以先做商品、库存、出入库、盘点和查询,再逐步加入扫码、库位、审批和报表。

脱敏项目复盘:从 Excel 库存表走向可追溯仓储系统

仓库用 Excel 并不一定是落后,问题在于多人同时修改、批次规则靠记忆、盘点差异无法追溯。一个典型项目中,采购入库、生产领料和成品出库分别维护不同表格,管理者看到的是月底汇总,仓库人员处理的却是当天每一次实物移动。

业务与产品形态

首期只覆盖物料档案、批次与库位、入库、出库、盘点和库存查询。仓库端采用扫码工作台,减少键盘录入;管理后台维护基础资料和异常单;负责人首页只看低库存、长库龄、待盘点和差异。系统保留 Excel 导入导出,但不再把表格作为最终账本。

技术解决方案

库存以不可变流水作为事实来源,每次变动记录业务单据、物料、批次、库位、数量、单位、操作者和时间。结余表作为查询缓存,在同一事务中更新,并支持从流水重算校验。扫码请求带终端流水号实现幂等,导入先进入暂存区,完成字段映射、单位换算和重复校验后才正式入账。

难点设计

难点通常是单位换算、批次拆并、负库存、在途数量和盘点期间仍有出入库。项目开始前必须定义“账面、可用、占用、在途”四种数量;盘点使用快照时间和差异调整单,避免直接覆盖库存。历史表中的同名物料、空批次和异常单位生成待确认清单,由业务负责人签字后迁移。

用户体验

扫码后自动带出物料、默认库位和最近批次,连续作业保持上下文;页面同时显示本次操作量、当前可用量和操作后结果。部分拣货、扫码错误和网络断开都有明确恢复入口。高频动作减少弹窗,危险调整则必须填写原因并显示影响范围。

产品效果与验收

上线初期让系统账与原表并行一个盘点周期,逐单核对差异来源。验收关注库存差异率、找货耗时、漏记次数、盘点工时、批次追溯时间和异常调整数量。只有关键物料从入库到领用都能回到原始单据,系统才真正替代了表格,而不是把 Excel 搬进网页。

库存系统真正难的不是做一张库存表

库存数量应该是业务流水计算出的结果,而不是任何人都能直接修改的数字。一个可追溯的库存模型至少包含物料、仓库、库位、批次、库存余额、业务单据和库存流水。入库、出库、调拨、盘点和退货都产生带来源单号的流水,再更新对应余额。出现差异时才能从余额追到流水,再追到具体单据和操作人。

可用库存、实物库存和占用库存必须分开

销售下单后可能需要预占,仓库拣货后尚未出库,质检中的物料又不能使用。如果系统只有一个 quantity 字段,很快会出现“系统有货但不能发”或重复分配。我们会根据业务定义在库、可用、占用、冻结和在途等口径,并明确每个业务动作影响哪些数量。口径先确定,报表才不会互相打架。

并发扣减要由数据库守住底线

两个员工同时出库同一批次时,仅在前端检查库存没有意义。后端需要在事务中使用条件更新、行锁或版本号,确保余额不足时只有一个请求成功;业务单号和操作幂等键用于防止重复扫码、重复提交。流水与余额必须在同一事务里落库,不能出现流水有了但余额没变,或者余额变了却找不到依据。

从 Excel 迁移要先建立主数据

旧表里常见同一物料多个名称、单位混用、批次为空、库位写法不统一。迁移前先确定物料编码、单位换算、仓库和库位字典,再把历史表映射到主数据。第一阶段通常只导入可核对的期初余额和必要批次,旧流水保留为归档查询。正式切换要安排冻结时间、全量盘点和差异签字,不能边用旧表边改新系统。

验收应围绕对账和追溯

真正有意义的验收不是“页面能新增删除”,而是随机抽取物料能查到当前库位和批次,任意一条余额能回溯到流水和单据,盘点差异能形成调整记录,重复提交不会重复扣减。再用一组真实业务单据跑完整入库、调拨、领料、退料和出库,才能判断系统是否具备上线条件。

从表格迁移到库存系统,数据模型必须先改

余额是流水计算结果,不是一个随手覆盖的数字

库存核心通常拆成物料、仓库、库位、批次、库存流水和当前余额。每次入库、出库、调拨、冻结和盘点都生成带业务单号的 ledger 记录,余额由同一事务更新或从流水重建。禁止直接修改“库存数量”,需要调整时也生成有原因、有审批人的调整单,才能解释某个批次为什么少了三件。

并发扣减要靠数据库约束,不靠前端按钮置灰

订单占用库存时先生成 reservation,确认出库后再转为实际扣减;取消或超时则释放占用。更新余额可以使用行锁或版本号进行乐观锁校验,受影响行数不符合预期就重新计算,而不是继续提交。业务单号与动作类型设置唯一约束,扫码枪重复上传或网络重试不会产生两次出库。

历史表格不能原样导入,必须先做数据治理

迁移前要统一物料编码、单位、仓库名称和批次格式,识别重复 SKU、负库存与缺少日期的记录。上线切换时先冻结旧表写入,导入期初余额,再用物料数、批次数、库存总量和抽样明细做双向核对。无法映射的数据放入异常清单,由业务负责人确认,不能由开发人员猜一个默认仓库。

现场操作要能处理断网、误扫和撤销

移动端扫码应即时显示物料、库位和本次累计数量,重复码给出明确提示;弱网时本地队列带 client_event_id,恢复后可安全补传。已经审核的单据不直接删除,而是走冲销或反向单。后台保留操作者、设备、时间和前后值,现场人员才能放心使用,管理者也能追溯。

你可以先这样判断

  • 是否多人维护库存表
  • 是否需要批次或出入库记录
  • 是否盘点经常对不上
  • 是否需要扫码或移动端操作
如果你正好卡在这个问题上

先用 3 分钟描述背景,我们帮你判断该不该做、先做什么。

快速描述您的需求