AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
18.09.21 - 22:29:09
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino Sonstiges
| |-+  Tipps und Tricks (Moderatoren: eknori, fritandr, ata)
| | |-+  Berechnung der Arbeitstage zwischen zwei Terminen
« vorheriges nächstes »
Seiten: [1] 2 Nach unten Drucken
Autor Thema: Berechnung der Arbeitstage zwischen zwei Terminen  (Gelesen 16840 mal)
jr
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 260


Bitte keine eierlegenden Wollmilchsäue...


WWW
« am: 21.06.05 - 09:11:06 »

Hallo,

noch eine weitere @Formel, die vielleicht für einige interessant ist. Häufig hat man dass Problem, dass man in einem kleinen Workflow die Arbeitstage benötigt, weil z. B. nach 3 Arbeitstagen eine Eskalation stattfinden muss. Wenn man das richtig machen möchte, dann muss man Wochenden und Feiertage berücksichtigen und ist die Berechnung nicht mehr ganz trivial.

In der nachfolgenden Formel wird davon ausgegangen, dass die Liste der Feiertage in der Variablen "feierTage" als Text-Liste gespeichert ist (bei uns war das damals ein Konfiguratoinsdokument). Außerdem gibt es noch eine Liste mit halben Feiertagen, sofern der Arbeitgeber diese nicht als vollständig frei definiert.

Mit LotusScript geht das natürlich deutlich einfacher, aber damals war das noch keine Option und außerdem kann man die Formel so leichter in ein berechnetes Feld aufnehmen

Vielleicht kann ja der ein oder andere die Formel gebrauchen.


REM "Berechnung der Arbeitstage zwischen VON und BIS";

von           := ...;
bis           := ...;

feierTage     := "1.1.2005" : "6.1.2005" : ...;
halbeTage     := "24.12.2005" : "31.12.2005" : ...;

alleTageStr   := @Explode(@TextToTime(@Text(Von) + " - " + @Text(Bis)));
alleTage      := @TextToTime(alleTageStr);
wochenendeStr := @Replace(@Text(@Weekday(alleTage)); "1" : "7"; "x" : "x") + alleTageStr;
wochenende    := @Trim(@Right(wochenendeStr; "x"));
freieTage     := @Unique(feierTage : wochenende);
arbeitsTage   := @Trim(@Replace(alleTageStr; @Keywords(alleTageStr; freieTage; ""); ""));
halbeArbTage  := @Keywords(arbeitsTage; halbeTage; "");

anzahlTage    := @Elements(arbeitsTage) - (@Elements(halbeArbTage) / 2);
anzahlTage


Passend hierzu habe ich auch noch die Formel zu berechnen des n-ten Arbeitstags ab einem bestimmten Datum. Es werden die gleichen Konfigurationswerte wie oben benutzt.


REM "Berechnung des n-ten Arbeitstage ab VON";

von           := ...;
n             := ...;

feierTage     := "1.1.2005" : "6.1.2005" : ...;
halbeTage     := "24.12.2005" : "31.12.2005" : ...;

bis           := @Adjust(von; n; 0; 0; 0; 0; 0);
alleTageStr   := @Explode(@TextToTime(@Text(Von) + " - " + @Text(Bis)));
alleTage      := @TextToTime(alleTageStr);
wochenendeStr := @Replace(@Text(@Weekday(alleTage)); "1" : "7"; "x" : "x") + alleTageStr;
wochenende    := @Trim(@Right(wochenendeStr; "x"));
freieTage     := @Unique(feierTage : wochenende : halbeTage);
arbeitsTage   := @Trim(@Replace(alleTageStr; @Keywords(alleTageStr; freieTage; ""); ""));

zielDatum     := @Date(@TextToTime(@Subset(@Subset(arbeitsTage; n); -1)))
zielDatum



Gruß,

Joachim
Gespeichert

Wer in den Fußstapfen eines anderen geht, hinterlässt keine Spuren und kommt nie als Erster an.
Semeaphoros
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 8152


ho semeaphoros - agr.: der Notesträger


WWW
« Antworten #1 am: 21.06.05 - 09:22:52 »

Kannst Du kurz sagen, welches die Unterschiede zu @BusinessDays ist (ausser dass schon früher als ND6 verwendbar ist)?
Gespeichert

Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6
diali
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1023



« Antworten #2 am: 21.06.05 - 09:25:24 »

@BusinessDays zieht die Feiertage nicht ab!

Gruß
Dirk
Gespeichert

Gruß
Dirk
jr
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 260


Bitte keine eierlegenden Wollmilchsäue...


WWW
« Antworten #3 am: 21.06.05 - 09:41:40 »

Du hast recht, unter R6 geht das auch mit @BusinessDays, außer, dass die halben Tage nicht berücksichtigt werden. Die Funktion ist noch aus R4. Ich weiß nicht, wieß den anderen geht, aber bei mir arbeitet die Hälfte meiner Kunden noch mit R5, und da brauche ich die Formel, obwohl ich unter R6 entwickle.

Joachim
Gespeichert

Wer in den Fußstapfen eines anderen geht, hinterlässt keine Spuren und kommt nie als Erster an.
jr
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 260


Bitte keine eierlegenden Wollmilchsäue...


WWW
« Antworten #4 am: 21.06.05 - 09:42:52 »

Ach ja, den n-ten Arbeitstag ab einem Datum kann man, glaube ich, mit @BusinessDays auch nicht berechnen.

Joachim
Gespeichert

Wer in den Fußstapfen eines anderen geht, hinterlässt keine Spuren und kommt nie als Erster an.
jr
Senior Mitglied
****
Offline Offline

Geschlecht: Männlich
Beiträge: 260


Bitte keine eierlegenden Wollmilchsäue...


WWW
« Antworten #5 am: 21.06.05 - 09:51:15 »

Unter R6 habe ich mit der @For-Schleife natürlich noch andere Möglichkeiten...
Gespeichert

Wer in den Fußstapfen eines anderen geht, hinterlässt keine Spuren und kommt nie als Erster an.
Semeaphoros
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 8152


ho semeaphoros - agr.: der Notesträger


WWW
« Antworten #6 am: 21.06.05 - 09:51:36 »

Diali: @BusinessDays zieht die Feiertage ab, wenn diese korrekt im Adressbuch/Kalender hinterlegt sind. Allerdings kennt Notes - wie Joachim richtig sagt - keine halben Feiertage.
Gespeichert

Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6
diali
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1023



« Antworten #7 am: 21.06.05 - 09:57:16 »

@Semeaphoros
ja ich meinte die halben Tage - Sorry hatte das "halbe" vergessen.

Die Tage musst Du als Liste mitgeben oder funktionieren auch Feiertagseinträge im Kalender? Kann ich mir nicht vorstellen, da der Entwickler nicht garantieren kann, dass jeder User dies Feiertage einträgt oder ausversehen einen löscht usw.

Gruß
Dirk
Gespeichert

Gruß
Dirk
MNoering
Frischling
*
Offline Offline

Beiträge: 6


« Antworten #8 am: 14.03.11 - 15:08:44 »

Hallo an Alle,

ich weiß, dass dieser Thread schon etwas älter ist, aber er beschreibt genau das Problem, welches ich gerade habe.
Ich habe das unten zitierte Codefragment in eine Datenbank implementiert und die Berechnung der Arbeitstage funktioniert hervoragend.

Hallo,

noch eine weitere @Formel, die vielleicht für einige interessant ist. Häufig hat man dass Problem, dass man in einem kleinen Workflow die Arbeitstage benötigt, weil z. B. nach 3 Arbeitstagen eine Eskalation stattfinden muss. Wenn man das richtig machen möchte, dann muss man Wochenden und Feiertage berücksichtigen und ist die Berechnung nicht mehr ganz trivial.

In der nachfolgenden Formel wird davon ausgegangen, dass die Liste der Feiertage in der Variablen "feierTage" als Text-Liste gespeichert ist (bei uns war das damals ein Konfiguratoinsdokument). Außerdem gibt es noch eine Liste mit halben Feiertagen, sofern der Arbeitgeber diese nicht als vollständig frei definiert.

Mit LotusScript geht das natürlich deutlich einfacher, aber damals war das noch keine Option und außerdem kann man die Formel so leichter in ein berechnetes Feld aufnehmen

Vielleicht kann ja der ein oder andere die Formel gebrauchen.


REM "Berechnung der Arbeitstage zwischen VON und BIS";

von           := ...;
bis           := ...;

feierTage     := "1.1.2005" : "6.1.2005" : ...;
halbeTage     := "24.12.2005" : "31.12.2005" : ...;

alleTageStr   := @Explode(@TextToTime(@Text(Von) + " - " + @Text(Bis)));
alleTage      := @TextToTime(alleTageStr);
wochenendeStr := @Replace(@Text(@Weekday(alleTage)); "1" : "7"; "x" : "x") + alleTageStr;
wochenende    := @Trim(@Right(wochenendeStr; "x"));
freieTage     := @Unique(feierTage : wochenende);
arbeitsTage   := @Trim(@Replace(alleTageStr; @Keywords(alleTageStr; freieTage; ""); ""));
halbeArbTage  := @Keywords(arbeitsTage; halbeTage; "");

anzahlTage    := @Elements(arbeitsTage) - (@Elements(halbeArbTage) / 2);
anzahlTage


Passend hierzu habe ich auch noch die Formel zu berechnen des n-ten Arbeitstags ab einem bestimmten Datum. Es werden die gleichen Konfigurationswerte wie oben benutzt.

...

Gruß,

Joachim

Allerdings funktioniert die Übergabe der Feiertage aus einem Profildokument nicht.

Meine Lösung:

Profildokument Feld:
  • Feldname: f_tage
  • Mehrfachwerte zulassen: Ja
  • Trennzeichen: Neue Zeile

Berechnen Button:

REM {Berechnung der Arbeitstage zwischen VON und BIS};

von           := StartDate;
bis           := EndDate;

FeierTage     := @GetProfileField("config";"f_tage");
halbeTage     := "24.12.2005" : "31.12.2005" : ...;

alleTageStr   := @Explode(@TextToTime(@Text(Von) + " - " + @Text(Bis)));
alleTage      := @TextToTime(alleTageStr);
wochenendeStr := @Replace(@Text(@Weekday(alleTage)); "1":"7" ; "x":"x") + alleTageStr;
wochenende    := @Trim(@Right(wochenendeStr; "x"));
freieTage     := @Unique(FeierTage : wochenende);
arbeitsTage   := @Trim(@Replace(alleTageStr; @Keywords(alleTageStr; freieTage; ""); ""));
halbeArbTage  := @Keywords(arbeitsTage; halbeTage; "");

anzahlTage    := @Elements(arbeitsTage) - (@Elements(halbeArbTage) / 2);
FIELD UTage   := anzahlTage;
@True


Meine Frage - wie kann ich die Feiertagsliste am besten aus einem Profildokument übergeben?

Freundliche Grüße

Mathias
Gespeichert
CarstenB
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 193


« Antworten #9 am: 14.03.11 - 15:12:52 »

Wo nutzt du die Formel? Maske, Ansicht, ...?

Gruß
Carsten
Gespeichert
MNoering
Frischling
*
Offline Offline

Beiträge: 6


« Antworten #10 am: 15.03.11 - 08:08:55 »

Moin Carsten,

ich nutze dir Formel in einer Maske hinter einem Button.

Viele Grüße
Mathias
Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2704



« Antworten #11 am: 15.03.11 - 08:46:51 »

Ich kann in der Formel keinen Fehler finden.

Wie kommen die Feiertage in das Profildokument? Bist Du sicher, dass die da wirklich drin stehen?
Gespeichert
MNoering
Frischling
*
Offline Offline

Beiträge: 6


« Antworten #12 am: 15.03.11 - 12:11:32 »

Hallo Peter,

das Profildokument selber ist ebenfalls eine Maske in dem die Feiertage eingetragen wurden (per Hand, also Feiertage in die Maske eintragen (auch korrekt getrennt) -> Maske speichern). Wenn ich die gespeicherte Profilmaske hinterher öffne sind die Tage weiterhin in dieser vorhanden.


Viele Grüße
Mathias
Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2704



« Antworten #13 am: 15.03.11 - 12:24:48 »

Und mit @GetProfileField kommst Du nicht ran? Sehr merkwürdig. Eigentlich kann man da doch nichts falsch machen, außer den falschen Profil- und/oder Feldnamen zu übergeben (bei Dir "config" und "f_tage", ist das korrekt?). Prüfe vielleicht noch einmal, welchen Profilnamen Du zum Öffnen des Profils und manuellen Eintragen der Daten verwendest.
Gespeichert
MNoering
Frischling
*
Offline Offline

Beiträge: 6


« Antworten #14 am: 15.03.11 - 15:46:05 »

Ich komme mit @GetProfileField soweit ran, dass er das Feiertagsfeld aus dem Profil komplett korrekt in ein Textfeld der Bearbeitungsmaske überträgt (über Feldvorgabewert). -Alle Tage fein säuberlich untereinander... Allerdings ignoriert er dies in der Berechnung... Weil wenn man die Tage direkt in die Variable "FeierTage" schreibt funktioniert es nämlich.
Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2704



« Antworten #15 am: 15.03.11 - 15:50:53 »

Wenn Du die Tage direkt schreibst, ist es Text. Vermutlich ist es im Profil Datum, vielleicht liegt da das Problem. Probier mal

FeierTage     := @Text (@GetProfileField("config";"f_tage"));

Wenn ich die Formel richtig verstehe, erwartet sie eine Textliste.
Gespeichert
MNoering
Frischling
*
Offline Offline

Beiträge: 6


« Antworten #16 am: 15.03.11 - 16:04:26 »

Hab es eben kontrolliert- ist beides Text. Hab es nichts desto trotz mit @Text versucht, nur keine Wirkung erzielt. Allerdings habe ich eben mal die Funktion ein bischen umgestellt:

FeierTage := F_Tage (das Feld in dem die Werte vom Profil über den Vorgabewert kommen)

Nun frage ich mich ob Domino evtl. ein Problem hat Berechnungen mit Werten aus externen Dokumenten durchzuführen. Ob man vielleicht erst den Wert in ein Feld oder so schreiben muss bevor es damit arbeiten kann- weil mit dieser Änderung klappt es nämlich oO...

Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2704



« Antworten #17 am: 15.03.11 - 16:08:55 »

Das wundert mich schon, allerdings arbeite ich selten mit Profildokumenten, deshalb kann ich nicht sagen, ob es da Merkwürdigkeiten gibt. Wenn es mit dem Feld funktioniert, würde ich das so lassen. Wenn das Feld "berechnet zur Anzeige" ist, wird es auch immer neu gerechnet und nicht im Dokument gespeichert.
Gespeichert
MNoering
Frischling
*
Offline Offline

Beiträge: 6


« Antworten #18 am: 15.03.11 - 16:22:09 »

Lotus/ Domino und seine Mysterien Wink ...

Werd's jetzt erstmal so lassen- nur noch das Feld verstecken in der Arbeitsmaske und fertig.
Ich danke allen für ihre Lösungsvorschläge, insbesondere dem Peter, der ja quasi eine Reaktionszeit von 30 Sekunden hat Wink .

Falls einem Crack in Sachen Profildokumente noch Einfälle kommen sollten, bin ich natürlich trotzdem interessiert diese zu lesen Smiley

In dem Sinne
Freundliche Grüße
Mathias


EDIT: Noch einmal einen schönen Gruß in die Runde- wollte nur kurz noch vermerken lassen, dass ich es geschafft habe, die Daten direkt aus dem Profil verwerten zu können ohne den Umweg über's Feld nehmen zu müssen. Das Stichwort heißt "Lotus-/ Dominohilfe"- noch einmal ein neues Profildokument nach dortiger Anleitung erstellt (haarklein bis auf den Punkt zu befolgen) und was soll ich sagen- es funktioniert. Mein Fehler beim ersten Profil war wohl, dass es in einer Ansicht angezeigt wurde und/ oder die Erstellung des Profils nicht über die Aktion @Command([EditProfileDocument];Profilname;Schlüssel) erfolgte. Deshalb auch nochmals obigen Aufruf an die Profil-Cracks durchgestrichen...
« Letzte Änderung: 16.03.11 - 10:46:17 von MNoering » Gespeichert
Tode
Moderatoren
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 6618


Geht nicht, gibt's (fast) nicht... *g*


WWW
« Antworten #19 am: 17.03.11 - 17:03:09 »

<OffTopic>: Witzig... Diese Formel kommt mir irgendwie sehr bekannt vor... Die habe ich zum ersten Mal in einer Workflow- Anwendung meiner Neckarsulmer Kollegen gesehen, die sicherlich schon 10 Jahre alt ist...

Ob die damals schon irgendwo geklaut haben?
</OffTopic>
Gespeichert

Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen...

Mit jedem Tag meines Lebens erhöht sich zwangsweise die Zahl derer...
... denen ich am AdminCamp ein Bier schulde... Wenn ich hier jemanden angehe: Das ist nie persönlich, sondern immer gegen die "Sparwut" der Firmen gedacht, die ungeschultes Personal in die Administration unternehmenskritischer Systeme werfen... Sprecht mich einfach am AdminCamp an, ich zahle gerne zur "Wiedergutmachung" das ein oder andere Bierchen an der Bar
Seiten: [1] 2 Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: