Работа с задачами
Иногда невозможно выполнить задачу в запланированные сроки, и её нужно разделить на две или более частей. Microsoft Project поддерживает разделение задач, а Aspose.Tasks for .NET предоставляет ту же функциональность программно.
Разделение задач
Свойство SplitParts , предоставляемое классом Task используется для определения частей разбиения задачи, тогда как SplitTask , предоставляемый классом ResourceAssignment используется для разделения одной задачи на несколько частей. SplitParts возвращает коллекцию частей разбиения, тогда как метод SplitTask принимает даты начала, даты окончания и аргументы календаря для разделения задачи.
Разделение и просмотр задач в Microsoft Project
В Microsoft Project вы можете разделить задачу следующим образом:
- Выберите длинную задачу, которую вы хотите разделить.
- На Task вкладке, в Schedule группе, нажмите Split Task.
- Нажмите в том месте на полосе задачи, где вы хотите выполнить разделение.
Разделённые задачи отображаются в Gantt Chart представлении и связаны пунктирной линией.
Пример: Создание и разделение задачи
Следующий пример показывает, как создать проект, добавить задачу, назначить ресурс и программно разделить задачу:
1// Create new project
2Project splitTaskProject = new Project();
3
4// Get a standard calendar
5Calendar calendar = splitTaskProject.Get(Prj.Calendar);
6
7// Set project's calendar settings
8splitTaskProject.Set(Prj.StartDate, new DateTime(2000, 3, 15, 8, 0, 0));
9splitTaskProject.Set(Prj.FinishDate, new DateTime(2000, 4, 21, 17, 0, 0));
10
11// Add a new task to root task
12Task rootTask = splitTaskProject.RootTask;
13rootTask.Set(Tsk.Name, "Root");
14Task taskToSplit = rootTask.Children.Add("Task1");
15taskToSplit.Set(Tsk.Duration, splitTaskProject.GetDuration(3));
16
17// Create a new resource assignment and generate timephased data
18ResourceAssignment splitResourceAssignment = splitTaskProject.ResourceAssignments.Add(taskToSplit, null);
19splitResourceAssignment.TimephasedDataFromTaskDuration(calendar);
20
21// Split the task into 3 parts.
22// Provide start date and finish date arguments to SplitTask method which will be used for split
23splitResourceAssignment.SplitTask(new DateTime(2000, 3, 16, 8, 0, 0), new DateTime(2000, 3, 16, 17, 0, 0), calendar);
24splitResourceAssignment.SplitTask(new DateTime(2000, 3, 18, 8, 0, 0), new DateTime(2000, 3, 18, 17, 0, 0), calendar);
25splitResourceAssignment.Set(Asn.WorkContour, WorkContourType.Contoured);
26
27splitTaskProject.Save("CreateSplitTasks_out.xml", SaveFileFormat.XML);
Пример: Просмотр разделённых задач
Следующий пример показывает, как определить разделённые задачи в проекте и вывести их сведения в консоль:
1Project project = new Project("New Project.mpp");
2
3// Access task
4Task splitTask = project.RootTask.Children.GetById(4);
5
6// Display split parts of task
7SplitPartCollection collection = splitTask.SplitParts;
8foreach (SplitPart splitPart in collection)
9{
10 Console.WriteLine("Index: " + splitPart.Index + " Start: " + splitPart.Start + " Finish: " + splitPart.Finish);
11}
Ключевые замечания
- Разделение задач помогает смоделировать реальные перерывы в графиках проекта.
- Метод
SplitTask
не удаляет работу — он перераспределяет существующую работу по отдельным интервалам. - Свойство
SplitParts
позволяет разработчикам анализировать и обрабатывать каждый сегмент отдельно. - Работает одинаково с MPP и XML форматами проекта.
Часто задаваемые вопросы
В: Может ли задача иметь более двух разделений?
- Да. Задача может быть разделена на несколько сегментов.
В: Влияет ли разбиение на длительность задачи?
- Общая продолжительность может изменяться в зависимости от расположения интервалов разбиения, но общий объём работы остаётся неизменным.
В: Можно ли снова объединить разделённые задачи?
- В Microsoft Project вы можете вручную отрегулировать полосы, чтобы удалить разделения. В Aspose.Tasks это можно сделать, сбросив назначения задач или создав задачу заново.
В: Поддерживается ли эта функция для повторяющихся задач?
- Нет. Разделение предназначено для обычных задач, а не для определений повторяющихся задач.