Zum Hauptinhalt springen

Automatische Terminplanung

Info

Diese Funktionalität ist nur in der PRO-Edition verfügbar.

Die Bibliothek bietet die Erweiterung auto_scheduling, die Gantt die Fähigkeit gibt, Aufgaben automatisch basierend auf den Relationen zwischen ihnen zu planen.

auto_scheduling

Stellen Sie sich zum Beispiel vor, Sie haben zwei Aufgaben, die durch eine Abhängigkeit verbunden sind und die zweite Aufgabe beginnt, sobald die erste endet, und Sie müssen den Zeitplan der ersten Aufgabe durch Verschieben auf ein neues Datum ändern.

Die automatische Terminplanung aktualisiert das Startdatum der zweiten Aufgabe jedes Mal in Abhängigkeit vom Enddatum der ersten Aufgabe, wenn dieses sich ändert. Diese Funktion ermöglicht es Ihnen, den Projektzeitplan zu erzeugen und zu pflegen, indem Sie Beziehungen zwischen Aufgaben festlegen, ohne die Termine jeder Aufgabe manuell festlegen zu müssen.

Verwendung

Um die Auto Scheduling-Funktionalität zu verwenden, sollten Sie das auto_scheduling Plugin mit der gantt.plugins Methode aktivieren:

gantt.plugins({
auto_scheduling: true
});

Und setzen Sie die enabled-Eigenschaft der auto_scheduling-Konfiguration auf true:

gantt.config.auto_scheduling = {
enabled: true
};

Auto Scheduling extension

Wenn Auto Scheduling aktiviert ist, können einzelne Aufgaben weiterhin manuell geplant werden.

Forward/backward planning

Strategien der Projektplanung

Es gibt zwei Strategien der Planung von Aufgaben innerhalb eines Projekts: Vorwärtsplanung und Rückwärtsplanung. Sie werden durch Kombinationen von Konfigurationseinstellungen definiert:

  • gantt.config.auto_scheduling.schedule_from_end - (boolean) definiert den Typ der Planungsstrategie
  • project_start - (Date) das Startdatum eines Projekts; wird standardmäßig als Startdatum der Aufgaben verwendet, falls Vorwärtsplanung angewendet wird, null standardmäßig
  • project_end - (Date) das Enddatum eines Projekts; wird standardmäßig als Defaultzeit der Aufgaben verwendet, falls Rückwärtsplanung verwendet wird, null standardmäßig

Vorwärtsplanung

Die Vorwärtsplanung der Aufgaben wird standardmäßig verwendet, d. h. gantt.config.auto_scheduling.schedule_from_end ist auf false gesetzt.

// forward planning of tasks is used
gantt.config.auto_scheduling = {
enabled: true,
schedule_from_end: false
};

In diesem Fall wird die Planung der Aufgaben ab dem Startdatum oder vom Datum der frühesten Aufgabe umgesetzt. Aufgaben werden so früh wie möglich geplant, sofern keine anderen Einschränkungen auf sie angewendet werden.

Das Startdatum des Projekts kann optional über die gantt.config.project_start-Konfiguration festgelegt werden:

gantt.config.project_start = new Date(2025, 2, 1);

Auto-Schedule From Project Start & Constraints

Rückwärtsplanung

Es ist auch möglich, Aufgaben vom Ende des Projekts aus zu planen, d. h. Rückwärtsplanung anzuwenden. Dazu müssen Sie die Eigenschaft gantt.config.auto_scheduling.schedule_from_end auf true setzen und das Enddatum des Projekts über die Konfigurationsoption gantt.config.project_end angeben:

gantt.config.project_end = new Date(2025, 10, 1);
gantt.config.auto_scheduling = {
enabled: true,
schedule_from_end: true
};

In diesem Fall werden Aufgaben so spät wie möglich geplant. Die letzte Aufgabe sollte am Enddatum des Projekts enden.

Auto-Schedule From Project End (backward)

Zeitbeschränkungen für Aufgaben

dhtmlxGantt bietet die Möglichkeit, zusätzliche Zeitbeschränkungen für Aufgaben festzulegen.

Hinweis

Zeitbeschränkungen gelten nur für Aufgaben und Meilensteine. Projekte sind davon nicht betroffen.

Festlegen von Beschränkungen über Lightbox

Sie können Beschränkungen für eine Aufgabe über die Constraint-Steuerung in der Lightbox der Aufgabe festlegen.

Inbuilt datepicker for constraints

gantt.config.lightbox.sections = [
{ name: "description", height: 38, map_to: "text", type: "textarea", focus: true},
{ name: "constraint", type: "constraint" }, /*!*/
{ name: "time", type: "duration", map_to: "auto" }
];

Festlegen von Beschränkungen über Inline-Editoren

Es ist auch möglich, getrennte Spalten für den Typ der Beschränkung und dessen Datum im Raster zu spezifizieren und Inline-Editoren zu verwenden, um Beschränkungen für Aufgaben festzulegen.

Constraints columns

Verwenden Sie entsprechend die Spaltennamen constraint_type und constraint_date.

const constraintTypeEditor = {
type: "select", map_to: "constraint_type", options: [
{ key: "asap", label: gantt.locale.labels.asap },
{ key: "alap", label: gantt.locale.labels.alap },
{ key: "snet", label: gantt.locale.labels.snet },
// more options
]
};

const constraintDateEditor = {
type: "date",
map_to: "constraint_date",
min: new Date(2025, 0, 1),
max: new Date(2026, 0, 1)
};

gantt.config.columns = [
{ // vorherige Spalte},
{
name: "constraint_type", align: "center", width: 100,
template: task => gantt.locale.labels[gantt.getConstraintType(task)],
resize: true, editor: constraintTypeEditor
},
{
name: "constraint_date", align: "center", width: 120, template: (task) => {
// template logic
},
resize: true, editor: constraintDateEditor
},
{ name: "add", width: 44 }
];

Auto-Schedule From Project Start & Constraints

Arten von Beschränkungen

Es gibt mehrere Arten von Zeitbeschränkungen:

  1. So früh wie möglich - Wenn diese Beschränkung einer unabhängigen Aufgabe zugeordnet ist und der strikte Modus aktiviert ist, beginnt die Aufgabe zur gleichen Zeit wie das Projekt. Falls der strikte-Modus deaktiviert ist, beginnt die Aufgabe am angegebenen Datum.

Wenn diese Beschränkung einer abhängigen Aufgabe zugeordnet ist, beginnt die Aufgabe so früh wie möglich, sobald ihre Vorgängeraufgaben enden.

  1. So spät wie möglich - Wenn diese Beschränkung einer unabhängigen Aufgabe zugeordnet ist, endet die Aufgabe zur gleichen Zeit wie das Projekt. Wenn diese Beschränkung einer abhängigen Aufgabe zugeordnet ist, endet die Aufgabe mit dem Start ihrer unmittelbaren Nachfolgeraufgabe.

Die übrigen Arten von Beschränkungen betreffen Aufgaben unabhängig von ihrem Typ (abhängig oder unabhängig):

  1. Beginn nicht früher als - Die Aufgabe sollte am angegebenen Datum oder danach beginnen.

  2. Beginn spätestens - Die Aufgabe sollte am angegebenen Datum oder davor beginnen.

  3. Ende nicht früher als - Die Aufgabe sollte am angegebenen Datum oder danach enden.

  4. Ende spätestens - Die Aufgabe sollte am angegebenen Datum oder davor enden.

  5. Muss beginnen bei - Die Aufgabe sollte genau am angegebenen Datum beginnen.

  6. Muss enden bei - Die Aufgabe sollte genau am angegebenen Datum enden.

Hinweis

Mit unabhängigen Aufgaben hier meinen wir Aufgaben, die keine Nachfolger oder Vorgänger haben. Mit anderen Worten, dies sind Aufgaben, die keine Verbindungen/Relationen zu anderen Aufgaben oder deren Eltern haben.

Festlegen von Verzögerungen (Lag) und Vorläufen (Lead) zwischen Aufgaben

Lag und Lead sind spezielle Werte, die verwendet werden, um komplexe Beziehungen zwischen Aufgaben zu erstellen.

Lag ist eine Verzögerung zwischen Aufgaben, die durch eine Abhängigkeit verbunden sind. Lead ist eine Überlappung zwischen Aufgaben, die durch eine Abhängigkeit verbunden sind.

Es kann zwei Typen von Nachfolgeraufgaben geben:

  • eine Aufgabe, die vor dem Ende ihrer Vorgängeraufgabe starten kann (Aufgabe B beginnt vor dem Ende von Aufgabe A)

Beispiel: Wenn wir dem Abhängigkeitslink einen Lead von 1 Tag zuweisen, beginnt Aufgabe B einen Tag bevor Aufgabe A endet;

  • eine Aufgabe, die erst nach einer Verzögerung starten kann, die dem Ende ihrer Vorgängeraufgabe folgt (Aufgabe B startet zu einem späteren Zeitpunkt nach dem Ende von Aufgabe A)

Beispiel: Wenn wir dem Abhängigkeitslink eine Lag von 1 Tag zuweisen, beginnt Aufgabe B einen Tag nach dem Ende von Aufgabe A.

Lag- und Lead-Werte werden in der zusätzlichen Eigenschaft des Link-Objekts festgelegt - link.lag:

  • lag - beliebiger positiver ganzzahliger Wert,
  • lead - negativer Wert des Lag.

Standardmäßig gilt, dass der Lag-Wert jeder Abhängigkeitsverbindung auf 0 gesetzt ist.

Gantt bietet keine integrierte UI zum Bearbeiten von Lag oder anderen Eigenschaften des Links. Sie können dies jedoch manuell implementieren, indem Sie den Empfehlungen im verwandten Kapitel folgen.

Zugehöriges Beispiel Edit-lag Popup

Deaktivieren von Auto Scheduling für bestimmte Aufgaben

Um Auto Scheduling für eine bestimmte Aufgabe zu deaktivieren und manuell zu planen, setzen Sie die auto_scheduling-Eigenschaft des Aufgabenobjekts auf false:

const task = gantt.getTask(id);
task.auto_scheduling = false;

Sie können Auto Scheduling einer bestimmten Aufgabe auch verhindern, indem Sie den onBeforeTaskAutoSchedule Handler verwenden:

gantt.attachEvent("onBeforeTaskAutoSchedule", (task, start, link, predecessor) => {
return !task.completed;
});

Planung abgeschlossener Aufgaben

Standardmäßig gibt es keinen Unterschied darin, wie der Auto Scheduling-Algorithmus erledigte Aufgaben (Aufgaben mit einem Fortschritt von 1) und unvollständige Aufgaben verarbeitet.

Optional können Sie die auto_scheduling.use_progress Konfiguration aktivieren, um dieses Verhalten zu ändern:

gantt.config.auto_scheduling = {
enabled: true,
use_progress: true
};

gantt.init("gantt_here");

Wenn die Konfiguration aktiviert ist, werden erledigte Aufgaben vom kritischen Pfad und vom Auto Scheduling ausgeschlossen.

Weitere Details finden Sie auf der API-Seite.

API-Übersicht

Die Liste verfügbarer Methoden und Eigenschaften:

Activation

Um Auto Scheduling im Gantt-Diagramm zu aktivieren, setzen Sie die enabled-Eigenschaft der auto_scheduling-Konfiguration auf true:

gantt.config.auto_scheduling = {
enabled: true
};

Strikter Modus

Standardmäßig werden Aufgaben nur neu geplant, wenn ein neues Datum die Beschränkung verletzt. Um Aufgaben stets zum frühestmöglichen Datum neu zu planen, verwenden Sie die Eigenschaft auto_scheduling.gap_behavior:

gantt.config.auto_scheduling = {
enabled: true,
apply_constraints: false,
gap_behavior: "compress"
};
Hinweis

Beachten Sie, dass in Versionen 6.1.0 - 7.1.3 die Konfiguration nur funktioniert, wenn die Option auto_scheduling_compatibility aktiviert ist.

Initiales Auto-Scheduling

Die Eigenschaft auto_scheduling.schedule_on_parse gibt an, ob gantt Auto Scheduling beim Laden der Daten durchführen soll. Sie ist standardmäßig auf true gesetzt:

gantt.config.auto_scheduling = {
enabled: true,
schedule_on_parse: true
};

Vererbung von Projektbeschränkungen

Die Eigenschaft auto_scheduling.project_constraint definiert, ob Aufgaben ohne den angegebenen Beschränkungstyp die Beschränkung von ihrem Elternprojekt erben sollen:

gantt.config.auto_scheduling = {
enabled: true,
project_constraint: true
};

Neuberechnung des Projekts

Um den Zeitplan des gesamten Projekts neu zu berechnen, verwenden Sie die Methode autoSchedule:

gantt.autoSchedule();

Wenn Sie den Zeitplan starting from einer bestimmten Aufgabe neu berechnen müssen, übergeben Sie die ID der Aufgabe als Argument an die autoSchedule Methode:

gantt.autoSchedule(taskId);

Überprüfung, ob eine Aufgabe ungeplant ist

Falls Sie prüfen müssen, ob eine Aufgabe ungeplant ist, verwenden Sie die Methode isUnscheduledTask mit dem Aufgabenobjekt als Argument:

const isUnscheduled = gantt.isUnscheduledTask(task);

Suche nach zirkulären Referenzen

Um alle zirkulären Referenzen im Diagramm zu finden, verwenden Sie die Methode findCycles:

gantt.findCycles();

Wenn Sie prüfen müssen, ob der Link zirkulär ist, können Sie die Methode isCircularLink anwenden:

const isCircular = gantt.isCircularLink(link);

Um die Liste der Aufgaben und Links zu erhalten, mit denen eine Aufgabe verbunden ist, verwenden Sie die Methode getConnectedGroup:

gantt.getConnectedGroup(18);
// => {links:["16", "17", "18"], tasks:[18, 17, 19, 20]}

Die Liste der Ereignisse

Die Liste der verfügbaren Ereignisse finden Sie unten:

// bevor das automatische Scheduling startet
gantt.attachEvent("onBeforeAutoSchedule", (taskId) => {
// beliebige benutzerdefinierte Logik hier
return true;
});

// nachdem das automatische Scheduling abgeschlossen ist
gantt.attachEvent("onAfterAutoSchedule", (taskId, updatedTasks) => {
// beliebige benutzerdefinierte Logik hier
});

// bevor eine bestimmte Aufgabe neu geplant wird
gantt.attachEvent("onBeforeTaskAutoSchedule", (task, start, link, predecessor) => {
// beliebige benutzerdefinierte Logik hier
return true;
});

// nachdem eine bestimmte Aufgabe neu geplant wurde
gantt.attachEvent("onAfterTaskAutoSchedule", (task, start, link, predecessor) => {
// beliebige benutzerdefinierte Logik hier
});

// wenn der zirkuläre Verweis erkannt wurde und automatisch geplant werden kann
gantt.attachEvent("onCircularLinkError", (link, group) => {
// beliebige benutzerdefinierte Logik hier
});

// wenn während des automatischen Planens zirkuläre Verknüpfungen gefunden wurden
gantt.attachEvent("onAutoScheduleCircularLink", (groups) => {
// beliebige benutzerdefinierte Logik hier
});

Versionskompatibilität

Wenn ein Benutzer das Datum einer Aufgabe durch Verschieben mit der Maus oder über die Lightbox ändert, erhält die Aufgabe automatisch eine der beiden Beschränkungstypen: entweder Beginn nicht früher als+%start date% oder Ende spätestens+%end date%, abhängig von der gewählten Planungsstrategie.

So wird eine Aufgabe nicht zum frühesten Datum geplant, falls das spätere Datum aus der UI gesetzt wird. Das kann für nicht vorbereitete Benutzer verwirrend sein, insbesondere da Beschränkungen standardmäßig nicht im Diagramm angezeigt werden.

Ab v9.1 können Sie das Anzeigen von Beschränkungen über die Eigenschaft auto_scheduling.show_constraints aktivieren. Ältere Versionen erfordern die Verwendung der addTasklayer-Methode, um Beschränkungen dem Diagramm hinzuzufügen.

Auto-Schedule From Project Start & Constraints

Dieses Verhalten unterscheidet sich von der Auto Scheduling-Logik von Gantt vor v6.1 und gilt als korrekt, da es dieselbe Funktionsweise der automatischen Planung wie MS Project hat.

Wenn das nicht das ist, was Sie möchten, können Sie zur Pre-6.1-Auto Scheduling zurückkehren, indem Sie Beschränkungen wie folgt deaktivieren:

gantt.config.auto_scheduling = {
enabled: true,
apply_constraints: false
};

Verwandte API

Need help?
Got a question about the documentation? Reach out to our technical support team for help and guidance. For custom component solutions, visit the Services page.