已收录

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

古哥计划
古哥计划 Lv.4 核心创作者KVP

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:一个产品配一个内胆,不多不少。

这就是和注塑最大的区别

注塑任务展开:一个产品 → 拆出 7 个左右注塑件,一行变多行;内胆任务展开:一个产品 → 只有 1 条内胆,一行就是一行。

业务规则简单,脚本结构就简单:拿到订单行的存货代码,去 BOM 里查它的内胆子件,需求数量 = 订单数量 × 用量 = 订单数量本身

但是——这里有个我亲测翻过的坑,必须写出来。

三、口径陷阱:212 行变成 150 行

第一版脚本我用的是「月排程计划表」当源表,因为注塑任务当初就是这么展开的。跑完一看日志:212 行,需求总量 51983

而销售订单 - 子表的订单数量合计是 35178。多出了 16805 个内胆——凭空冒出来的?

排查发现:月排程是「订单行 × 天」的一维排程结构,同一个订单行如果跨多天生产,每一行都带着这个订单的全部数量。实测有 47 个订单行被拆成了 2~4 天,每天各带一次全量数字,重复计算就这么来的。

💡 口诀:展开需求看订单,排产切分才看天。

修正方法很简单:不管源表进来多少行,先按「销售单号 + 行号」聚合回订单行——每个订单行只保留一条,日期取该订单最早的排产日。聚合完正好 150 个订单行、35178 个内胆需求,与销售订单精确对平。

最终版直接以销售订单为源,规则收敛成一句话:订单行 × BOM(车间=02内胆) = 内胆需求

四、第一段脚本:内胆需求明细展开

脚本的完整流程:

  1. 读 BOM 明细表,筛选车间 = 02内胆 的子件,按成品代码建立映射(附编码前缀 2.02. 双保险兜底);

  1. 读销售订单 - 子表,每个订单行查映射生成一条内胆需求

  1. 主键 = 销售单号+行号+日期+子件代码 去重,增量写入目标表——日常重跑只补新增订单行,不动旧数据。

关键配置区代码

var CONFIG = {
  orderTable: "销售订单 - 子表",      // 需求源头
  bomTable: "BOM明细表",              // 判断依据
  targetTable: "内胆车间生产任务明细表",
  neidanWorkshop: "02内胆",           // 判断条件
  partCodePrefix: "2.02.",            // 编码前缀兜底
  dateField: "客户要求交期",          // 需求时点
  rebuildMode: false                  // false=增量 / true=清空重建
};

运行日志:

BOM明细读取 3150 行含内胆的成品 150 个(车间字段命中 150,前缀兑底 0)销售订单读取 150 行无内胆或缺日期跳过 0 行本在内胆需求 150 行,需求总量 35178去重后待写入 150 条完成:本次写入内胆需求 150 条

明细表里有两个公式字段自动计算,不用脚本操心:

完工日期 = [@日期]-1        // 比交期提前1天完工
需求数量 = [@订单数量]*[@用量]

校验结果四项全对平150 行 / 总量 35178 / 主键零重复 / 公式结果 150÷150 全部正确。另外两个细节顺手核实了:BOM 里在用的内胆 SKU 有 14 种,但本次 150 张订单实际只覆盖到 12 种——没被下单的产品不产生需求,这正是按订单驱动和拍脑袋预估的区别。

五、第二段脚本:按子件加日期锁死主键汇总

有了明细,汇总水到渠成——完全复用注十三的思路:按「子件代码 + 完工日期」分组求和需求数量。

为什么要带日期做主键?只按子件汇总,你只能知道"铝合金内胆3L总共要多少个",没法回答"9月11日前要交多少个"。加了完工日期,同一种内胆会按天分行,后续排内胆工序时直接拿去分配工位和模具。

汇总策略用清空重建:每次运行先清空目标表再全量重算,保证和明细永远一致。这点和明细表相反——明细重跑怕动历史数据用增量,汇总是纯计算结果重建最干净。

运行日志:

源表【内胆车间生产任务明细表】读取到 150 条记录跳过无代码/无完工日期的记录 0 条分组去重后共 55 组写入【内胆车间生产任务汇总表】55 条汇总记录(清空重建完成)校验:需求总量 35178(应与内胆需求总量35178一致)

150 行明细收拢成 55 组需求——12 种内胆 × 各个交期日。末尾的需求总量校验是双保险,对不上数马上就知道哪一段出问题。

最后说一句

回顾这个项目的节奏你会发现:注塑走的是「展开 → 汇总 → 排程」,内胆现在刚走完前两步。慢下来不是效率低,而是把需求口径钉死再排产能,顺序不能反。

这条链还能往回追——追溯到销售订单的原始交期,向前能推到内胆工艺路线上的每一道工序。一张多维表里从订单到工步全部可追溯,这就是中小工厂上APS的真正底气

下篇预告:拿着这 55 组内胆需求,进内胆车间的产能评估。


术语解释

文章里出现的技术名词,一句话说清楚:

MRP(Material Requirements Planning,物料需求计划):根据订单和物料清单自动算出"要生产哪些零件、各需要多少、什么时间要"。好比做饭前先把菜单翻译成采购清单。

BOM(Bill of Materials,物料清单):一张成品由哪些零件组成、各用几个的清单表格。内胆在电饭煲的 BOM 里就是"一煲一胆"的那一行。

主键:用来唯一识别一条记录的组合信息,像人的身份证号。本篇主键是"销售单号+行号+日期+子件代码",四样拼一起不会撞车。

增量只处理新增的数据,已经处理过的跳过。相当于打卡机只记今天没打过卡的员工。

清空重建每次计算前先把旧结果全部删掉,重新算一遍写进去。好处是结果永远和数据源一致,不怕改数据后新旧混杂。

AirScriptWPS 多维表格内置的脚本语言,在表格「开发」功能里写代码批量处理数据,不用装任何软件。


古老师(古哥计划)|中小制造数字化专家|金山 KVP(金山办公最有价值专家)|金山多维表格应用场景专家|金山 WPS 社区优秀创作者

深耕中小制造业数字化落地,擅长用 WPS 多维表格 + AI 低代码方案,帮工厂快速搭建进销存、生产计划、质量追溯等轻量化系统。不用复杂 IT,低成本落地,已服务数百家制造企业,实战经验丰富。

#多维表格 #工厂管理 #AI应用

本文由 AI 辅助创作

工具:灵犀专业版

模型:GLM-5.3-Flash

灵点消耗:210

广东省
浏览 184
收藏
7
分享
7 +1
+1
全部评论