0

Terminverschiebung im Ablaufplan

Hallo, ich möchte einen Ablaufplan (Pos.-Anfang-Dauer-Ende) erstellen. Da habe ich verschiedene Terminabhängigkeiten definiert (Vorgänger-Nachfolger). Ich suche ein Möglichkeit bei Änderung eines Endtermin alle nachfolgenden Anfangstermine (die unmittelbar und mittelbar) verknüpft sind zu ändern.

Das folgende Foto ist ein Beispiel wie sich die Abhängigkeiten darstellen könnten:

Ich hoffe mich verständlich ausgedrückt zu haben 🤨.

Ich bedanke mich schon im voraus für Tipps und Tricks !

12 Antworten

null
    • rainless
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo I.R.

    ich habe eine Idee, komme aber selbst nicht weiter und stelle sie deshalb mal zur Diskussion ein. Vielleicht weiß jemand anders etwas mehr ...

    Der Einfachheit halber ist Lstg mal als reines Datum definiert. Das kannst Du dann selbst verfeinern. Die Tabelle sieht so aus:

    Vorgängertermin braucht man nicht ... das entsteht halt von alleine, wenn man eine Tabelle auf sich selbst verlinkt

    Der Button ist der Einfachheit halber drin und erzeugt direkt einen verlinkten Folgetermin, dem man nur noch ein Endedatum geben muss (das natürlich beim Button-Klick nicht bekannt ist).

    In "Ende" ist ein "Trigger nach Aktualisierung"-Script enthalten:

    let t := this;
    for ft in Folgetermine do
        let dauer := ft.Ende - ft.Start;
        ft.(Start := t.Ende);
        ft.(Ende := ft.Start + dauer)
    end
    

    Wenn man jetzt ein Ende-Datum ändert, dann ändert sich das Startdatum aller direkten Folgetermine. Außerdem ändert sich das Endedatum der Folgetermine, so dass die Dauer der Folgetermine gleich bleibt.

    ABER ... die Folgetermine der Folgetermine ändern sich nicht :(

    Ich habe versucht das über Rekursion zu machen, aber der Aufruf meiner rekursiven Funktion in ihr selbst wird nicht akzeptiert. Da ich nicht weiß, wie lange die Kette ist, fällt mir aber nur Rekursion ein ...

    Hat jemand eine Idee?

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Erstmal vielen Dank für die Antwort. Die Änderung des unmittelbaren Folgetermin habe ich auch so gelöst. Aber wie gesagt.......die Nachfolger der Nachfolger:(.

    Leider habe ich bisher keine Idee. Aber schön dass sich andere, die bestimmt auch mehr Erfahrung beim "Scripten" haben, sich meinen Problem annehmen !

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Da ich das nicht hinbekomme, unter folgender Überschrift „Definition einer rekursiven Funktion?“ ist beschrieben wie man das System für eine Rekursion austricksen kann. Kann das helfen?

      • rainless
      • vor 2 Jahren
      • Gemeldet - anzeigen

      I.R. Du meinst https://forum.ninox.de/t/y4hr40x#h7h2p2v?

      Das Problem ist, dass dort ein Kind verändert wird. Das Kind hat nur ein Elternteil und das Elternteil nur ein Großelternteil. D. h. man kann eine Linie hochlaufen und dort immer die Summer aller Unterteile machen. Das Hochlaufen geschieht, indem das Elternteil erfasst wird. Obwohl es nur eines gibt, wird eine while-Schleife verwendet. In der Schleife wird nach der Anpassung des Elternteils dessen Wert erst einmal verändert und dann wird das Elternteil durch sein eigenes ersetzt. Das gibt der while-Schleife neue Nahrung - allerdings immer nur eines, solange eben, bis es kein Elternteil mehr gibt.

      Bei Dir wird im Prinzip ein Elternteil verändert und alle Kinder und Enkel etc. darunter sollen sich verändern. Das geht so nicht (meiner Meinung), weil man ins erste Kind gehen würde. Dort verändert man aber das Ziel der while-Schleife, arbeitet sich bis zum untersten Enkel-etc-Kind herunter und hängt dann fest. Bei der Rekursion würdest Du wieder eins hochgehen und dann bei nächsten Kind runter ... im Rekursions-Stack behältst Du nämlich auf jeder Ebene alle Records der nächsten. Im Beispiel hier ersetzt Du immer und verwirfst die ganze Geschichte.

      Ich kann mich auch täuschen ... aber so verstehe ich das :(

    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi I.R. ,

    Noch eine Verständnisfrage: Bleibt es immer bei dieser Anzahl Terminen (LSTG1-6) oder sind das mal mehr oder mal weniger?
    Wenn ja, wäre denkbar diese als 6 Felder in einer Tabelle anzulegen und dann mit einer Konstallation von "Trigger nach Änderung" zu aktualisieren...

    Viele Grüße
    Ronald

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Das Beispiel habe ich mittlerweile an meine DB angepasst und mehrfach umgestellt und probiert. Offensichtlich hat Lars recht…..ich bekomme es jedenfalls nicht hin.

    Die Anzahl der Zeilen ist variabel. Ist wohl auch mit zusätzlichen Feldern nicht möglich.

    Aber irgendwie muss man das doch machen können. Ich werde mal weiter tüfteln. Wenn ich eine Idee habe werde ich die natürlich zur Verfügung stellen.

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo. Schau mal, ob Dir das hilft. Die Textfelder sind Hilfsfelder mit den raw()-Werten dieser Termine, Lstg5 und Lstg6 enhalten Trigger, welche jeweils die gesamte Terminfolge ändern. Ich hoffe, so war es gedacht. Mirko

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Erstmal Danke für die Antworten. Die Test-DB gucke ich mir mal gleich an.

    Mit folgenden Script habe ich erstmal das gewünschte Ergebnis erreicht. der Zähler ist notwendig um ein Ausstieg aus der Schleife zu provozieren (ohne hat sich immer die DB festgefahren jedenfalls).

    do as transaction
        let id := Projekt;
        let myChild := Nachfolger;
        let datAnfang := Ende + 1;
        let zaehler_max := cnt((select Leistung)[Projekt = id]) + 1;
        let zaehler := 0;
        while myChild != null and zaehler < zaehler_max do 
            myChild.(Anfang := datAnfang);
            datAnfang := date(myChild.Ende) + 1;
            myChild := myChild.Nachfolger;
            zaehler := zaehler + 1
        end

    end

    Erläuterung: die Leistungs-Tabelle gehört zu ein Projekt, Nachfolger sind die verknüpften Termine

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ich habe mir die Termin-DB angeschaut. Bin ich da nicht auf eine feste Anzahl an Lstg angewiesen ? Eine festgesetzte Anzahl gibt es aber leider nicht, kann zwischen 2 und ....... liegen theoretisch.

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ich habe vor, in der Anwendung ein Ablaufdiagramm zu erstellen. Ähnliches habe ich schon in einer anderen Anwendung eingebaut (Bild) welche aber im Punkt Ablaufplan relativ einfach gestrickt ist.

    Das Diagramm habe ich mit QuickChart generiert, relativ cool weil die auch einen Editor haben wo man testen/rumspielen kann. Ich habe z.B. Nullahnung von JScript habe aber mit etwas probieren das hinbekommen. 

    Hinweis: die roten striche im Diagramm sind Feiertage die ich aus einer Tabelle entnehme.

    Der Ausdruck ist dann eine PDF mit Kopf/Fusszeile und dem Bild.

    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo I.R.  ,

    Ich bin im Webinar-Team auf eine ähnliche Aufgabenstellung gestoßen.
    Vielleicht hilft Dir diese Datenbank weiter:
    347_GANTT mit Abhängigkeiten

    (Falls Du nicht im Webinar-Team bist, schreibe eine kurze Email an support@ninox.com mit der Bitte um Aufnahme in das Webinar-Team, dann bekommst Du einen Einladungslink)

     

    Viel Erfolg
    Ronald

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Vielen Dank für die Antwort, in dieser Art habe ich das Problem auch gelöst. Funktioniert bei mir ganz gut.

    Nochmals Danke und wenn Interesse besteht kann ich ja meine Lösung hier aufzeigen.