Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Banni am 12.01.11 - 08:11:30

Titel: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: Banni am 12.01.11 - 08:11:30
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
Titel: Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: oxyd21 am 12.01.11 - 08:20:33
@Today + 5   -> klappt denn die Addition eines Datumswerts mit einem Integerwert?  :-:

probiers mal mit @adjust
Titel: Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: Driri am 12.01.11 - 08:23:49
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.
Titel: Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: eknori am 12.01.11 - 08:38:51
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))
Titel: Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: Peter Klett am 12.01.11 - 08:44:20
Ulrichs Variante gefällt mir am besten, und was ist mit Feiertagen, womöglich auch noch regionalen?

Sorry, wollte Dir nicht den Tag verderben  ;)
Titel: Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: Banni am 12.01.11 - 09:07:13
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
Titel: Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: eknori am 13.01.11 - 05:49:22
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/
Titel: Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: Peter Klett am 13.01.11 - 07:00:20
Hallo Ulrich,

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

Meine Frage war allerdings mehr als Hinweis für Jan gedacht ...
Titel: Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: Banni am 13.01.11 - 07:38:22
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
Titel: Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: eknori am 13.01.11 - 12:23:12
Definiere "open end". wenn du auf ein unbestimmtes Datum verweisen moechtest, warum willst du dann checken , ob es gueltig ist?
Titel: Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: Banni 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
Titel: Re: Datum Heute + 3 Tage anzeigen, dabei Wochenende überspringen
Beitrag von: eknori 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.