我在制造业信息化这行写过几年车间系统,见得最多的场景是:一家二三十人的机加工厂,创业头几年靠几张 Excel 表把生产管得井井有条,等厂子一发展,还是那几张表,却开始处处漏风。老板们的直觉是"人不用心"或"表不够多",但真问题在数据模型——Excel 是快照,生产是流。
这篇文章不聊情怀,从模型和代码层面把"为什么乱"拆清楚,再给一个系统侧的数据模型对照。
一、先说结论:问题出在"没有单一数据源"
作坊期单少、变化慢,一张计划表改个数字就完事,Excel 便宜、灵活、零门槛,那会儿它是很合适的选择。等工单过几十张、外协三五家、客户催货变频繁,麻烦的本质是:同一份"生产真相"被复制成了多份文件,每份都能改、每份都觉得自己是正版。
这不是人的问题。只要数据源不唯一,协作人数一上去,冲突必然发生。
二、用几行代码证明"四个表必然对不上"
很多厂子真实状态是:计划表在老板桌面、进度表在车间主任手机、库存表在仓管手里、工时表在财务电脑。我们模拟一下——假设四个人基于同一张单各自维护一份副本,第 3 天各自改了不同字段:
importpandasaspd# 四份"同一张单"的副本,初始一致base={"工单号":"WO-2026-001","数量":100,"交期":"2026-10-20","状态":"进行中"}copies={"计划表":dict(base,交期="2026-10-18"),# 老板改了交期"进度表":dict(base,状态="已完工"),# 车间改了状态"库存表":dict(base,数量=120),# 仓管改了数量"工时表":dict(base),# 财务还没动}# 比对四个副本,看"同一张单"到底有几个真相forwho,rowincopies.items():diff=[kforkinbaseifrow[k]!=base[k]]print(f"{who}: 与基准差异 ->{diffifdiffelse'无'}")# 输出:# 计划表: 与基准差异 -> ['交期']# 进度表: 与基准差异 -> ['状态']# 库存表: 与基准差异 -> ['数量']# 工时表: 与基准差异 -> 无四个副本,三个字段各不相同,却没有一个人能确认"哪个是真的"。Excel 的文件系统天然没有"行级锁"和"唯一真相",另存为越多,冲突面越大。更常见的还有文件名奇观:生产计划.xlsx、生产计划-改.xlsx、生产计划-最终版.xlsx、生产计划-真最终.xlsx——到底哪份最新,全厂没人敢拍板。
三、进度为什么永远慢半拍:它是"事后录"
用 Excel 追进度,本质是事后录:工人干完 → 班组长记本子 → 下班前车间主任录进表 → 老板晚上翻。单子少时滞后一两天没人计较;厂子一忙,这个节奏永远追不上现场——插单、暂停、返工,表里记的永远是"滞后且乐观"的。
从模型看,Excel 里"进度"是一个被手动回填的字段,没有时间戳、没有操作人。系统侧的做法是把进度变成事件流:每次扫码报工写一条带时间戳的记录,进度由事件聚合出来,而不是被人填出来。
四、月底算到哭:汇总的是"结果",不是"过程"
每月底财务对着SUMIF、VLOOKUP拼"这个月干了什么"。单少时熬一晚完事;单子一多,拼表从"一晚"变"几个通宵",错一行漏一格整张推倒重来。
更要命的是:这些表汇总的只是结果。真正值钱的过程数据——每张单实际花多少工时、超多少料、哪个工段总返工——Excel 里根本没有,因为没人有功夫一张单一张单地记。
五、系统侧的数据模型:一张工单贯穿全程
把"接单 → 工单 → 报工 → 外协 → 对账"主线从表格手里接过来,核心是把数据归一。一个最小可用的模型大致是这样:
-- 工单:生产的主线,全员看同一个号CREATETABLEwork_order(id UUIDPRIMARYKEY,order_noVARCHAR,-- 来源订单qtyINT,due_dateDATE,statusVARCHAR-- 进行中/完工/对账);-- 报工:每次扫码写一条带时间戳的事件,进度由它聚合CREATETABLEreport(id UUIDPRIMARYKEY,work_order_id UUIDREFERENCESwork_order(id),op_stepVARCHAR,-- 工序actionVARCHAR,-- 开工/完工/暂停operatorVARCHAR,ts TIMESTAMPTZDEFAULTnow());-- 用料 / 外协:都挂到工单上,成本自动归集CREATETABLEmaterial_usage(work_order_id UUIDREFERENCESwork_order(id),itemVARCHAR,qtyNUMERIC);CREATETABLEoutsource(work_order_id UUIDREFERENCESwork_order(id),vendorVARCHAR,amountNUMERIC);月底要算"每张工单赚没赚",不再是拼表,而是一句聚合:
SELECTw.order_no,SUM(m.qty)AS用料,SUM(r.operatorISNOTNULL)AS报工次数,SUM(o.amount)AS外协费用FROMwork_order wLEFTJOINmaterial_usage mONm.work_order_id=w.idLEFTJOINreport rONr.work_order_id=w.idLEFTJOINoutsource oONo.work_order_id=w.idGROUPBYw.order_no;这张表不是要贬低 Excel,而是把"同一条生产线,两种承载方式"摆清楚——系统做的核心一件事,是把主线接过来,让过程数据从第一张单就开始沉淀,而不是月底靠人回忆。
以摩杰斯 PMS5 这类面向 50 人以下机加工厂的 SaaS 为例(它不做 BOM 多级展开、也不做集团型复杂总账,那些小厂用不上):你已有的 Excel 不用扔,客户、物料、工段、设备按模板批量导入几分钟搬完;加工记录、成本统计随时能导出 Excel。变的不是文件,是"生产过程靠什么承载"。
六、给技术同学的三条实在建议
- 别在作坊期硬上重 ERP。十人以下、单少、变化慢,Excel 凑合够用,这时候上重型系统反而是负担。
- 盯三个信号换工具:工单过几十张、外协三五家、客户催货变频繁——中两个就该考虑把"生产过程"从表格挪出来。
- 系统承接的是"流",不是"文件"。基础数据导入、结果导出照常用 Excel,变的是主线不再靠表格硬扛,过程数据自动沉淀。
说到底,Excel 不是坏工具,它只是有适用阶段:快照式记录跟得上慢节奏,追不上快流动。帮手变拖累,不是表的错,是阶段过了。
常见问题
Q:Excel 用了这么多年,真就管不了生产吗?
分阶段看。十人以下、单少的作坊期,Excel 凑合够用;等工单过几十张、外协三五家、客户催货变频繁,版本乱、进度慢、汇总累三个毛病会一起犯。根子是 Excel 是静态快照、生产是动态流,阶段过了工具就该换。
Q:数据都在 Excel 里,迁过来要重录吗?
基础数据不用。客户、物料、工段、设备按模板批量导入几分钟搬完。散在表里的工时、领料记录只是提醒你:当初没得选只能事后补,系统从第一张工单起就自动归集,比事后补录靠谱。
Q:上了系统,是不是就不让用 Excel 了?
不是取代,是分工。加工记录、成本统计随时能导出 Excel,基础数据也支持导入。变的是"生产过程"不再靠表格硬扛。
Q:工人不会用智能手机报工怎么办?
报工就是扫工单码、点"开工 / 完工 / 暂停",三步不用打字。年纪大的工人用安卓相机扫也行,厂里配工业 PDA 扫码头更顺。真用不起来大半是流程没理顺,不是工人学不会。
Q:小厂上系统,会不会很重很难推?
前面说的那类系统就是为 50 人以下机加工厂做的,开箱即用,登录后有新手指引带着走主线。不搞大 ERP 那套流程审批,工人只用会扫码。