Autor Thema: Berechnung der Arbeitstage zwischen zwei Terminen  (Gelesen 20302 mal)

Offline jr

  • Senior Mitglied
  • ****
  • Beiträge: 260
  • Geschlecht: Männlich
  • Bitte keine eierlegenden Wollmilchsäue...
    • Homepage
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
Wer in den Fußstapfen eines anderen geht, hinterlässt keine Spuren und kommt nie als Erster an.

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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)?
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

Offline diali

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.023
  • Geschlecht: Männlich
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #2 am: 21.06.05 - 09:25:24 »
@BusinessDays zieht die Feiertage nicht ab!

Gruß
Dirk
Gruß
Dirk

Offline jr

  • Senior Mitglied
  • ****
  • Beiträge: 260
  • Geschlecht: Männlich
  • Bitte keine eierlegenden Wollmilchsäue...
    • Homepage
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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
Wer in den Fußstapfen eines anderen geht, hinterlässt keine Spuren und kommt nie als Erster an.

Offline jr

  • Senior Mitglied
  • ****
  • Beiträge: 260
  • Geschlecht: Männlich
  • Bitte keine eierlegenden Wollmilchsäue...
    • Homepage
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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
Wer in den Fußstapfen eines anderen geht, hinterlässt keine Spuren und kommt nie als Erster an.

Offline jr

  • Senior Mitglied
  • ****
  • Beiträge: 260
  • Geschlecht: Männlich
  • Bitte keine eierlegenden Wollmilchsäue...
    • Homepage
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #5 am: 21.06.05 - 09:51:15 »
Unter R6 habe ich mit der @For-Schleife natürlich noch andere Möglichkeiten...
Wer in den Fußstapfen eines anderen geht, hinterlässt keine Spuren und kommt nie als Erster an.

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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.
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

Offline diali

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.023
  • Geschlecht: Männlich
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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
Gruß
Dirk

Offline MNoering

  • Frischling
  • *
  • Beiträge: 6
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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

Offline CarstenB

  • Aktives Mitglied
  • ***
  • Beiträge: 193
  • Geschlecht: Männlich
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #9 am: 14.03.11 - 15:12:52 »
Wo nutzt du die Formel? Maske, Ansicht, ...?

Gruß
Carsten

Offline MNoering

  • Frischling
  • *
  • Beiträge: 6
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #10 am: 15.03.11 - 08:08:55 »
Moin Carsten,

ich nutze dir Formel in einer Maske hinter einem Button.

Viele Grüße
Mathias

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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?

Offline MNoering

  • Frischling
  • *
  • Beiträge: 6
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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.

Offline MNoering

  • Frischling
  • *
  • Beiträge: 6
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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.

Offline MNoering

  • Frischling
  • *
  • Beiträge: 6
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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...


Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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.

Offline MNoering

  • Frischling
  • *
  • Beiträge: 6
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #18 am: 15.03.11 - 16:22:09 »
Lotus/ Domino und seine Mysterien ;) ...

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 ;) .

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

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 »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Berechnung der Arbeitstage zwischen zwei Terminen
« Antwort #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>
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... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz