Available only in PRO Edition
Эта функциональность доступна только в PRO-версии
Критический путь представляет собой последовательность задач, которые нельзя отложить без влияния на общий график проекта. Он также показывает минимальную возможную продолжительность для завершения проекта.
Задача становится критической, когда у нее отсутствует резерв времени, то есть любое ее задержание напрямую влияет на дату завершения проекта. Для подробного объяснения того, как рассчитывается критический путь, ознакомьтесь с разделом Логика критического пути. Резерв времени относится к количеству времени, на которое можно отложить задачу, не влияя на другие задачи или конечную дату проекта.
Чтобы начать использовать эту функцию, убедитесь, что она включена через метод gantt.plugins.
Для отображения критического пути на диаграмме Ганта установите свойство gantt.config.highlight_critical_path
в значение true
:
Настройка диаграммы Ганта для отображения критического пути
<!DOCTYPE html>
<html>
<head>
<script src="codebase/dhtmlxgantt.js"></script>
<link href="codebase/dhtmlxgantt.css" rel="stylesheet">
</head>
<body>
gantt.plugins({ critical_path: true }); gantt.config.highlight_critical_path = true;
//ваш код будет здесь
</body>
</html>
Как только это свойство активировано, dhtmlxGantt автоматически будет отслеживать статусы задач и обновлять критический путь соответствующим образом. Критическим задачам и связям будут назначены CSS-классы 'critical_task'
и 'critical_link'
соответственно.
При обновлении задачи dhtmlxGantt пересчитывает критический путь и перерисовывает данные. Этот процесс иногда может вызывать проблемы с производительностью. Чтобы решить эту проблему, компонент предоставляет методы для проверки конкретных задач или связей, позволяя более эффективно отображать критический путь.
Задача определяется как критическая при выполнении следующих условий:
1. Задача имеет самую позднюю дату окончания на гриде.
2. Задача связана с другой критической задачей без задержки между ними.
Задержка определяется параметром gantt.config.duration_unit. Например, если duration_unit установлено в 'day'
и продолжительность между задачами составляет несколько часов, Gantt применяет следующие правила округления:
Параметр задержки в объекте связи позволяет корректировать продолжительность между задачами. Например, установка lag в 1
делает задачу критической, когда разрыв между задачами составляет 1
.
Вот примеры с различными значениями link.lag:
const tasks = {
"data": [
...
],
"links": [
...
{ "id": 3, "source": 3, "target": 4, "lag": 0, "type": "0" },
]
}
const tasks = {
"data": [
...
],
"links": [
...
{ "id": 3, "source": 3, "target": 4, "lag": 1, "type": "0" },
]
}
const tasks = {
"data": [
...
],
"links": [
...
{ "id": 3, "source": 3, "target": 4, "lag": -1, "type": "0" },
]
}
3. Параметр gantt.config.project_end определен, и даты задачи превышают дату gantt.config.project_end.
Встроенная логика определения критического пути не может быть изменена. Однако вы можете настроить поведение критического пути.
Чтобы проверить, является ли задача критической, используйте метод gantt.isCriticalTask
:
gantt.config.highlight_critical_path = true; gantt.init("gantt_here");
gantt.parse(tasks);
gantt.isCriticalTask(gantt.getTask("task3"));// ->'true'
Чтобы проверить, является ли связь критической (соединяющей две критические задачи), используйте метод gantt.isCriticalLink
:
gantt.isCriticalLink(gantt.getLink("link1"));
Свободный резерв времени — это количество времени, на которое задачу можно расширить или переместить без влияния на следующую связанную задачу.
Этот показатель применим к задачам типа 'task' и 'milestone'. Для расчета свободного резерва времени используйте метод gantt.getFreeSlack
, который принимает объект задачи в качестве аргумента:
var task = gantt.getTask(7);
gantt.getFreeSlack(task);
Related sample: Show Slack time
Общий резерв времени — это временной буфер, который позволяет расширить или переместить задачу без задержки завершения проекта.
Общий резерв времени применим ко всем типам задач, включая проекты. Используйте метод gantt.getTotalSlack
, чтобы его получить:
var task = gantt.getTask(7);
gantt.getTotalSlack(task);
Related sample: Show Slack time
По умолчанию диаграмма Ганта применяет стандартное поведение для критического пути, включая автоматический пересчет и стиль по умолчанию.
Чтобы переключить видимость критического пути, используйте следующий подход:
var isEnabled = false
function updateCriticalPath(){
isEnabled = !isEnabled;
gantt.config.highlight_critical_path = isEnabled;
gantt.render();
}
Это может быть полезно при работе с большим количеством задач, так как пересчет критического пути может повлиять на производительность.
Чтобы вручную пересчитать критический путь и применить соответствующее оформление, используйте следующий подход:
gantt.templates.task_class = function(start, end, task){
if(gantt.isCriticalTask(task))
return "critical_task";
return "";
};
gantt.templates.link_class = function(link){
if(gantt.isCriticalLink(link))
return "critical_link";
return "";
};
var data = {
tasks: [
{ id: 1, text: "Office itinerancy", open:true, type:"project" },
{ id: 2, text: "Office facing", start_date: "21-07-2020",
duration: "20", parent: "1" },
{ id: 3, text: "Furniture installation", start_date: "21-07-2020",
duration: "5", parent: "1" },
{ id: 4, text: "The employee relocation", start_date: "28-07-2020",
duration: "15", parent: "1" },
{ id: 5, text: "Interior office", start_date: "28-07-2020",
duration: "15", parent: "1" }
],
links: [
{ id: "1", source: "2", target: "3", type: "0" },
{ id: "2", source: "3", target: "4", type: "0" },
{ id: "3", source: "4", target: "5", type: "0" }
]
};
gantt.init("gantt_here");
gantt.parse(data);
Вы также можете вручную выделять задачи и связи:
"gantt_critical_task"
в шаблоне task_class выделяет задачу как критическую."gantt_critical_link"
в шаблоне link_class выделяет связь как критическую.Связанный пример: Настройка критического пути для каждого проекта
Задержки и опережения между задачами на критическом пути можно настроить. Подробности доступны здесь.
По умолчанию алгоритм критического пути обрабатывает завершенные задачи (те, у которых значение прогресса равно 1) так же, как и незавершенные задачи.
Чтобы изменить это поведение, включите настройку gantt.config.auto_scheduling_use_progress
:
gantt.config.auto_scheduling_use_progress = true;
gantt.init("gantt_here");
С этой активной настройкой завершенные задачи исключаются из критического пути и автоматического планирования.
Дополнительные детали доступны на странице API.
К началу