Перепланування завдань проєкту та призначень ресурсів
Ефективне управління проєктом часто вимагає коригування графіків, щоб відобразити реальні зміни. Завдання можуть затримуватися, строки можуть зміщуватися або ресурси можуть стати недоступними. 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 ви можете плавно коригувати дати початку або завершення проєкту, оновлювати прогрес до певної точки в часі та пересувати незавершені завдання вперед. Ці можливості допомагають підтримувати точні графіки, покращувати планування ресурсів і тримати зацікавлених осіб поінформованими про реальний стан проєкту.