挑战用WPS灵犀开发APS排程系统(十五):一单一胆,2段脚本跑出MRP内胆需求

Lv.4 核心创作者
大家好,我是古老师。
上一篇文章(十四)我们把内胆工艺一维表建好了——36 个内胆自制件、261 行工艺路线,工序、设备、模具全部数据链自洽。有读者在后台问:内胆工艺都有了,什么时候开始排程?
先别急。排内胆之前,还差最关键的一步:需求从哪来?
注塑车间好办,注塑任务是从装配排程拆出来的。但内胆不在装配排程的拆件范围内——它跟着订单走。今天这篇就解决这个问题:用销售订单当源头、物料清单当判断条件,两段脚本跑出 MRP 内胆需求。
一、为什么内胆要先跑MRP
先看整个工厂的数据流向:
装配车间:客户交期直接拉排产,产出月排程计划;
注塑车间:从月排程按物料清单展开注塑子件(外壳、上盖、底座……),再汇总、排程;
内胆车间:还没走到排程那一步,但注塑在催了——注塑排程要考虑内胆齐不齐套,装配更要。
所以内胆当前阶段的任务是:把每张销售订单需要多少个内胆、什么时间要,算清楚。这正是物料需求计划(MRP)干的事:不做排产优化,只回答"缺什么、缺多少、何时要"。
需求源头只有一个——销售订单 - 子表,150 行订单明细。判断条件也只有一个——BOM 明细表里车间等于 02 内胆的子件。
二、一单一胆:业务规则决定脚本结构
打开 BOM 明细表筛一下,所有内胆子件长这样:
子件代码 | 子件名称 | 用量 | 车间 |
2.02.001.004 | 铝合金内胆2L | 1 | 02内胆 |
2.02.002.006 | 铁合金内胆3L | 1 | 02内胆 |
2.02.003.001 | 不锈钢内胆1.2L | 1 | 02内胆 |
……BOM中在用内胆共 14 种SKU | 全部=1 |
注意「用量」这一列——所有产品的内胆用量都是 1:一个产品配一个内胆,不多不少。
这就是和注塑最大的区别:
业务规则简单,脚本结构就简单:拿到订单行的存货代码,去 BOM 里查它的内胆子件,需求数量 = 订单数量 × 用量 = 订单数量本身。
但是——这里有个我亲测翻过的坑,必须写出来。
三、口径陷阱:212 行变成 150 行
第一版脚本我用的是「月排程计划表」当源表,因为注塑任务当初就是这么展开的。跑完一看日志:212 行,需求总量 51983。
而销售订单 - 子表的订单数量合计是 35178。多出了 16805 个内胆——凭空冒出来的?
排查发现:月排程是「订单行 × 天」的一维排程结构,同一个订单行如果跨多天生产,每一行都带着这个订单的全部数量。实测有 47 个订单行被拆成了 2~4 天,每天各带一次全量数字,重复计算就这么来的。
修正方法很简单:不管源表进来多少行,先按「销售单号 + 行号」聚合回订单行——每个订单行只保留一条,日期取该订单最早的排产日。聚合完正好 150 个订单行、35178 个内胆需求,与销售订单精确对平。
最终版直接以销售订单为源,规则收敛成一句话:订单行 × BOM(车间=02内胆) = 内胆需求。
四、第一段脚本:内胆需求明细展开
脚本的完整流程:
读 BOM 明细表,筛选车间 = 02内胆 的子件,按成品代码建立映射(附编码前缀 2.02. 双保险兜底);
读销售订单 - 子表,每个订单行查映射生成一条内胆需求;
按 主键 = 销售单号+行号+日期+子件代码 去重,增量写入目标表——日常重跑只补新增订单行,不动旧数据。
关键配置区代码:
var CONFIG = {
orderTable: "销售订单 - 子表", // 需求源头
bomTable: "BOM明细表", // 判断依据
targetTable: "内胆车间生产任务明细表",
neidanWorkshop: "02内胆", // 判断条件
partCodePrefix: "2.02.", // 编码前缀兜底
dateField: "客户要求交期", // 需求时点
rebuildMode: false // false=增量 / true=清空重建
};运行日志:
明细表里有两个公式字段自动计算,不用脚本操心:
完工日期 = [@日期]-1 // 比交期提前1天完工
需求数量 = [@订单数量]*[@用量]校验结果四项全对平:150 行 / 总量 35178 / 主键零重复 / 公式结果 150÷150 全部正确。另外两个细节顺手核实了:BOM 里在用的内胆 SKU 有 14 种,但本次 150 张订单实际只覆盖到 12 种——没被下单的产品不产生需求,这正是按订单驱动和拍脑袋预估的区别。
五、第二段脚本:按子件加日期锁死主键汇总
有了明细,汇总水到渠成——完全复用注十三的思路:按「子件代码 + 完工日期」分组求和需求数量。
为什么要带日期做主键?只按子件汇总,你只能知道"铝合金内胆3L总共要多少个",没法回答"9月11日前要交多少个"。加了完工日期,同一种内胆会按天分行,后续排内胆工序时直接拿去分配工位和模具。
汇总策略用清空重建:每次运行先清空目标表再全量重算,保证和明细永远一致。这点和明细表相反——明细重跑怕动历史数据用增量,汇总是纯计算结果重建最干净。
运行日志:
150 行明细收拢成 55 组需求——12 种内胆 × 各个交期日。末尾的需求总量校验是双保险,对不上数马上就知道哪一段出问题。
最后说一句
回顾这个项目的节奏你会发现:注塑走的是「展开 → 汇总 → 排程」,内胆现在刚走完前两步。慢下来不是效率低,而是把需求口径钉死再排产能,顺序不能反。
这条链还能往回追——追溯到销售订单的原始交期,向前能推到内胆工艺路线上的每一道工序。一张多维表里从订单到工步全部可追溯,这就是中小工厂上APS的真正底气。
下篇预告:拿着这 55 组内胆需求,进内胆车间的产能评估。
术语解释
文章里出现的技术名词,一句话说清楚:
MRP(Material Requirements Planning,物料需求计划):根据订单和物料清单自动算出"要生产哪些零件、各需要多少、什么时间要"。好比做饭前先把菜单翻译成采购清单。
BOM(Bill of Materials,物料清单):一张成品由哪些零件组成、各用几个的清单表格。内胆在电饭煲的 BOM 里就是"一煲一胆"的那一行。
主键:用来唯一识别一条记录的组合信息,像人的身份证号。本篇主键是"销售单号+行号+日期+子件代码",四样拼一起不会撞车。
增量:只处理新增的数据,已经处理过的跳过。相当于打卡机只记今天没打过卡的员工。
清空重建:每次计算前先把旧结果全部删掉,重新算一遍写进去。好处是结果永远和数据源一致,不怕改数据后新旧混杂。
AirScript:WPS 多维表格内置的脚本语言,在表格「开发」功能里写代码批量处理数据,不用装任何软件。
古老师(古哥计划)|中小制造数字化专家|金山 KVP(金山办公最有价值专家)|金山多维表格应用场景专家|金山 WPS 社区优秀创作者
深耕中小制造业数字化落地,擅长用 WPS 多维表格 + AI 低代码方案,帮工厂快速搭建进销存、生产计划、质量追溯等轻量化系统。不用复杂 IT,低成本落地,已服务数百家制造企业,实战经验丰富。
#多维表格 #工厂管理 #AI应用
本文由 AI 辅助创作
工具:灵犀专业版
模型:GLM-5.3-Flash
灵点消耗:210