摘 要: 在经济全球化的趋势下跨国项目越来越多,而传统的项目管理系统基本上都是采用公历来计算的,并未考虑各国实际历法的不同、节假日的不同,忽略这些因素就会产生计算偏差。笔者主要研究在项目管理系统中如何通过应用多日历来消除项目管理中的偏差。
关键词: 多日历;项目管理;偏差
1、基本概念
公历:简称 GC,即一周 7 天,周一至周五为工作日,周六与周日为休息日。
开始时间:又称 SD,即某个项目或任务的开始时间。
结束时间:又称 ED,即某个项目或任务的结束时间。
工期:又称 Duration,即完成某个项目或任务所需的时间(只计算工作日)。
缓冲期:又称 Buffer Day,即一个任务结束到下一个任务开始之间的时间。
依赖关系:又称 Dependency,项目或任务之间存在四种依赖关系。
FS: Finish to Start,即前者完成之后后者才能开始。
FF: Finish to Finish,即前者完成之时后者也必须完成。
SS: Start to Start,即前者开始之时后者也必须开始。
SF: Start to Finish,即前者开始之时后者必须完成。
2、需求分析
假定如下场景:有一个项目 P1,它由两个子任务 T1 和T2 组成,两个子任务的工期均为 5 天,它们之间存在 FS 关系,即 T1 完成, T2 才能开始。为了简便起见,二者之间不存在缓冲期。 T1 的开始时间为 2017-11-06。
理想情况:项目 P1、子任务 T1 和 T2 均按照公历来计算,除周末外不考虑其他假日。
根据公历计算, 2017-11-06 为星期一是工作日,因此,T1 的开始时间定在这一天。因为 T1 的工期为 5 天,所以 T1的结束时间应为 2017-11-10(周五)。因为 T1 与 T2 为 FS 关系,且不存在缓冲期,所以 T2的开始时间应为 2017-11-13(周一)。因为 T2 的工期为 5 天,所以 T2 的结束时间应为 2017-11-17(周五)。 P1 开始时间应为 T1 的开始时间,结束时间应为T2 的结束时间,总工期为 10 天。具体如表 1 所示。
表 1 公历下的 P1、T1、T2 情况、
实际情况:项目 P1、子任务 T1 和 T2 分别在不同国家完成,项目 P1 所在国家采用的日历是 GC, T1 所在国家采用的日历称为 C1, T2 所在国家采用的日历称为 C2。
C1:一年 365 天,每周 7 天,周日到周四为工作日,五和周六为休息日, 2017-11-08(周三)为法定假日。
C2:一年 365 天,每周 7 天,周一到周五为工作日,周六和周日为休息日, 2017-11-14(周二)为法定假日, 2017-11-18(周六)调整为工作日。
根据 C1 计算, 2017-11-06 为星期一是工作日,因此, T1 的开始时间定在这一天。因为T1的工期为5天,且2017-11-08(周三)为法定假日,所以 T1 的结束时间应推迟一个工作日,为 2017-11-13(周一)。因为 T1 与 T2 为 FS 关系,且不存在缓冲期,理论上 T2 的开始时间应为 2017-11-14(周二)。但根据 C2 计算,因为 2017-11-14(周二)为法定假日,所以 T2 的开始时间应推迟一个工作日,为 2017-11-15(周三)。因为 T2 的工期为 5 天,且2017-11-18(周六)调整为工作日,所以 T2 的结束时间应提前一个工作日,为 2017-11-20(周一)。 P1 的开始时间应为 T1 的开始时间 2017-11-06(周一),结束时间应为 T2 的结束时间 2017-11-20(周一),总工期基于 GC 计算为 11 天。具体如表 2 所示。
对比表 1、表 2 可以看出,项目计划的理想情况与实际情况由于各国所采用的日历不同存在较大的偏差。
3、解决方案
不考虑各国日历的不同,而采用同一个日历(公历)来计算所有的项目及任务是造成项目偏差的根本原因。解决这一问题的方法是定制多个符合当地工作日和休息日以及假日安排的日历,对不同的项目及任务采用当地的日历进行计算。
日历要满足如下几个要求:(1)可依据项目和任务所在国家的不同,创建多个不同的日历;(2)日历内部可以自由定义工作日和休息日,以及法定假日及调休,项目或任务的计划将跳过休息日和法定假日,只计算工作日; (3)由于是改进已有项目管理系统,而不是进行全新的设计,因此,需要考虑对已有数据的兼容性。
首先定义一个日历名叫 Default Calendar,该日历代表公历GC。已有的项目和任务,由于之前一直采用公历进行计算,所以为了实现兼容性,都默认使用公历,这样不会破坏数据完整性。
创建一个日历 C1,设置周五和周六为休息日,设置2017-11-08 为休息日。
创建一个日历 C2,设置周六和周日为休息日,设置2017-11-14 为假日, 2017-11-18 为工作日。
项目管理系统的核心功能为项目的时间计划,它负责对项目中所有活动的顺序和工期进行安排、协调,并确定项目的总工期。因为项目一般都具有严格的时间要求,所以时间计划在项目管理中就显得非常重要。
计划算法又被称为 Schedule 算法。它分为两个阶段:重计划(Reschedule)和向上卷算(Roll Up)。当调整某个项目或子任务节点时,称为对其进行 Reschedule,简单来说依据的是 Schedule 公式:工期(Duration)= 结束时间(ED)-开始时间(SD) - 周末休息日。
当前节点 Reschedule 完成后,会对其所有相关子节点再进行 Reschedule,一直迭代下去直到所有相关的叶子节点(没有子节点的节点)全部进行完 Reschedule。然后从每个Reschedule 过的叶子节点,依据子节点的时间计划再对其父节点进行迭代调整,即 Roll Up,直到整个项目调整完毕。
引入多日历后,并不会对 Schedule 算法整体逻辑产生影响,依旧是 Reschedule 和 Roll Up 两个阶段。对于 Schedule公式,应加入对法定假日和调休工作日的运算。改进后的Schedule 公式如下:工期(Duration) = 结束时间(ED) - 开始时间(SD) - 周末休息日 - 法定假日 + 调休工作日。
4 、系统测试
如果 P1、 T1、 T2 都采用 Default Calendar,系统运行效果如图 1 所示。
图 1 相同日历下系统运行效果
对比图 1 与表 1 可看出,采用 Default Calendar,项目的时间计划与理想情况一致,而且不会破坏已有数据的完整性。
将 Default Calendar 设定为 P1 的日历,将 Calendar1 设置为 T1 的日历,将 Calendar2 设置为 T2 的日历。系统的Schedule 算法改进之后在计算时根据项目或子任务所采用的日历,读取其相应的配置信息,如果项目或任务周期中存在法定假日或者调休工作日,则计算 Duration 时需要相应减去法定假日或者加上调休工作日。系统运行效果如图 2所示。
图 2 不同日历下系统运行效果
对比图 2 与表 2 可看出,采用新的日历和新的 Schedule算法后,项目的时间计划与实际情况一致,避免了偏差。
5、结 语
本文主要介绍了采用多日历的方式来改进项目的时间计划算法,以解决时间偏差的问题。实践证明,采用新的日历和新的 Schedule 算法之后,有效避免了偏差。(本文于2018年发表在《信息与电脑(理论版)》)