摘 要: 在經濟全球化的趨勢下跨國項目越來越多,而傳統的項目管理系統基本上都是采用公歷來計算的,并未考慮各國實際歷法的不同、節假日的不同,忽略這些因素就會產生計算偏差。筆者主要研究在項目管理系統中如何通過應用多日歷來消除項目管理中的偏差。
關鍵詞: 多日歷;項目管理;偏差
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年發表在《信息與電腦(理論版)》)