Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: aba am 13.12.02 - 11:10:11

Titel: Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: aba am 13.12.02 - 11:10:11
Habe von dieser Seite im Internet
http://www.sns1.de/partner/flamme/wflamme.nsf

ein Script. Allerdings wir mir jetzt in meinem Formular die Formel angezeigt. Vielleicht habe ich das Script an der falschen Stelle eingebaut. Kann mir da jemánd helfen???

Siehe biegefügtes jpg
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: Don Pasquale am 13.12.02 - 11:53:42
Hi aba,

ich konnte das ganze nicht richtig nachvollziehen,
deswegen nur geraten :

Er schreibt da was von Spaltenformel, vielleicht hast Du recht und
es muss in eine Ansicht.

Also eine Ansicht erstellen oder öffnen
eine Spalte erstellen
und in Anzeige Formel einstellen und dann diesen Code da rein.

In der Ansichtsauswahl müssen aber die Urlaubsanträge selectiert sein

Select FORM = "UrlaubsantragFormular"

oder wie auch immer dein formular heissen mag.

ist aber nur ein tipp ins balue hinein

ciao

Don Pasquale
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: wflamme am 13.12.02 - 13:25:29
Falscher Feldtyp!
Nimm "Zahl" und "berechnet" /"berechnet nur zur Anzeige" oder wie das im deutschen Designer heißt.
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: aba am 13.12.02 - 13:55:10
Hallo Don Pasqual und wflamme,

also zum einen habe ich auch das mit "...Spalte" gelesen. Die habe ich allerdings nicht. Ich habe mir dann überlegt, das es evtl. auch in einem Feld funktionieren müßte.

Wenn ich jetzt aber dem Feld Typ "Zahl" verpasse und "berechnet" dann kommt folgende Fehlermeldung wenn man das Formular öffnet "Feld'Urlaubstage' falscher Dateityp für Operator oder @Function"

wat den nu?????
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: wflamme am 13.12.02 - 21:37:00
Am Anfang steht in den Beginn-/Ende-Feldern ja noch nichts drin  ;D

Versuchs mal mit:
ddiff:=1 + @Integer((EndDate - StartDate) / 86400); REM "Zeitdifferenz in Sekunden in ganze Tage umrechnen, 60s/min * 60min/h*24h/Tag = 86400s/Tag";
blocks:=@Integer(ddiff / 7); REM "Zahl der 7-Tage-Blöcke";
rest:=@Modulo(ddiff; 7); REM "Resttage ermitteln mithilfe 7-Tage-Divisionsrest";
swt:=@Weekday(StartDate);
ewt:=@Weekday(EndDate);

res:=blocks * 5 +
rest +
@If(swt > ewt; -2; 0) +
@If(swt = 1; -1; 0) +
@If(ewt = 7; -1; 0);

@If(@IsError(res); 0; res)

---------------

OHGOTTOGOTT  :-[  :-[  :-X
Hätt ich Klugscheisser nur meine Klappe gehalten... die Formel ist FALSCH!

S.h. http://www.sns1.de/partner/flamme/wflamme.nsf/Shortcut/Arbeitstage#Eselsmuetze  (http://www.sns1.de/partner/flamme/wflamme.nsf/Shortcut/Arbeitstage#Eselsmuetze)

Freitag der 13.
Und ich dachte, gestern wäre schon ein schlimmer Tag gewesen...
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: ata am 14.12.02 - 11:11:55
... mit Formel kann ich nicht dienen, aber in Lotus Script habe ich meine Lib dahingehend erweitert, daß für einen bestimmten Zeitraum je nach Bundesland auch die Feiertage berücksichtigt werden - denn die sind ja keine Urlaubstage/Arbeitstage...

Die Berechnung findet jahresübergreifend statt...

... zu finden unter:

http://www.anton-tauscher.de/download/DateHandling.zip (http://www.anton-tauscher.de/download/DateHandling.zip) - 93 KByte

ata  ;)
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: eknori am 16.12.02 - 07:41:28
Hab das hier auf notes.nst gefunden

startDate := @Text(@Date(date));
endDate := @Text(@Today);
holidayList := [01/01/2002]:[01/21/2002]:[02/18/2002]:[05/27/2002]:[07/04/2002]:[09/02/2002]:[10/14/2002]:[11/11/2002]:[11/28/2002]:[12/25/2002]:[01/01/2003]:[01/20/2003]:[02/17/2003]:[05/26/2003]:[07/04/2003]:[09/01/2003]:[10/13/2003]:[11/11/2003]:[11/27/2003]:[12/25/2003];
range := @TextToTime(startDate+" - "+endDate);
dateList := @TextToTime(@Trim(@Replace(@Text(@Explode(range)); @Text(holidayList);
dayListTemp := @Text(@Weekday(dateList));
dayList := @If(dateList="-1";"";dayListTemp);
businessDayList := @Trim(@Replace(dateList;"1":"7";""));
businessDays := @Elements(businessDayList);
days = businessDays - 1;
days

eknori
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: aba am 16.12.02 - 08:15:47
Vielen Dank für die vielen Antworten.

Ich habe mich für eknoris Variante entschieden, allerdings meckert der jetzt eine Stelle in der Formel an.

Habe mal nen Anhang beigefügt. Kann da jemand was zu sagen??

Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: Don Pasquale am 16.12.02 - 09:35:31
Hallo aba,
ich bekomme den gleichen Fehler (ist auch nichts wildes)
bin aber in Formel nicht bewandert.
Du könntest Dir und anderen künftig arbeit ersparen, wenn
Du den Sourcecode gleich hier reinkopierst.
probier´s mal :-)

Ciao
Don Pasquale
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: ata am 16.12.02 - 11:03:35
... die Fehlermeldung kommt, weil in der Anweisung zuvor sehr viele Klammern auf gehen, aber weniger zu...

ata
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: aba am 16.12.02 - 12:32:27
Also mit eknoris Lösung bin ich nicht weiter gekommen. Das liegt aber wohl an mir. Ich habe den Fehler mit der fehlenden oder überflüssigen Klammer nicht gefunden.

Allerdings die von wflamme gepostete Lösung sieht jetzt schon ganz gut aus. ZUmindest steht in dem Feld jetzt wenn ich das Formular öffne ein "0" aber er rechnet nicht. Als Feldtyp habe ich "Zahl" mit Option "berechnet".

Vielleicht ist jetzt nur etwas an dem Typ oder der Option verkehrt!
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: wflamme am 16.12.02 - 13:58:30
Also mit eknoris Lösung bin ich nicht weiter gekommen. Das liegt aber wohl an mir. Ich habe den Fehler mit der fehlenden oder überflüssigen Klammer nicht gefunden.

Allerdings die von wflamme gepostete Lösung sieht jetzt schon ganz gut aus. ZUmindest steht in dem Feld jetzt wenn ich das Formular öffne ein "0" aber er rechnet nicht. Als Feldtyp habe ich "Zahl" mit Option "berechnet".

Vielleicht ist jetzt nur etwas an dem Typ oder der Option verkehrt!

Bei meinem Vorschlag (aktualisiert auf meiner HP) liegt's wahrscheinlich am Eingangsfeldtyp für Start/Ende, der nicht vom Typ Datum/Zeit ist, der Feldreihenfolge (berechnete Felder *nach*Angabe v. Start/Ende) bzw. was passiert bei Ctrl+S (Speichern), wird's dann aktualisiert?

Bei eknori ist's wahrscheinlich diese Zeile:
dateList := @TextToTime(@Trim(@Replace(@Text(@Explode(range)); @Text(holidayList))));
Ich hab's noch nicht getestet, der Vorteil seines Lösungsvorschlags sollte aber sein, daß die in der Liste eingetragenen Feiertage berücksichtigt werden.
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: aba am 16.12.02 - 14:18:09
Hallo Wolfgang,

also bei eknoris Lösung lag es nicht an den Klammern. Wenn die so alle setze kommt immer die Meldung "zu wenig Argumente".

Zu Deiner Lösung kann ich sagen, daß meine Start bzw. Ende Felder vom "Datum/Zeit" Typ sind. Auch wenn ich speicher wird die Zahlnicht berechnet.

Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: wflamme am 16.12.02 - 23:13:00
Hier Muster.
Bei eknoris Vorschlag muß ich noch mal gucken, neben den Klammern ist's wohl auch das Datumsformat. Und unten fehlt noch ein days :=
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: wflamme am 17.12.02 - 00:45:51
So, ich habe eknoris Formelvorschlag mal aufgedröselt, bei mir funkt es so.  Sein Vorschlag hat natürlich den Vorteil, daß auch Feiertage, die auf Werktage fallen, berücksichtigt werden (sofern sie in der Liste holidayList angegeben sind):

REM "Feiertagsliste";
holidayList := [01.01.2002]:[21.01.2002]:[18.02.2002]:[27.05.2002]:[04.07.2002]:[02.09.2002]:[14.10.2002]:[11.11.2002]:[28.11.2002]:[25.12.2002]:[01.01.2003]:[20.01.2003]:[17.02.2003]:[26.05.2003]:[04.07.2003]:[01.09.2003]:[13.10.2003]:[11.11.2003]:[27.11.2003]:[25.12.2003];

REM "Feiertagsliste nach Textliste wandeln";
hl:=@Text(holidayList);

REM "Datumsteil Start/Ende extrahieren und nach Textliste wandeln";
startDate := @Text(@Date(Anfang));
endDate := @Text(@Date(Ende));

REM "Aus Start/Ende DateRange im Textformat montieren";
range := @TextToTime(startDate + "-" + endDate);

REM "Auflösen des Start/Ende-Range in Datumswerte";
r2:=@Explode(range);

REM "Datumswerte in Textliste wandeln";
r3:=@Text(r2);

REM "Feiertage in Textliste durch leere Elemente ersetzen, diese entfernen";
r4:=@Trim(@Replace(r3;hl;""));

REM "Textliste in Datumswerte wandeln";
r5:=@TextToTime(r4);

REM "Datumswerte in Wochentagsnummern wandeln, diese in Text wandeln";
r6:=@Text(@Weekday(r5));

REM "Wochentagsnummern Sa und So durch leere Elemente ersetzen, diese entfernen";
r7:=@Trim(@Replace(r6;"1":"7";""));

REM "Zahl der verbleibenden Tage bestimmen";
res:=@Elements(r7);

REM "Resultat ausgeben";
res
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: wflamme am 17.12.02 - 00:58:06
Mit ein wenig Hingabe und der folgenden Osterformel für bewegliche Feiertage kann man die Feiertagsliste vermutlich auch dynamisch, ohne DBLookup erstellen...

So, Gute Nacht!
........................


REM "This formula returns the date of Easter day for the year of a given date D";
REM "Is valid until year 4000";
REM "Contributed from billingt@online.no";

D:=[30.07.97];
Year:=@Year(D);

c:=@Integer(Year/100);
n:=Year-19*@Integer(Year/19);
k:=@Integer((c-17)/25);
i:=c-@Integer(c/4)- @Integer((c-k)/3)+19*n+15;
ii:=i-30*@Integer(i/30);
iii:=ii-@Integer(ii/28)*(1-@Integer(ii/28)*@Integer(29/(ii+1))*@Integer((21-n)/11));

j:=Year+@Integer(Year/4)+iii+2-c+@Integer(c/4);
jj:=j-7*@Integer(j/7);
l:=iii-jj;
EasterMonth:=3+@Integer((l+40)/44);
EasterDay:=l+28-31*@Integer(EasterMonth/4);
@Date(Year;EasterMonth;EasterDay);
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: ata am 17.12.02 - 10:30:42
@wflamme

... danke, danach habe ich schon eine Weile gesucht...

 ;D ;D ;D

ata
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: aba am 17.12.02 - 14:00:09
@wflamme

Welchen Feldtyp müssen die drei nun beteiligten Felder den haben. Also bei mir sind "startDate und endDate" "Datum/Zeit bearbeitbar" und das Feld mit der Formel  ist "Zahl berechnet zur Anzeige". Aber es werden immer noch nicht die Zwischentage ausgerechnet.  :-[

@ata auf nochmal vielen Dank für Deinen Vorschlag ;)
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: wflamme am 17.12.02 - 15:25:07
@wflamme

Welchen Feldtyp müssen die drei nun beteiligten Felder den haben. Also bei mir sind "startDate und endDate" "Datum/Zeit bearbeitbar" und das Feld mit der Formel  ist "Zahl berechnet zur Anzeige". Aber es werden immer noch nicht die Zwischentage ausgerechnet.  :-[

@ata auf nochmal vielen Dank für Deinen Vorschlag ;)

???
Kapier ich nicht, wieso die Arbeitstage.nsf bei Dir nicht funktioniert.
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: aba am 17.12.02 - 16:01:02
@wflamme

alles klar jetzt funktionierts. Wer lesen kann ist klar im Vorteil!!!

Ich habe bei lesen gar nicht gesehen, das Du einen Anhang dran gehängt hattest.

Nächste Frage wäre jetzt natürlich, wie ich das hinbekomme, wenn jemand nur einen halben Tag Urlaub möchte oder z.B. 8,5 Tage. Muß ich wohl noch ein extra Feld einbauen. Hinter dem Start Datum noch eins mit Uhrzeit, da es dann ab 12:00 Uhr ist.
Beispiel: Erster Urlaubstag 17.12.2002   12:00. Dann darf das Feld mit der Formel für den ersten Tag nur o,5 berechnen. Problematisch sind z.B. auch der 24.12.2002 und der 31.12.2002, da es dafür auch nur halbe Tage gibt!!! Ich hoffe ich nerve nicht. Aber vielleicht kann ja der ein oder andere diese Lösung dann auch gebrauchen!!

 ;D
Titel: Re:Wieviel Arbeitstage liegen zwischen zwei Kalendertagen
Beitrag von: wflamme am 17.12.02 - 16:46:13
@wflamme

alles klar jetzt funktionierts. Wer lesen kann ist klar im Vorteil!!!

Ich habe bei lesen gar nicht gesehen, das Du einen Anhang dran gehängt hattest.

Nächste Frage wäre jetzt natürlich, wie ich das hinbekomme, wenn jemand nur einen halben Tag Urlaub möchte oder z.B. 8,5 Tage. Muß ich wohl noch ein extra Feld einbauen. Hinter dem Start Datum noch eins mit Uhrzeit, da es dann ab 12:00 Uhr ist.
Beispiel: Erster Urlaubstag 17.12.2002   12:00. Dann darf das Feld mit der Formel für den ersten Tag nur o,5 berechnen. Problematisch sind z.B. auch der 24.12.2002 und der 31.12.2002, da es dafür auch nur halbe Tage gibt!!! Ich hoffe ich nerve nicht. Aber vielleicht kann ja der ein oder andere diese Lösung dann auch gebrauchen!!

 ;D

Also bei dieser Formel ist das Problem, daß Feiertage, die auf einen Werktag fallen, nicht berücksichtigt werden, nur Sa+So gilt als arbeitsfrei. Es sind gewissermaßen Brutto-Arbeitstage.
eknoris Vorschlag (s.h. meine Korrekturen) ist da genau, weil er mit einem Feiertagskalender arbeitet. Der muß natürlich lokalisiert werden.

Das Problem halber oder angebrochener Tage läßt sich nur dann lösen, wenn es eine Sollarbeitszeit gibt.
Es ist aber doch kein Problem, angebrochene Tage erst mal als ganzen Urlaubstag zu werten, und dann die Anwesenheitszeiten gutzuschreiben, dh von den Urlaubstagen x/8,5-tel (oder so) wieder abzuziehen.

Für 24.12/31.12 muß in Formelsprache eine Sonderprüfung her; zum Schluß bei r3 prüfen, ob eines oder beide Daten in der Liste vorkommen und eine Korrektur vornehmen.

Da das aber scheinbar zu mehr dienen soll als bspw. einer Projekt-Terminplanung würde ich doch Lotusscript vorziehen. Da kannst Du dann auch noch individuellen Urlaubsanspruch, Urlaub von Teilzeitkräften etc komfortabel berechnen. Früher oder später kommt das nämlich.