已收录

挑战用WPS灵犀开发APS排程系统(四):工作日历+节假日+工时开发

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

Lv.4 核心创作者

挑战用WPS灵犀开发APS排程系统(四):工作日历+节假日+工时

本文由 AI 辅助创作

工具:灵犀专业版

模型:DeepSeek V4 Flash

灵点消耗:多维表格消耗:47 写文章消耗:5

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

大家好,我是古老师。

前三篇我们一步步搭起了 APS 的骨架:先是产品资料和代码规则,再是销售订单,然后是产能负荷。接单前先比负荷,那真到排产的时候呢?订单哪天开工、哪天完工,靠什么算?

答案就一个:工作日历

排程系统里,日期就是地基。没有一张干净的工作日历,交期、排产、负荷全是空中楼阁。今天这篇,我把工作日历这块一次讲透——不止生成日期,还把节假日和工时一起解决掉。

一、为什么排程必须先有工作日历

工厂排产看的是"哪天能上线、哪天能出货",不是"第几天"。一张工作日历,就是给系统一把时间的尺子

在 APS 里,工作日历要扛三件事:

  • 排产的时间基准:交期倒排、工序衔接,都要落在具体日期上

  • 产能的可用口径:哪天上班、上几个小时,决定这一天能吃多少量

  • 节假日与放假的统一规则:法定假、工厂假,一张表说清

说白了,后面所有排程计算都要"查日历"。所以第一步,先把日历做扎实。

二、生成 366 天工作日历

多维表里没有现成的日历,我直接用 AirScript 脚本生成。逻辑不复杂,关键是定了一个全量模式

  • 以今天为起点,生成 T+365 天(含今天共 366 个自然日)

  • 表里已有数据 → 先清空再重建

  • 没数据 → 直接生成

  • 重复跑不叠加,永远是一套完整的 366 天

这里踩了个坑:AirScript 读空表的时候,返回的 records 是 null 而不是空数组,直接拼进去会把 null 塞进数据,后面取记录 ID 就报"reading id"。处理办法就是读之前先判空

还有个小坑:建表之后立刻再查表列表,可能查不到刚建的表(数据还没同步),要直接用建表接口的返回值拿表 ID,别二次查

三、日期拆成"年、月、日、周、星期"

日历只有日期还不够。排产经常要按周、按星期算,所以我把每个日期拆成五个字段,全是公式,一行不用填:

  • =YEAR([@日期])

  • =MONTH([@日期])

  • =DAY([@日期])

  • =WEEKNUM([@日期],2)(周一为一周第一天)

  • 星期 =WEEKDAY([@日期],2)(1-7,周一=1)

这样查"哪周""周几"就非常方便,366 条记录一次算完,全部有值。

四、节假日:先靠 AI,再建自己的数据库

光有星期还不够,工厂排产还得知道哪天放假。这里我走了两步。

第一步:用多维表 AI 自动识别节日

我用多维表的"自定义 AI 生成"字段,配一句规则:把日期转换成对应的中国或世界节日,没有就留空。AI 自动把 8/23 识别成世界体育记者日、9/3 中国人民抗日战争胜利纪念日……不用自己一条条录,省事。

第二步:建一本未来 10 年的节假日账

但 AI 是云端算的,有次数限制,而且农历节日它不一定准。放假这事,尤其是春节、端午、清明这些农历节日,得自己有一本"账"。

所以我建了一张「节假日数据库」,把未来 10 年(2026-2036)每一天都算好:日期、农历月日、节日、放假天数。

放假规则按工厂实际来定:

  • 元旦 1 天

  • 劳动节 2 天

  • 端午节 1 天

  • 清明节 1 天(按节气算)

  • 国庆节 3 天

  • 春节 12 天(腊月廿八到正月初八)

这一算就是 4000 多天,一次算好、分批写入,以后每年重跑一次就能续上。

第三步:跨表引用,数据只存一份

工作日历这边不用重录,直接建查找引用公式,从「节假日数据库」把放假天数和节日取过来:

  • 放假天数 =IFNA(XLOOKUP([@日期],节假日数据库![日期],节假日数据库![放假天数]),0)

  • 工厂节日 =IFNA(XLOOKUP([@日期],节假日数据库![日期],节假日数据库![节日]),"")

数据只存一份,两表联动,改一处全表生效。

五、工时:一张表把排产口径定死

有了放假天数,工时就好算了。我加了一个「工时」公式字段,规则就三条:

  • 放假天数大于 0(节假日)→ 工时 0

  • 周日 → 工时 0

  • 周三、周六 → 工时 8

  • 其余 → 工时 10

公式写出来就是嵌套判断。这里又踩了个坑:星期字段在公式里读出来是文本 "7",直接用 =7 匹配不上,得写成文本数字都兼容的判断。

算完一校验,366 行全对:国庆 3 天、春节、清明、端午、劳动、元旦全部归 0,周日 0、周三周六 8、其余 10。

📌

六、踩坑总结

  • 空表读记录要判空,否则 concat 会塞 null

  • 建表用返回值取 ID,别二次查表

  • 公式改完后结果有缓存,要重读再判断

  • 公式字段数字格式 API 改不了,用多维表 AI 一句话调成整数

最后说一句

以前做排程,日历都是手工排、放假靠人记,一到春节就乱套。现在一张工作日历 + 一本 10 年的节假日账 + 一个工时公式,把"时间"这个最基础的维度彻底打牢了。

接下来,排程引擎就能安心在日历上跑了。每一步都不难,但地基要打稳。想继续看的点个关注,我们下一篇见。


术语解释

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

AirScript:WPS 多维表格内置的脚本语言,能在表里直接跑批量操作,比如生成日历、批量写入。

全量模式:每次运行都先把旧数据清空再重建,保证结果是完整的一份,不会重复叠加。

XLOOKUP:跨表查找函数,按一个字段在另一张表里找对应的值。

农历/节气:春节、清明、端午这些按农历或节气定的节日,公历日期每年不固定,需要专门算。

公式字段:多维表里由公式自动计算的字段,源数据一变,结果自动刷新。


📌

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

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

广东省
浏览 205
1
5
分享
5 +1
2
1 +1
全部评论 2
 
云龙
能否分享给我们复用呢?我也有个问题,就是很多日程在手机上有基于微信内容的快速导入日历功能,但是手机的日历没法共享出来,装Outlook实际又是两套记录,能否直接打通手机日历
   广东省
举报
0
0
 
WPS-丁利杰
WPS-丁利杰

@金山办公

古老师厉害👍
   广东省
举报
0
0