Autor Thema: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen  (Gelesen 10044 mal)

Offline Banni

  • Senior Mitglied
  • ****
  • Beiträge: 463
  • Geschlecht: Männlich
Hallo allerseits,

ich hab folgendes Problem, wo ich nicht weiterkomme.

In einem Feld vom Typ Datum und berechnet soll das Datum von heute plus 3 Tage angezeigt und die Wochenenden übersrungen werden. Heißt heute ist der 12.01.2011 und angezeigt werden soll der 17.01.2011.

Habe dazu folgende Formel in den Vorgabewert gesetzt:

@If( @Weekday(@Today) + 3=7; @Today + 5; @If( @Weekday(@Today + 3) = 1; @Today + 1; (@Today + 3) ) )

Beim Aufruf der Maske kommt nun die FM: "Feld xyz: Falscher Datentyp für Operator oder @Funktion".
Lt. der Designerhilfe liefert @Today ja Datumswerte zurück, sollte also auch funktionieren.

Hat jemand nen Tip, wo ich hier falsch liege?

Danke schon mal.

Jan
Jan Bauer
Notes /Domino 6.5, 8

Geht nicht, gibt's nicht. Geht höchstens schwer...

Offline oxyd21

  • Senior Mitglied
  • ****
  • Beiträge: 371
  • Geschlecht: Männlich
@Today + 5   -> klappt denn die Addition eines Datumswerts mit einem Integerwert?  :-:

probiers mal mit @adjust

Driri

  • Gast
Ich bin mir gerade nicht sicher, ob man das in Formelsprache tatsächlich so machen kann. Ich würde das mit @Adjust machen.

datum:=@Today;
wtag:=@Weekday(datum);
If(wtag=4 | wtag=5; @Adjust(datum;0;0;5;0;0;0); @Adjust(datum;0;0;3;0;0;0))

Ist jetzt aus dem Gedächtnis, schau Dir @Adjust noch einmal in der Designerhilfe an.

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Schuss ins Blaue:

n:=@Adjust(@Today;0;0;3;0;0;0);
@If(
@Weekday(n)=1;nd:=@Adjust(n;0;0;1;0;0;0);
@If(@Weekday(n)=7;nd:=@Adjust(n;0;0;2;0;0;0);
nd:=n));
@Prompt([Ok];"";@Text(nd))
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Ulrichs Variante gefällt mir am besten, und was ist mit Feiertagen, womöglich auch noch regionalen?

Sorry, wollte Dir nicht den Tag verderben  ;)

Offline Banni

  • Senior Mitglied
  • ****
  • Beiträge: 463
  • Geschlecht: Männlich
Danke für die schnellen Antworten.
@adjust war der entscheidende Hinweis.

Habs jetzt mit folgender Formel hinbekommen:

mydate := @Now;
@If( @Weekday(mydate) + 3 >= 7; @Adjust(mydate;0;0;5;0;0;0); @If( @Weekday(mydate) = 1; @Adjust(mydate;0;0;1;0;0;0); @Adjust(mydate;0;0;3;0;0;0)))

...und was ist mit Feiertagen, womöglich auch noch regionalen?
Da die Anzeige "nur" ein Richtwert sein soll, können Feiertage an dieser Stelle ignoriert werden. Trotzdem danke für den Hinweis.

Jan
Jan Bauer
Notes /Domino 6.5, 8

Geht nicht, gibt's nicht. Geht höchstens schwer...

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Hier noch die von Peter angefragte Lösung, die auch eine Liste von Tagen berücksichtigt, die nicht Arbeitstag sind.

Code
x:= @Adjust ( @Today; 0; 0; 3; 0; 0; 0 );

EXCLUDED_DAYS_OF_WEEK:= 1:7;
EXCLUDED_DATES:= @ToTime ( "[17.01.2011]":"[01.02.2011]" );

_result:= @BusinessDays (
x ; x ;
EXCLUDED_DAYS_OF_WEEK;
EXCLUDED_DATES);

@If ( _result=0;
@Do (
s := x ;
d:= s;
n := 0;
@While ( n < 1;
d:= @Adjust ( d; 0; 0; 1; 0; 0; 0 );
n := @BusinessDays ( s; d; EXCLUDED_DAYS_OF_WEEK; EXCLUDED_DATES )
)
);
d:= x);

@Prompt( [Ok]; ""; @Text ( d ) )


x wird auf einen Wert @Today + 3 Tage gesetzt
Dann wird geprüft, ob das neue Datum ein Arbeitstag ist. Was ein Arbeitstag ist, wird durch die Parameter bei @businessDays festgelegt.
Ist das neue Datum kein Arbeitstag, dann wird in einer Schleife das Datum um einen Tag erhöht und wieder geprüft.
Das geschieht so lange, bis das Datum auf einen gültigen Arbeitstag fällt.

Die Funktion verwenden wir übrigens in !!HELP!! bei der Berechnung der Bearbeitungszeit eines Tickets.

Hier noch die Lösung in LS

http://www.eknori.de/2007-06-10/adjust-datetime-to-next-business-day/

http://www.eknori.de/2007-06-16/businessdays-in-ls/

http://www.eknori.de/2007-06-16/adjust-datetime-to-next-business-day-part-ii/
« Letzte Änderung: 13.01.11 - 06:29:47 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Hallo Ulrich,

schicke Lösung, @BusinessDays war mir bisher unbekannt.

Meine Frage war allerdings mehr als Hinweis für Jan gedacht ...

Offline Banni

  • Senior Mitglied
  • ****
  • Beiträge: 463
  • Geschlecht: Männlich
Hallo Ulrich,

wirklich super, Danke.
Noch eine Frage dazu:
Gibt es eine einfache Möglichkeit, bei @businessdays das Enddatum auf "open end" zu definieren oder muss man hier selbst stricken? Ich hatte für letzteren Fall an den Umweg mit einem Profildokument gedacht, wo das vorläufige Enddatum drinsteht und man dieses regelmäßig verlängert, z.B. mit einem Agent.

Grüß Jan
Jan Bauer
Notes /Domino 6.5, 8

Geht nicht, gibt's nicht. Geht höchstens schwer...

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Definiere "open end". wenn du auf ein unbestimmtes Datum verweisen moechtest, warum willst du dann checken , ob es gueltig ist?
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Banni

  • Senior Mitglied
  • ****
  • Beiträge: 463
  • Geschlecht: Männlich
Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
« Antwort #10 am: 13.01.11 - 13:46:56 »
Definiere "open end". wenn du auf ein unbestimmtes Datum verweisen moechtest, warum willst du dann checken , ob es gueltig ist?
Da war ich heute früh wohl noch nicht ganz wach. Ich bin über den Parameter DatestoExclude gestolpert und hab übersehen, dass ja Start- und Endedatum zuerst auf die gleichen Werte (heute + 3 Tage) gesetzt und dann erst in der Schleife das Endedatum hochgezählt wird.

Damit hat sich meine letzte Frage natürlich erledigt.

Danke nochmal.

Jan
Jan Bauer
Notes /Domino 6.5, 8

Geht nicht, gibt's nicht. Geht höchstens schwer...

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
« Antwort #11 am: 13.01.11 - 17:34:09 »
Zitat
@BusinessDays war mir bisher unbekannt.
@Peter: Prima, und du bist bestimmt nicht der Einzige. Daher habe ich das Beispiel aus diesem Thread auch gleich noch in meine EntwicklerCamp 11 Session aufgenommen.

Schönes Beispiel aus der Praxis.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz