Zeitberechnung anfangs und enddatum

  • Hallo,


    ich habe eine Projektverwaltung, in dieser wird ein Anfangsdatum gespeichert und die Zeit die auf dieses Projekt gebucht worden ist.


    ich benötige nun das Enddatum für diesen Eintrag.


    Gibt es dazu irgendeine Funktion? In der Hilfe habe ich nur workdays
    gefunden. das nützt mir nichts.


    ich benötige sowas wie


    anfangsdatum + gebuchte_Std/8 + (Anzahl(Sam.Sonntage)) = ENDDATUM


    Weiss jemand wie man das lösen kann?

    • Offizieller Beitrag

    1.) bestimme den Wochentag (@Weekday) des anfangsdatum
    2.) bestimme @Fix((gebuchte_Std/8)/5) ... Anzahl der kompletten Wochen
    3.) bestimme @Modulo(gebuchte_Std/8); 5) ... restlichen Tage, die keine komplette Woche ergeben


    Anhand von 1.) und 3.) kannst Du ggf. das darin liegende Wochenende noch ausgleichen.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Mit @Adjust kannst du die Arbeitstage draufrechnen.
    Dann müsstest du bei jeweils 5 Arbeitstagen 2 zusätzliche Tage rechnen (für die Wochenenden) und dann prüfen ob du an einem Samstag oder Sonntag gelandet bist, wenn ja dann nochmal 1 oder 2 Tage draufrechnen

    • Offizieller Beitrag

    mit Adjust muss auch der Wocehntag des Anfangsdatums bestimmt werden.


    Gegenbeispiel:
    anfangsdatum ist ein Freitag
    Tage = 8 ... entspricht 10 Tagen (5 Tage [1 .Woche] + 2 Tage Wochenede + 3 Tage [Rest])


    Der Adjust landet dann bei einem Montag, müsste aber bei einem Mittwoch landen!


    Mit Weekday müsstest Du eine Variable (wd) so belegen, dass für
    Mo ... 5
    Di ... 4
    Mi ... 3
    Do ... 2
    Fr .. 1
    rauskommt.


    Anfangsdatum muss ein Wochentag sein, da da die Arbeit beginnt.


    Mit
    @If(wd - @Modulo(Tage; 5) > 1; 2; wd - @Modulo(Tage; 5) = 1; 1;0)
    bekommst Du die noch zu addierenden Tage (für ein Wochenede) heraus.


    Gruß
    Dirk

  • Wieso muss ich da den Anfangstag berechnen ?


    _DAYS := 8;
    _REALDAYS := _DAYS + (@Integer(_DAYS / 5) * 2);
    _NEWDATE := @Adjust(StartDate;0;0;_REALDAYS;0;0;0);
    @If(@Weekday(_NEWDATE) = 1;@Adjust(_NEWDATE;0;0;1;0;0;0);@Weekday(_NEWDATE)=7;@Adjust(_NEWDATE;0;0;2;0;0;0);_NEWDATE)

  • oh....habe vergessen das das ganze in Lotusscript sein muss, da ich das nicht per calcfomular innerhalb des Formulars machen muss sondern direkt in einem Agenten der in Lotusscript geschrieben ist.


    so schön die lösung auch ist mit @-formeln

    • Offizieller Beitrag

    wende Deine Formel mal auf den 09.03.2007 an, da kommt
    der 19.03.2007 raus.


    Kontrollieren kannst Du es mit einem folgendem Prompt nach Deinem Code:


    _newDate2 := @If(@Weekday(_NEWDATE) = 1;@Adjust(_NEWDATE;0;0;1;0;0;0);@Weekday(_NEWDATE)=7;@Adjust(_NEWDATE;0;0;2;0;0;0);_NEWDATE);
    @Prompt([ok];@Text(@BusinessDays(StartDate;_NewDate;1:7));@Text(_newDate2))


    In der Titelleiste stehen die BusinessDays und in der Box das Ziel Datum.


    Gruß
    Dirk

    • Offizieller Beitrag

    Im Script geht es genau so:


    @Weekday ... Weekday
    @Adjust ... NotesDateTime.AdjustDay
    @Modulo ... Mod
    @Fix ... Rechne mit \ anstelle mit einem /


    Gruß
    Dirk

  • hallo Taurec, was meinst du denn mit _DAYS = 8 ?


    sind das meine Arbeitsstunden in tagen und du hast jetzt mal 8 Arbeitstage angenommen?


    das mit in script ändern bekomme ich dann schon so hin mit eurer Hilfe

    • Offizieller Beitrag

    natürlich Fix ist Script mit Formeln muss @Integer verwendet werden. Stört mich schon lange, dass dies im Script und Formeln unterschiedlich ist. War wohl Wunschdenken ;) .


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • So..hier mal mein "Versuch" des ganzen.......


    If AnzStunden > 0 Then
    Arbeitstage = Cint(AnzStunden/8)
    REM Wieviele Wochen sind das?
    AnzWochen = Fix(Arbeitstage/5)
    REM zwei Wochenendtage dazurechnen
    Gesamttage = Arbeitstage + 2*AnzWochen
    Dim NewDate1 As New NotesDateTime(startdatum)
    Call NewDate1.Adjustday(Gesamttage)
    If Weekday(NewDate1)=1 Then Call NewDate1.AdjustDay(2)
    If Weekday(NewDate1)=7 Then Call NewDate1.AdjustDay(1)
    doc.EnddatumGebucht = NewDate1
    End If