图中红色阴影为休息时间,无填充区域为工作时间,时间流向如箭头
vba吧
全部回复
仅看楼主
level 8
Jason_CH_Zhou
楼主
图中红色阴影为休息时间,无填充区域为工作时间,时间流向如箭头。
怎么写程序把安排员工的工作时间wt?让wt始终落在图中无填充区域(工作时间),
wt=f(t),wt和t的关系怎样写程序?
2019年03月20日 03点03分
1
level 8
Jason_CH_Zhou
楼主
有点表达不清,就是我要生产一个产品,需要的时间是是t,怎么计算结束时间wt?
2019年03月20日 03点03分
2
level 8
baifandu2013
你这个问题很模糊,我也只能模糊的说一下个人观点:
1、建立一个有48个元素的2维数组,上班时间以半小时为时间间隔,全天就有48个可能的元素。第2维用来设定是上班还是休息,可以用1/0或true/false来初始化;
2、数组赋值可以程序直接赋值,但我建议从设定好的表格中读取,以后修改时间会比较方便;
3、除了上班起点时间,还有工作时长的因素。我认为在判断时要遵循 起点时间+工作时长<=此工作区间的最后截至时间,如果不符合条件应该是不能安排的,当然中午吃饭或夜宵需要另外考虑;
4、建立一个查询子函数,用来判断尝试安排的上班时间点在数组中是否符合条件;
我只能想到这么多。
2019年03月20日 03点03分
3
Jason_CH_Zhou
其实你已经说到点上了。 工作时长t 开始时间t0 结束时间点wt 求wt和t,t0的关系 开始和结束的时间点都放表格里,跑程序的时候读入数组,是正常做法,再建立一个子函数做判断,逻辑基本这样子。
不过写起来好复杂的
2019年03月20日 03点03分
baifandu2013
@Jason_CH_Zhou
这个不算难。除了起点时间用时间本身的大小作比较外,时长用自然数,比如工作8小时可以记作16,确定一个起点,加上时长,然后到对应的数组位置去查询下是否还在工作区间,因为48个数组元素可以看成是48个自然数,可以假设0点为1,8点30分上班起点就是17,然后+16,再去23位找数组
2019年03月20日 03点03分
baifandu2013
@Jason_CH_Zhou
上面说错了,是33位找数组比较。这只是个思路,还需要仔细考虑中午吃饭等问题,我建议午餐也视同工作时间
2019年03月20日 03点03分
Jason_CH_Zhou
@baifandu2013
不行的,因为这个产品结束,下个产品开始,都要避开休息时间
2019年03月20日 03点03分
level 8
Jason_CH_Zhou
楼主
没有什么捷径,只能把所有的可能列出来,数学归纳出通用等式,然后用if或者select case一个一个地写
2019年03月20日 10点03分
4
level 8
Jason_CH_Zhou
楼主
不知道大家有没有人对这个感兴趣,其实根本就不用管休息时间,把一天的工作时间看做是1,折算成工作时间的百分比去处理,立马简单好多。
楼上兄弟说的有道理,编程到深处还是主要看算法逻辑,深刻体会。终于完成了,效果不错。
2019年03月21日 13点03分
5
level 8
Jason_CH_Zhou
楼主
记得x年前我上家公司,基于sap和Lotus做的自动排产系统,块费时费力费财,我觉得也就这么几个功能模块,不考虑供应链上其他因素,VBA完全可以实现所有的功能。
2019年03月21日 13点03分
6
1