Reprogramación de tareas del proyecto y asignaciones de recursos
La gestión de proyectos eficiente a menudo requiere ajustar los cronogramas para reflejar cambios en el mundo real. Las tareas pueden retrasarse, las fechas límite pueden cambiar o los recursos pueden quedar indisponibles. Aspose.Tasks for .NET proporciona herramientas potentes para reprogramar proyectos completos o tareas individuales, ayudando a los gerentes de proyecto a mantener los cronogramas precisos y actualizados.
Reprogramar el proyecto desde la fecha de inicio o de finalización
Esta función permite a los desarrolladores desplazar todo el cronograma de un proyecto en función de una nueva fecha de inicio o de finalización. Por ejemplo, si el lanzamiento del proyecto se pospone, puede mover fácilmente todas las tareas hacia adelante. De manera similar, si se ajusta la fecha límite, recalcular desde la fecha de finalización garantiza que todas las tareas dependientes se alineen correctamente.
Podemos recalcular las fechas a partir de la fecha de finalización estableciendo la fecha de finalización del proyecto y luego invocando Project.Recalculate().
Ejemplo de código: Reprogramación de un proyecto a partir de la fecha de finalización
Las siguientes líneas de código muestran cómo lograr esto usando 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;
Ejemplo de código: Reprogramación de un proyecto a partir de la fecha de inicio
Las siguientes líneas de código muestran cómo lograr esto usando 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;
Actualizar el proyecto y reprogramar el trabajo incompleto
Microsoft Project proporciona la capacidad de actualizar y reprogramar el trabajo hasta una fecha determinada. Esto ayuda a identificar el trabajo completado hasta la fecha especificada, así como a reprogramar cualquier trabajo no completado desde una fecha determinada. Aspose.Tasks Project API proporciona la misma funcionalidad exponiendo UpdateProjectWorkAsComplete y RescheduleUncompletedWorkToStartAfter métodos. Este tema proporciona un ejemplo práctico de ambos métodos como un único caso de uso.
Actualizar archivos del proyecto
El ejemplo siguiente demuestra cómo actualizar un proyecto hasta una fecha especificada. El UpdateProjectWorkAsComplete método actualiza todo el trabajo como completado hasta una fecha especificada para todo el proyecto.
- Si el parámetro de entrada Boolean está establecido en true, el método actualiza únicamente aquellas tareas al 100% completadas que tengan fechas de finalización anteriores a la fecha especificada hasta la cual se considera completado.
- Si el parámetro de entrada Boolean está establecido en false, el método calcula un valor de porcentaje completado basado en el estado programado y las fechas hasta las cuales se considera completado.
- Si se especifica una lista de tareas, el método actualiza todo el trabajo como completado hasta la fecha especificada para la lista de tareas.
Esto permite alinear rápidamente el progreso real con el cronograma planificado y adelantar el trabajo incompleto sin romper la lógica del proyecto.
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);
La reprogramación es una parte crítica de la gestión de proyectos, que garantiza que los planes se mantengan realistas cuando las condiciones cambian. Con Aspose.Tasks for .NET, puede ajustar sin problemas las fechas de inicio o de finalización del proyecto, actualizar el progreso hasta un punto específico en el tiempo y adelantar las tareas no completadas. Estas capacidades ayudan a mantener cronogramas precisos, mejorar la planificación de recursos y mantener a las partes interesadas informadas sobre el estado real del proyecto.