Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: hampa am 23.01.08 - 11:37:27

Titel: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: hampa am 23.01.08 - 11:37:27
Hallo zusammen

Auf der Suche nach einem Script-Beispiel für meine "Aufgabenstellung" im Betreff habe ich nahezu zwei Seiten Vorschläge erhalten, wie man das in der Formelsprache (@Businessdays) lösen kann.

Da ich das Ganze in einem Lotus-Script-Agent umsetzen muss, frage ich mal in die Runde, ob jemand das schon einmal mit Script gelöst hat.

Vielen Dank für eure Tips

Grüsse

Hampa
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: Glombi am 23.01.08 - 11:41:19
Ohne @BusinessDays brauchst Du in Script eine kleine Schleife.

Du musst solange iterieren, bis x = 0 ist. In der Schleife musst Du mit AdjustDay einen Tag weiter gehen und den Weekday abfragen. Bei 1 oder 7 dann x nicht dekrementieren und zum nächsten Tag.

Andreas
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: ata am 23.01.08 - 11:44:47
Hallo,

... mit Call notesDateTime.AdjustDay( ... ) kannst du ein Datum mit n Tagen erhalten...
... Weekday( datum) erhälst du den Wochentag als Zahl...

der Rest ist dann auf den Freitag zu berechnen.

Toni
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: hampa am 23.01.08 - 11:46:45
@Glombi

Halli Hallo

An sowas habe ich auch schon gedacht. Ich habe mir aber fest eingeredet, dass es da etwas "einfacheres", "prozessorschonenderes" geben müsste.  ;D

Da habe ich mich dann wohl geirrt.

Auf jedenfall vielen Dank für Deinen Hinweis

Grüsse

Hampa
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: Driri am 23.01.08 - 11:48:18
Was spricht gegen Evaluate ?
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: klaussal am 23.01.08 - 11:50:58
... und wie berücksichtigt er die Feiertage ?
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: DerAndre am 23.01.08 - 12:00:44
... aus den entsprechenden Landesteilen...
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: koehlerbv am 23.01.08 - 12:23:36
Okay, nach Feiertagen war nicht gefragt, da wird das komplexer  ;D

Man muss sich aber nicht unbedingt mit NotesDateTime einen abquälen - das Datum ist ja nur eine Zahl:
Code
	Dim vDate As Variant
	Dim vEndDate As Variant
	Dim iPeriod As Integer
	Dim iWorkingDays As Integer
	
	iPeriod = 10
	vEnddate = Now + iPeriod
	iWorkingDays = 0
	
	For vDate = Now To vEndDate
		If (Weekday (vDate) <> 1) And (Weekday (vDate) <> 7) Then
			iWorkingDays = iWorkingDays + 1
		End If
	Next
	
	Messagebox "Arbeitstage in den nächsten " & Cstr (iPeriod) & " Tage: " & Cstr (iWorkingDays)

Achtung: Hierbei wird der aktuelle Tag mitgezählt, ansonsten müsste es heissen: Now + 1 To vEndDate + 1.

HTH,
Bernhard
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: Glombi am 23.01.08 - 12:32:55
Irgendwie kann ich mich des Eindrucks nicht erwehren, dass Du etwas gegen NotesDateTime hast  ;D
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: hampa am 23.01.08 - 12:46:27
Hallo zusammen

Vielen Dank für eure wertvollen Hinweise.

Ich bau das Codebeispiel von Bernhard und melde mich dann nocheinmal, ob es das macht, was ich will das es macht.  ;D

Grüsse

Hampa
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: klaussal am 23.01.08 - 13:00:25
Es macht's.  :o
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: hampa am 23.01.08 - 13:13:16
@klauss

Was auch nicht anders zu erwarten war.....  ;)
Titel: Re: Now + x Tage ohne Wochende (Lotus Script)
Beitrag von: hampa am 23.01.08 - 13:49:55
So. Hier ist meine Lösung.

Code
Function addWorkDays(iPeriod As Integer)
	
	'// Diese Funktion zählt zum heutigen Datum die übergebenen Anzahl Tage hinzu
	'// ohne das aktuelle Datum zu berücksichtigen
	
	Dim iday As Integer
	
	'Tagesdatum als aktuelles festlegen
	Dim dateTime As New NotesDateTime( Now )
	
	While iday < iPeriod
		
		'Zum Datum einen Tag hinzuzählen
		Call dateTime.AdjustDay(1)
		
		'Prüfen, ob Samstag oder Sonntag
		If (Weekday (dateTime.DateOnly) <> 1) And (Weekday (dateTime.DateOnly) <> 7) Then
			iday = iday + 1
		End If		
	Wend	
	
	'// Rückgabe des neuen Datums
	addWorkDays = dateTime.DateOnly	
	
End Function

Bitte melden, wenn ihr was findet, dass da nicht hingehört.

Grüsse Hampa