任务开始时间和完成时间
译自http://msdn.microsoft.com/en-us/library/bb648778.aspx
在Project的生命周期中,Project 2007使用复杂的计划引擎排定计划,引擎会自动计算一些字段的值,而不是让你手动指定。使用PSI进行开发的开发人员往往为此感到困惑。本篇文章为在Project计划引擎下如何处理任务的开始时间和结束时间的做了一些很好的实践。
TASK_START_DATE和TASK_FINISH_DATE属性都属于上述计算域。在ProjectDataSet对象中修改它们将会抛出运行时异常,表明两个字段是只读的,Project计划引擎将自动计算它们的值,而不允许开发人员通过Project Data Set修改它们。
许多因素可以影响的一个任务的开始时间和完成时间。
- 为新建任务设定开始和结束时间
为新建任务设定开始和结束时间,并使用PSI保存后,在PWA查看,该任务的开始和结束时间不一定是在程序中设定的时间,而是和项目开始时间相同。这是因为计划引擎在排定日程时,发现没有影响该任务从项目开始时间开始的因素,所以自动修改了任务的开始时间,也重新计算了其完成时间。
- 当存在任务依赖关系的情况
任务依赖是指在两个任务的开始、完成时间上建立的联系。具有依赖关系的两个任务互称为前置任务和后置任务。使用LINK_TYPE属性可以为任务设定4种类型的依赖关系,分别是FinishFinish(FF)、FinishStart(FS)、StartFinish(SF)和StartStart(SS)。FF指后置任务不能完成直到前置任务完成。FS指后置任务不能开始,直到前置任务完成,这是默认的依赖关系。SF指后置任务不能完成,直到前置任务开始。SS指后置任务不能开始,直到前置任务开始。
当使用编程的方法修改任务之间的依赖关系后,计划引擎将重新排定任务的起至时间。
还可以通过修改依赖关系的LINK_LAG属性,设定间隔时间,从而影响到后置任务的开始时间。
- 使用任务约束(限制)
可以为任务的开始时间或结束时间设定限制条件,每个任务只能设定一个限制条件。如果对开始时间做了限定,则计划引擎将根据限制条件及其他信息自动计算完成时间,反之亦然。
可以通过任务的TASK_CONTSTAINT_TYPE属性为任务设定8种类型的限制条件,包括AsLateAsPossible(越晚越好)、AsSoonAsPossible(越早越好)、FinishNoEarlierThan(不早于...完成)、FinishNoLaterThan(不晚于...完成)、MustFinishOn(必须完成于...)、MustStartOn(必须开始于...)、StartNoEarlierThan(不早于...开始)、StartNoLaterThan(不晚于...开始)。
- 理解任务类型、人工驱动(Effort-driven Scheduling)和资源分配
任务日程排定同样被任务类型、人工驱动和资源分配所影响。Project 2007中,有3种任务类型,它们是固定工期、固定工时、固定单位(默认)。Project 2007计算任务的工期、工时和人力时使用以下公式:工期=工时/人力。任务类型决定了公式中的哪个部分是固定的,而其他两个是计算的。使用任务的TASK_TYPE属性为任务设定类型。
默认情况下,Project使用固定单位和人工驱动排定日程,这意味着,当为一个任务增加或减少资源时,完成任务所需的工期将缩短或加长,但是总工时不变。可以通过修改任务属性TASK_IS_EFFORT_DRIVEN,以设定任务是否为人工驱动,也可以通过设置项目的PROJ_OPT_NEW_TASKS_ARE_EFFORT_DRIVEN属性,设定新任务是否为EFFORT_DRIVEN。
需要特别注意的时,当使用PSI修改任务资源时,任务的工期并不会自动重新计算,只有在Project Professional 2007中打开计划并手动重新分配资源时,任务工期才会改变。
另外,修改一个已分配资源的在此任务上的工作时间百分比,也会影响到任务的工期。可以通过修改属性ASSN_UNITS来设定改值。
- 日历对日程的影响
日历的例外情况同样影响着任务的日程排定,项目日历、任务日历和资源日历都会影响到任务的开始和完成时间。
项目日历、任务日历、资源日历都是从标准日历这个模板派生出来的。标准日历定义了企业的标准工作时间和非工作时间。Project 2007自带的标准日历就定义了从周一到周五、每天的8:00到17:00、除去中午午餐时间作为工作时间。
Project 2007默认提供了3个标准日历,但是根据企业实际的配置,你不一定有权限访问这些日历。
项目日历定义了一个项目的工作和非工作日期和时间,作为项目下任务的默认日历。Project 2007使用项目日历去排定没有资源分配的任务的日程,或者类型为固定工期的任务的日程。可以通过指定CAL_UID属性的值,为项目指定标准日历。
任务默认使用项目日历,但是可以根据需要为其指定自己的日历。标准日历和任务通过TASK_CAL_UID属性建立关系,但是该属性是只读的,不能通过它为任务指定日历,需要在Project Professional 2007中进行操作。
资源日历为一个或一组资源定义了工作和非工作时间。可以通过设置TASK_IGNORES_RES_CAL属性让任务忽略资源日历。
Project计划引擎非常复杂,可影响任务开始完成时间的因素很多,以上只是常见的一部分。在Project Professional 2007中,如果想要了解任务排定原因,可以打开菜单里的项目->任务驱动因素来查看。