vogelwilde formel (inkl. kl. fehler) die ich nicht verstehe

  • Hallo zusammen,


    in einer der Datenbanken welche ich übernommen habe wurde heute ein kleiner Fehler entdeckt. Nicht weiter schlimm, dachte ich. Hab das Feld mit der Berechnung auch rasch gefunden.
    Aber ich versteh die Formel nicht.


    Könntet ihr mir die netterweise zerpflücken und sagen wo steht was passiert aber nicht soll?


    Es handelt sich um eine Abwesenheitszeitberechnung die in eine Kalenderansicht eingetragen wird. Da wird der Zeitraum aufgesplittet in die Abwesenheitstage und in jeden der betreffenden Tage ein Eintrag gesetzt. Soweit so gut. Aber es wird tatsächlich nur x-1 Tag angezeigt. Der letzte Abwesenheitstag wird immer unterschlagen.


    Hier die Formeln:
    @Explode(@Date(@TextToTime(@Text(leaving) + " " + @Text(@Time(0;0;0)) + " - " + @Text(@If(returning > leaving; @Adjust(returning; 0; 0; -1; 0; 0; 0); returning)) + " " + @Text(@Time(0;0;0)))))


    das steht in dem einen Feld und das in dem Feld welches in der Kalenderansicht verwendet wird:
    @TextToTime(DaysOutOS + " " + @Text(@Time(0;0;0)))


    An der Stelle von -1 hab ich mich schon bissl rumprobiert mit 0 oder +1 aber ohne dass sich auch im geringsten etwas zum guten oder schlechten verändert hätte.


    Danke & Gruß,
    cyntia

    domino server 6.5.5; notes clients 6.5.1 bzw. 6.5.2 englisch auf w2000 E
    clients auf w2000 englisch bzw. englisch multilanguage mit japanisch......

  • Worum geht es ?


    @Explode( Datumsbereich )
    Datumsbereich
    Zeit- und Datumsbereich oder Liste mit Zeit- und Datumsbereichen. Der Datumsbereich, dessen einzelne Tage als Textliste zurückgegeben werden sollen. Geben Sie einen gültigen Zeit- und Datumsbereich an. Eine diesen repräsentierende Zeichenfolge ist unzulässig. Beispielsweise ist @Explode("05.01.96 - 05.02.96") ungültig, da der Parameter eine Zeichenfolge ist. Verwenden Sie stattdessen @Explode([05.01.96 - 05.02.96]).


    leaving und returning sind doch Datumswerte.


    Das hier
    @Date(@TextToTime(@Text(leaving) + " " + @Text(@Time(0;0;0))


    ist schon einmal ziemlicher Quatsch. Die Klammersetzung muß anders sein und mit der @Date-Funktion kann man den @Time-Kram weglassen, also


    @Date(leaving)


    Im Folgenden sollten wir der Übersichtlichkeit halber einen Korrekturfaktor definieren, der sich - dort steckt der nächste Fehler - nur auf das Datum der Rückkehr beziehen darf.


    Korrekturtage:=@If(@Date(returning) > @Date(leaving);1;0);


    Im folgenden Teil wird überhaupt kein @Date mehr gesetzt, daher ist das noch größerer Quatsch. Richtig wäre - wieder uner Weglassung von @Time:


    @Date(@Adjust(returning; 0; 0;Korrekturtage; 0; 0; 0))


    So ergibt sich:
    Korrekturtage:=@If(@Date(returning) > @Date(leaving);1;0);
    DatumStart:=@Date(leaving);
    DatumReturn:=@Date(@Adjust(returning; 0; 0;Korrekturtage; 0; 0; 0));
    txtIntervall:=@Text(Datumstart) + " - " + @Text(DatumReturn);
    Textliste:=@Explode(txtIntervall)


    Ich habe es nicht getestet, aber in dieser Kante muß es auslaufen.
    Und du kannst die Zwischenergebnisse einmal mit @Prompts dir anzeigen lassen (oder in Spalten in einer Ansicht).

  • Wenn das zu Fehlern führt, weil der Text nicht als Datums-Literal für die Explode-Finktion interpretierbar ist, kann vielleicht der Umweg über


    @Explode(@Implode(@Text(Datumstart:DatumReturn;"-"))) die letzte Zeile ersetzen. Da muß man etwas probieren.