已经在Project中将星期六、星期天设置成了工作时间,某个任务的工期是1个月。于是他在工期里面输入了1 mon或者1 month,如下图中的任务“公开招标程序”,工期显示为1月工时。但是问题来了,这个任务的完成时间并没有按照1个月来计算,而只计算了20天(从2019年1月1日到2019年1月20日),既然是1个月工期,为什么完成时间不是2019年1月31日呢?
?
图1
我曾讲过,Project在进行进度计算时,不是按照工期的天数或者月数来计算完成时间的,而是先将工期折算成小时数,再根据对应的小时数计算完成时间。
那么Project是怎么把工期折算成小时数的呢?是根据【选项】中设置的每日工时、每周工时、每月工作日来计算的。
?
图2
如上图所示,默认情况下,每日工时是8个小时,什么意思呢?就是说,当我们在工期列中输入1个工作日时,它是按照8个小时来计算进度的。
默认情况下,【选项】中每周工时为40,也就是说,当我们在工期列中输入1w(或1week)时,它是按照40个小时来计算进度的。
默认情况下,【选项】中每月工作日为20,那么,当我们在工期列中输入1mon(或1month)时,它会不会按照20个工作日来计算呢?这个表述也不准确,实际上Project还是要将工期折算成小时数,也就说,它将按照20*8=160个小时(每月20个工作日、每日8个小时)来计算进度。
正如图1中的任务“公开招标程序”,工期输入的是1月工时,它会按照160个小时来计算完成时间,所以最终算出完成时间是2019年1月20日。注意,前提是这位同学已经将周六、周日设置成了工作时间。
同理,假如给某个任务的工期输入1w(或者1week),它将显示为“1周工时”,在进度计算时,将按照40个小时来计算进度。如果日历中默认的工作时间(上午8:00-12:00、下午13:00-17:00)没改的话,40个小时就相当于是5个工作日。所以,尽管你已经将周六周日设置成了工作时间,但是如果你输入的工期是1w(或者1week),Project还是按照5个工作日来计算完成时间。
总结一下,Project在进行进度计算时,不是根据工期的天数或者周数或者月数来计算完成时间,而是根据工期对应的小时数来计算的。工期对应的小时数则取决于【选项】中的设置。当然,【选项】中的设置也是可以改的,但改之前,你要明白Project进度计算的基本原理,否则可能越改越乱。
我上面解释的都是基于在工期列中输入1mon(或者1month)来讲的,假如你在工期列中输入中文“1月”,如下图所示,那它的意思又和你想的不一样了,为什么呢?因为工期列中输入“1月”代表30个自然天,它完全不管你日历是如何设置的,就是按照30个自然天(每天24个小时)来计算进度。
?
图3
但问题是,这样输入工期的话,你设置的日历还有什么用?
而且,如果同时使用资源的情况下,问题就更大了。比如我们随便给任务A分配一个资源“PM”,然后再切换到【任务分配状况】视图,如下图所示。你会发现,它相当于每天分配24个小时,一共30个自然天,所以工时计算出来是720个小时。不管周末上不上班,它都直接给分配工时,所以日历就完全不起作用了。有同学说,为什么第一天是16个小时,后面每天却是24小时呢?因为第一天的开始时间是早上8:00,这一天只剩16个小时了,而第二天却是完整的一天24个小时。
?
图4
总结一下,假如你在工期列中输入“1月”,Project将按照30个自然天来计算,完全不管日历是怎么设置的,而且如果这个任务有工时类资源的话,也是默认按照每天24个小时来分配工时的。
……