hs 发表于 2021-6-23 10:43:27

实现工厂自动排班功能

功能描述比如工厂现有3个班组(ABC),每个班组一天上班时间是12小时,分为早班和晚班,设置起始日期05-24的上班班组是B, 连续上班2天,那么手动排班的的顺序(BCABC....排列)如下:
      05-24   05-25   05-26   05-27   05-28   05-29       05-30       05-31      06-01   06-02
早      B            B             A            A            C             C            B            B             A             A
晚      C            C             B            B            A             A            C            C             B             B         。。。
这个通过云表怎么实现??

PS附加:
排班日期、工厂班组(A、B、C),上班班次(早、中、晚)、起始班组、连续上班天数都是不固定


Prex 发表于 2021-6-23 14:28:35

本帖最后由 liu_lijian1 于 2021-6-23 14:32 编辑

按照你的描述,主要还是找规律,你按规律去设定,就是简单的加减法了。
你在排班时,肯定也是排未来指定日期内的班次,那么指定起止日期来排班。
开始日期:设定好开始日期的白班班组和晚班班组(假如设定:AB),就可以直接去自动累加计算了。
根据间隔天数,去自动更新班组:间隔天数除以6的余数0和余数为1, 白晚班就是AB
                                                      间隔天数除以6的余数2和余数为3, 白晚班就是BC
                                                   间隔天数除以6的余数4和余数为5, 白晚班就是CA
如果你是3天换班,设定开始日期白班夜班班组为:BC
根据间隔天数,去自动更新班组:间隔天数除以9的余数0和余数为1, 白晚班就是BC
                                                      间隔天数除以9的余数2和余数为3, 白晚班就是CA
                                                   间隔天数除以9的余数4和余数为5, 白晚班就是AB

如果搞不定,私信我!

神奇的表格 发表于 2021-6-24 13:56:22

这个步骤可以借鉴分摊法

规律是 前两天相等 那第三天就会变 那就在基本信息表里做三个辅助数据项: 1天前 和 2天前和 当前是第几天的 “标记”
         因为日期可能没有规律 所以明细 别外做了了个 辅助数项 标记
         那给明细赋值时 可用 IF 去判断   第一两天就等于基本数据里的早班值 ,
         后面就做判断比如:第3天 就去判断 1天前 和2天前的值 如果不等情况 那就等于“1天前”的值 ,相等那就根据 “1天前“的值 去推出第3天用什么班




图2 和 图3
明细变了,首先给基本数据表里的 标记 (相当于第几天 )赋值 ,
                其次是给 1天前 和 2天前 赋值




4. 给晚班赋值



5. 得出排班





Prex 发表于 2021-6-24 18:56:15

本帖最后由 liu_lijian1 于 2021-6-24 19:44 编辑

思路都给你了,剩下的就是灵活去运用函数和公式去实现:
.
只设置了早晚班,早中晚的情况,自己去实现:

早班表达式:IF( 求余数((本表单.排班明细.间隔天数 + 本表单.换班周期*3) , 本表单.换班周期* 3)<本表单.换班周期 ,文本片段(本表单.上班班组,",",1) ,IF(求余数((本表单.排班明细.间隔天数 + 本表单.换班周期*3) , 本表单.换班周期* 3) >= 本表单.换班周期 *2,文本片段(本表单.上班班组,",",2) , 文本片段(本表单.上班班组,",",3)))


晚班表达式:IF( 求余数((本表单.排班明细.间隔天数 + 本表单.换班周期*3) , 本表单.换班周期* 3) <本表单.换班周期 ,文本片段(本表单.上班班组,",",2) ,IF(求余数((本表单.排班明细.间隔天数 + 本表单.换班周期*3) , 本表单.换班周期* 3)>= 本表单.换班周期 *2,文本片段(本表单.上班班组,",",3) , 文本片段(本表单.上班班组,",",1)))

求余数函数应用:求余数(被除数,除数)=余数      余数(6,9)=3
除数:就是一个轮班周期,等于换班天数*3   (找规律:2天一换班,周期就是6天;3天一换班,周期就是9天)
被除数:就是排班日期和开始日期的间隔天数,由于被除数为0(第一天和开始日期的间隔天是0)时,计算错误所以,我们可以把被除数加上一个周期天数就正常了。因此,被除数,等于   间隔天数+换班天数*3

以2天换班为例说明:
当余数<换班天数(1个周期中前面两天):
早班就取:班次中的第1班组(可以用:文本片段函数取值)
晚班就取:班次中的第2班组(可以用:文本片段函数取值)

当余数>=换班天数*2(1个周期中最后两天):
早班就取:班次中的第2班组(可以用:文本片段函数取值)
晚班就取:班次中的第3班组(可以用:文本片段函数取值)

剩下的就是(1个周期中中间两天):
早班就取:班次中的第3班组(可以用:文本片段函数取值)
晚班就取:班次中的第1班组(可以用:文本片段函数取值)
GIF动图当中还取错了,已经按上面思路调整后,是正确的了,没有再重新录GIF图片了


页: [1]
查看完整版本: 实现工厂自动排班功能