0

Vertragsmanagement

Hallo,

ich brauch eure Hilfe beim meinem Vertragsmanagement.

Beispiel: Vertrag hat eine Mindestlaufzeit bis zum 31.12.2018. Verlängerungsintervall 4 Monate. Ergebnis soll die neue Laufzeit sein, d.h. 31.12.2020. 

Mein Versuch:

let neuelaufzeit := date(Mindestlaufzeit);
if Mindestlaufzeit < today() then
while neuelaufzeit < today() do 
neuelaufzeit = date(neuelaufzeit) + month('Verlängerungsintervall')
end

else
date(Mindestlaufzeit)
end

4 Antworten

null
    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi Stefan, ganz schlau geworden bin ich aus den Angaben oben nicht, da 4 Monate zum 31.12.2018 hinzugerechnet ja nicht 31.12.20 ergeben. Deshalb habe ich spekuliert, dass Du den 31.08.20 gemeint hast und vielleicht hilft Dir dann das: (Verlängerungsintervall=Zahlenfeld)

    *

    if Mindestlaufzeit < today() then
    date(year(Mindestlaufzeit), month(Mindestlaufzeit) + 'Verlängerungsintervall', day(Mindestlaufzeit))
    end

    *

    Mirko

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja, Mirko hat recht, genau genommen müsste man auch noch eine Kündigungsfrist berücksichtigen, denn ansonsten wäre am 30.08. das Vertragsende der 31.08., nicht der 31.12. Allerdings sollte man bei der Berechnung nicht auf das Datum 'Mindestlaufzeit' Bezug nehmen, sondern auf das aktuelle, also today().

     

    Weiteres Problem: Wenn das Datum auf das Monatsende fällt, dann kann es bei Monaten, die weniger Tage haben, zu Verschiebungen in den Folgemonat kommen. Beispiel: 31.08. plus 3 Monate ergäben den 01.12., weil der 31.11. nicht existiert. Vertraglich korrekt wäre aber der 30.11.

     

    Das könnte man lösen, in dem man das Ergebnis in eine Variable schreibt und den berechneten day()-Wert mit dem des Feldes 'Mindestlaufzeit' vergleicht. Hier mal ein Vorschlag für ein Funktionsfeld:

     

    let myDate := Mindestlaufzeit;
    if myDate < today() then
        if month(myDate) <= month(today()) then
            myDate := date(year(today()), month(myDate) + 'Verlängerungsintervall', day(myDate));
            if day(myDate) < day(Mindestlaufzeit) then
                myDate := date(year(myDate), month(myDate), 0)
            end
        end
    end;
    myDate

     

    (Die 0 steht für den letzten Tag des Vormonats.)

    • mirko3
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi Copytexter. Ich würde gern noch für mein Verständnis etwas zu Deinem Code wissen. Du deklarierst im ersten Schritt eine Variable, die Du im zweiten Schritt (If Nr.2) erst benutzt und dann durch die Zuweisung (Zeile 4) abänderst (ist das so?), was ja eigentlich eine neue Variable wäre. Dann im zweiten Schritt (If Nr.3) legst Du noch die Besonderheit fest bezüglich des Tages (Danke für die Idee mit der "0" - das kannte ich noch nicht) und verwendest jetzt die "veränderte" Variable und weist der Variablen wieder einen anderen Wert zu (Zeile 6)? Und ist dann das letzte myDate am Ende des Codes das Ergebnis von Zeile 6?  Ich hoffe, ich konnte es erträglich formulieren. Mirko

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja, sofern alle Bedingungen zutreffen, hat myDate am Ende den in Zeile 6 berechneten Wert. Wobei - ich sehe gerade, dass man noch einen else-Zweig einfügen müsste, um ggf. das Jahr zu aktualisieren. Hatte mich wohl zu sehr auf das Monatsende-Problem konzentriert. ;)