Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet 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
-
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
-
Falscher Feldtyp!
Nimm "Zahl" und "berechnet" /"berechnet nur zur Anzeige" oder wie das im deutschen Designer heißt.
-
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?????
-
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...
-
... 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 ;)
-
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
-
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??
-
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
-
... die Fehlermeldung kommt, weil in der Anweisung zuvor sehr viele Klammern auf gehen, aber weniger zu...
ata
-
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!
-
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.
-
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.
-
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 :=
-
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
-
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);
-
@wflamme
... danke, danach habe ich schon eine Weile gesucht...
;D ;D ;D
ata
-
@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 ;)
-
@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.
-
@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
-
@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.