Перенос задач проекта и назначений ресурсов
Эффективное управление проектами часто требует корректировки графиков, чтобы отразить изменения в реальной жизни. Задачи могут задерживаться, сроки могут сдвигаться, или ресурсы могут стать недоступны. Aspose.Tasks for .NET предоставляет мощные инструменты для переноса сроков всего проекта или отдельных задач, помогая менеджерам проектов поддерживать точность и актуальность графиков.
Перенос сроков проекта от даты начала или даты окончания
Эта функция позволяет разработчикам сдвинуть весь график проекта на основании новой даты начала или окончания. Например, если запуск проекта откладывается, вы можете легко переместить все задачи вперед. Аналогично, если срок сдачи корректируется, пересчет по дате окончания обеспечивает правильное согласование всех зависимых задач.
Мы можем пересчитать даты по дате окончания, установив дату окончания проекта и затем вызвав Project.Recalculate().
Пример кода: перенос сроков проекта по дате окончания
В следующих строках кода показано, как этого достичь с помощью C#.
1Project project = new Project("New Project.mpp");
2project.Set(Prj.ScheduleFromStart, false);
3project.Set(Prj.FinishDate, new DateTime(2020, 1, 1));
4
5// Now all tasks dates (Start, Finish, EarlyStart, EarlyFinish, LateStart, LateFinish) are calculated. To get the critical path we need to calculate slacks (can be invoked in separate thread, but only after calculation of all early/late dates)
6project.Recalculate();
7TaskCollection criticalPath = project.CriticalPath;
Пример кода: перенос сроков проекта по дате начала
В следующих строках кода показано, как этого достичь с помощью C#.
1Project project = new Project("New Project.mpp");
2project.Set(Prj.ScheduleFromStart, true);
3project.Set(Prj.StartDate, new DateTime(2014, 1, 1));
4
5// Now all tasks dates (Start, Finish, EarlyStart, EarlyFinish, LateStart, LateFinish) are calculated. To get the critical path we need to calculate slacks (can be invoked in separate thread, but only after calculation of all early/late dates)
6project.Recalculate();
7TaskCollection criticalPath = project.CriticalPath;
Обновление проекта и перенос незавершенной работы
Microsoft Project предоставляет возможность обновления и переноса работ на основе указанной даты. Это помогает определить работу, выполненную до указанной даты, а также перенести любую невыполненную работу с заданной даты. Aspose.Tasks Project API предоставляет ту же функциональность, открывая доступ к методам UpdateProjectWorkAsComplete и RescheduleUncompletedWorkToStartAfter. Эта тема содержит рабочий пример применения обоих этих методов в рамках одного сценария.
Обновление файлов проекта
В приведенном ниже примере показано, как обновить проект по указанной дате. Метод UpdateProjectWorkAsComplete метод отмечает всю работу как завершенную до указанной даты для всего проекта.
- Если логический входной параметр установлен в true, метод обновляет только те задачи до 100% выполнения, у которых даты окончания предшествуют указанной дате завершения.
- Если логический входной параметр установлен в false, метод рассчитывает значение процента выполнения на основе планового состояния и дат завершения.
- Если указан список задач, метод отмечает всю работу как завершенную до указанной даты для этого списка задач.
Это позволяет быстро согласовать фактический прогресс с плановым графиком и перенести незавершенную работу вперед без нарушения логики проекта.
1// Create a new project and set start date
2Project project = new Project();
3project.Set(Prj.StartDate, new DateTime(2014, 1, 27, 8, 0, 0));
4
5// Add new tasks
6Task task1 = project.RootTask.Children.Add("Task 1");
7Task task2 = project.RootTask.Children.Add("Task 2");
8task2.Set(Tsk.Duration, task2.ParentProject.GetDuration(16, TimeUnitType.Hour));
9Task task3 = project.RootTask.Children.Add("Task 3");
10task3.Set(Tsk.Duration, task2.ParentProject.GetDuration(24, TimeUnitType.Hour));
11Task task4 = project.RootTask.Children.Add("Task 4");
12task4.Set(Tsk.Duration, task2.ParentProject.GetDuration(16, TimeUnitType.Hour));
13Task task5 = project.RootTask.Children.Add("Task 5");
14task5.Set(Tsk.Duration, task2.ParentProject.GetDuration(16, TimeUnitType.Hour));
15
16// Add links between tasks
17TaskLink link12 = project.TaskLinks.Add(task1, task2, TaskLinkType.FinishToStart);
18TaskLink link23 = project.TaskLinks.Add(task2, task3, TaskLinkType.FinishToStart);
19// One day lag
20link23.LinkLag = 4800;
21TaskLink link34 = project.TaskLinks.Add(task3, task4, TaskLinkType.FinishToStart);
22TaskLink link45 = project.TaskLinks.Add(task4, task5, TaskLinkType.FinishToStart);
23
24// Add new tasks
25Task task6 = project.RootTask.Children.Add("Task 6");
26Task task7 = project.RootTask.Children.Add("Task 7");
27task7.Set(Tsk.Duration, task7.ParentProject.GetDuration(24, TimeUnitType.Hour));
28Task task8 = project.RootTask.Children.Add("Task 8");
29task8.Set(Tsk.Duration, task2.ParentProject.GetDuration(16, TimeUnitType.Hour));
30Task task9 = project.RootTask.Children.Add("Task 9");
31task9.Set(Tsk.Duration, task2.ParentProject.GetDuration(16, TimeUnitType.Hour));
32Task task10 = project.RootTask.Children.Add("Task 10");
33
34// Add links between tasks
35TaskLink link67 = project.TaskLinks.Add(task6, task7, TaskLinkType.FinishToStart);
36TaskLink link78 = project.TaskLinks.Add(task7, task8, TaskLinkType.FinishToStart);
37TaskLink link89 = project.TaskLinks.Add(task8, task9, TaskLinkType.FinishToStart);
38TaskLink link910 = project.TaskLinks.Add(task9, task10, TaskLinkType.FinishToStart);
39task6.Set(Tsk.IsManual, true);
40task7.Set(Tsk.IsManual, true);
41task8.Set(Tsk.IsManual, true);
42task9.Set(Tsk.IsManual, true);
43task10.Set(Tsk.IsManual, true);
44
45// Save project before and after updating work as completed
46project.Save("RescheduleUncompletedWork_not updated_out.xml", SaveFileFormat.XML);
47project.UpdateProjectWorkAsComplete(new DateTime(2014, 1, 28, 17, 0, 0), false);
48project.Save("RescheduleUncompletedWork_updated_out.xml", SaveFileFormat.XML);
49
50// Save project after rescheduling uncompleted work
51project.RescheduleUncompletedWorkToStartAfter(new DateTime(2014, 2, 7, 8, 0, 0));
52project.Save("RescheduleUncompletedWork_rescheduled_out.xml", SaveFileFormat.XML);
Перенос сроков — критически важная часть управления проектами, обеспечивающая реалистичность планов при изменении условий. С Aspose.Tasks for .NET вы можете бесшовно корректировать даты начала или окончания проекта, обновлять прогресс до определенного момента и переносить незавершенные задачи вперед. Эти возможности помогают поддерживать точность графиков, улучшать планирование ресурсов и информировать заинтересованные стороны о реальном состоянии проекта.