Available only in PRO Edition

Automatische Planung

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

Die auto_scheduling-Erweiterung in der Bibliothek ermöglicht es Gantt, Aufgaben basierend auf ihren Abhängigkeiten automatisch zu arrangieren.

Zum Beispiel, wenn zwei Aufgaben verknüpft sind und die zweite Aufgabe beginnt, nachdem die erste endet, wird durch Ändern des Startdatums der ersten Aufgabe das Startdatum der zweiten automatisch angepasst. Diese Funktion vereinfacht die Projektplanung, indem Sie Aufgabenbeziehungen definieren können, ohne die Daten jeder Aufgabe manuell festzulegen.

Wie man es benutzt

Um die automatische Planung zu aktivieren, aktivieren Sie das auto_scheduling Plugin mit der gantt.plugins Methode:

gantt.plugins({
    auto_scheduling: true
});

Setzen Sie dann die auto_scheduling-Eigenschaft auf true:

gantt.config.auto_scheduling = true;

Related sample:  Auto Scheduling extension

Auch bei aktivierter automatischer Planung können Sie einzelne Aufgaben manuell planen.

Vorwärts-/Rückwärtsplanung

Planungsstrategien

Es gibt zwei Möglichkeiten, Aufgaben in einem Projekt zu planen: Vorwärts- und Rückwärtsplanung. Diese Strategien hängen von spezifischen Konfigurationseinstellungen ab:

  • schedule_from_end - (boolean) bestimmt die Planungsstrategie
  • project_start - (Datum) legt das Startdatum des Projekts fest; standardmäßig beginnen Aufgaben bei dieser Planung ab diesem Datum (Standard ist null)
  • project_end - (Datum) legt das Enddatum des Projekts fest; bei Rückwärtsplanung beginnen Aufgaben standardmäßig zu dieser Zeit (Standard ist null)

Vorwärtsplanung

Standardmäßig werden Aufgaben vorwärts geplant, was bedeutet, dass gantt.config.schedule_from_end auf false gesetzt ist.

// Vorwärtsplanung von Aufgaben wird verwendet
gantt.config.schedule_from_end = false;

Hier werden Aufgaben ab dem Startdatum oder dem frühesten Aufgabendatum geplant und so bald wie möglich geplant, es sei denn, es gelten andere Einschränkungen.

Sie können optional das Startdatum des Projekts mit gantt.config.project_start definieren:

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

Related sample:  Auto-Schedule From Project Start & Constraints

Rückwärtsplanung

Alternativ können Aufgaben rückwärts geplant werden, beginnend mit dem Enddatum des Projekts. Um dies zu aktivieren, setzen Sie gantt.config.schedule_from_end auf true und geben Sie das Projektenddatum mit gantt.config.project_end an:

gantt.config.schedule_from_end = true;
gantt.config.project_end = new Date(2019, 4, 1);

Mit dieser Konfiguration werden Aufgaben so spät wie möglich geplant, wobei die letzte Aufgabe am festgelegten Enddatum des Projekts endet.

Related sample:  Auto-Schedule From Project End (backward)

Zeitliche Einschränkungen für Aufgaben

Sie können spezifische zeitliche Einschränkungen zu Aufgaben in dhtmlxGantt hinzufügen.

Zeitliche Einschränkungen gelten nur für Aufgaben und Meilensteine. Projekte selbst sind nicht betroffen.

Hinzufügen von Einschränkungen im Lightbox

Sie können Aufgabenbeschränkungen mit der Constraint-Steuerung im Aufgaben-Lightbox definieren.

Integrierter Datumsauswähler für Einschränkungen

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" }
];

Hinzufügen von Einschränkungen über Inline-Editoren

Einschränkungen können auch mit spezifischen Spalten im Raster und Inline-Editoren gesetzt werden.

Einschränkungen Spalten

Verwenden Sie 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 },
        // weitere Optionen
    ]
};
 
const constraintDateEditor = {
    type: "date",
    map_to: "constraint_date",
    min: new Date(2019, 0, 1),
    max: new Date(2020, 0, 1)
};
 
gantt.config.columns = [
    { // vorherige Spalte},
    {
        name:"constraint_type", align:"center", width:100, template:function (task){
            return gantt.locale.labels[gantt.getConstraintType(task)];
        }, resize: true, editor: constraintTypeEditor
    },
    {
        name:"constraint_date", align:"center", width:120, template:function (task) {
        // Template-Logik
        },
        resize: true, editor: constraintDateEditor
    },
    { name: "add", width: 44 }
];

Related sample:  Auto-Schedule From Project Start & Constraints

Arten von Einschränkungen

Aufgaben können verschiedene zeitliche Einschränkungen haben:

1. So bald wie möglich - Unabhängige Aufgaben beginnen mit dem Projekt oder an einem festgelegten Datum, wenn der strikte Modus deaktiviert ist. Abhängige Aufgaben beginnen, nachdem Vorgänger beendet sind.

2. So spät wie möglich - Unabhängige Aufgaben enden mit dem Projekt. Abhängige Aufgaben enden, wenn Nachfolger beginnen.

Andere Einschränkungen gelten unabhängig vom Aufgabentyp:

3. Beginnt nicht früher als – Aufgabe beginnt an oder nach einem festgelegten Datum.

4. Beginnt nicht später als – Aufgabe beginnt an oder vor einem festgelegten Datum.

5. Fertigstellung nicht früher als – Aufgabe endet an oder nach einem festgelegten Datum.

6. Fertigstellung nicht später als – Aufgabe endet an oder vor einem festgelegten Datum.

7. Muss beginnen am – Aufgabe beginnt an einem bestimmten Datum.

8. Muss enden am – Aufgabe endet an einem bestimmten Datum.

Unabhängige Aufgaben beziehen sich auf solche ohne Nachfolger oder Vorgänger, was bedeutet, dass keine Links oder Beziehungen sie mit anderen Aufgaben oder ihren Eltern verbinden.

Festlegen von Verzögerungen und Vorlaufzeiten zwischen Aufgaben

Verzögerungen und Vorlaufzeiten helfen, komplexere Aufgabenbeziehungen zu definieren.

Verzögerungen führen eine Verzögerung zwischen verknüpften Aufgaben ein. Vorlaufzeiten ermöglichen es, dass Aufgaben sich überschneiden.

Beispiele:

  • Eine Aufgabe beginnt, bevor ihr Vorgänger endet (z. B. beginnt Aufgabe B einen Tag bevor Aufgabe A endet).
  • Eine Aufgabe beginnt nach einer Verzögerung nach dem Ende ihres Vorgängers (z. B. beginnt Aufgabe B einen Tag nach dem Ende von Aufgabe A).

Verzögerungen und Vorlaufzeiten werden mit der link.lag-Eigenschaft gesetzt:

  • Positive Werte bedeuten Verzögerung.
  • Negative Werte bedeuten Vorlaufzeit.

Standardmäßig ist die Verzögerung für alle Abhängigkeiten auf 0 gesetzt.

Bearbeiten von Linkwerten aus der Benutzeroberfläche

Obwohl Gantt keine integrierte Benutzeroberfläche zum Bearbeiten von Verzögerungen oder Link-Eigenschaften bietet, können Sie eine manuell erstellen, indem Sie das verwandte Kapitel als Leitfaden verwenden.

Related sample:   Edit-lag Popup

Deaktivieren der automatischen Planung für bestimmte Aufgaben

Um eine Aufgabe von der automatischen Planung auszuschließen, setzen Sie ihre auto_scheduling-Eigenschaft auf false:

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

Sie können auch den onBeforeTaskAutoSchedule Handler verwenden, um die automatische Planung für bestimmte Aufgaben zu verhindern:

gantt.attachEvent("onBeforeTaskAutoSchedule",function(task, start, link, predecessor){
    if(task.completed) {
        return false;
    }
    return true;
});

Planung abgeschlossener Aufgaben

Standardmäßig behandelt der Algorithmus zur automatischen Planung abgeschlossene Aufgaben (mit einem Fortschrittswert von 1) genauso wie unvollständige.

Um abgeschlossene Aufgaben aus dem kritischen Pfad und der automatischen Planung auszuschließen, aktivieren Sie die auto_scheduling_use_progress Konfiguration:

gantt.config.auto_scheduling_use_progress = true;
 
gantt.init("gantt_here");

Weitere Details finden Sie auf der API-Seite.

API-Überblick

Hier ist eine Liste nützlicher Methoden und Eigenschaften:

Aktivierung

Um die automatische Planung zu aktivieren, setzen Sie die auto_scheduling Eigenschaft auf true:

gantt.config.auto_scheduling = true;

Strikter Modus

Standardmäßig werden Aufgaben nur verschoben, wenn Einschränkungen verletzt werden. Um Aufgaben immer auf das frühestmögliche Datum umzuplanen, aktivieren Sie auto_scheduling_strict:

gantt.config.auto_scheduling_strict = true;

Beachten Sie, dass diese Einstellung für Versionen 6.1.0 - 7.1.3 nur funktioniert, wenn auto_scheduling_compatibility aktiviert ist.

Erstmalige automatische Planung

Die auto_scheduling_initial Eigenschaft bestimmt, ob die automatische Planung beim Laden der Daten ausgeführt wird. Sie ist standardmäßig aktiviert:

gantt.config.auto_scheduling_initial = true;

Vererbung von Projekteinschränkungen

Die auto_scheduling_project_constraint Eigenschaft stellt sicher, dass Aufgaben ohne spezifische Einschränkung diese von ihrem übergeordneten Projekt erben:

gantt.config.auto_scheduling_project_constraint = true;

Neuberechnung des Projekts

Um den gesamten Projektzeitplan neu zu berechnen, verwenden Sie die autoSchedule Methode:

gantt.autoSchedule();

Wenn eine Neuberechnung ab einer bestimmten Aufgabe erforderlich ist, übergeben Sie die ID der Aufgabe an die Methode:

gantt.autoSchedule(taskId);

Überprüfung, ob eine Aufgabe nicht geplant ist

Um zu überprüfen, ob eine Aufgabe nicht geplant ist, verwenden Sie die isUnscheduledTask Methode mit dem Aufgabenobjekt:

var isUnscheduled = gantt.isUnscheduledTask(task);

Suche nach zirkulären Referenzen

Um zirkuläre Referenzen im Diagramm zu identifizieren, verwenden Sie die findCycles Methode:

gantt.findCycles();

Überprüfung, ob ein Link zirkulär ist

Um zu überprüfen, ob ein Link zirkulär ist, wenden Sie die isCircularLink Methode an:

var isCircular = gantt.isCircularLink(link);

Verbundene Aufgaben und Links ermitteln

Um herauszufinden, welche Aufgaben und Links mit einer bestimmten Aufgabe verbunden sind, können Sie die gantt.getConnectedGroup Methode verwenden:

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

Die Liste der Ereignisse

Hier ist eine Übersicht über die Ereignisse, die Sie verwenden können:

So können Sie mit diesen Ereignissen arbeiten:

// Wird ausgelöst, bevor die automatische Planung beginnt
gantt.attachEvent("onBeforeAutoSchedule",function(taskId){
    // Fügen Sie hier Ihre benutzerdefinierte Logik hinzu
    return true;
});
 
// Wird ausgelöst, nachdem die automatische Planung abgeschlossen ist
gantt.attachEvent("onAfterAutoSchedule",function(taskId, updatedTasks){
    // Fügen Sie hier Ihre benutzerdefinierte Logik hinzu
});
 
// Wird ausgelöst, bevor eine bestimmte Aufgabe neu geplant wird
gantt.attachEvent("onBeforeTaskAutoSchedule",function(task,start,link,predecessor){
    // Fügen Sie hier Ihre benutzerdefinierte Logik hinzu
    return true;
});
 
// Wird ausgelöst, nachdem eine bestimmte Aufgabe neu geplant wurde
gantt.attachEvent("onAfterTaskAutoSchedule",function(task,start,link,predecessor){
    // Fügen Sie hier Ihre benutzerdefinierte Logik hinzu
});
 
// Wird ausgelöst, wenn eine zirkuläre Referenz erkannt wird und die automatische Planung nicht fortgesetzt werden kann
gantt.attachEvent("onCircularLinkError",function(link, group){
    // Fügen Sie hier Ihre benutzerdefinierte Logik hinzu
});
 
// Wird ausgelöst, wenn während der automatischen Planung zirkuläre Links gefunden werden
gantt.attachEvent("onAutoScheduleCircularLink",function(groups){
    // Fügen Sie hier Ihre benutzerdefinierte Logik hinzu
});

Versionskompatibilität

Wenn das Datum einer Aufgabe angepasst wird—entweder durch Ziehen mit der Maus oder durch Änderung im Lightbox—wird der Aufgabe automatisch eine von zwei Einschränkungsarten zugewiesen: start no earlier than+%start date% oder finish no later than+%end date%, abhängig von der verwendeten Planungsstrategie.

Das bedeutet, dass sich die Aufgabe nicht auf ein früheres Datum verschiebt, wenn ein späteres über die Benutzeroberfläche eingestellt wird. Dies kann etwas unerwartet sein, insbesondere da Einschränkungen standardmäßig nicht im Diagramm angezeigt werden.

Falls erforderlich, können Sie die Visualisierung von Einschränkungen mit der gantt.addTaskLayer Methode aktivieren.

Related sample:  Auto-Schedule From Project Start & Constraints

Dieses Verhalten unterscheidet sich von der Funktionsweise der automatischen Planung in Versionen vor v6.1, aber es entspricht der Logik, die in MS Project verwendet wird, was es zu einem Standardansatz macht.

Wenn Sie das Verhalten der automatischen Planung vor Version 6.1 ohne Einschränkungen bevorzugen, können Sie diese wie folgt deaktivieren:

gantt.config.auto_scheduling_compatibility = true;
Zurück nach oben