Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: cebolina am 02.08.12 - 17:57:20

Titel: Termin berechnen aufgrund eines Datums und ausgewähltem Wochentag
Beitrag von: cebolina am 02.08.12 - 17:57:20
Hallo,

ich brauch mal wieder einen Tipp.

Ich habe ein Feld "Wochentage" (Typ: Kontrollkästchen) mit diesen Auswahlwerten:
Sonntag | 1
Montag | 2
Dienstag | 3
Mittwoch | 4
Donnerstag | 5
Freitag | 6
Samstag | 7

Ich habe ein weiteres Feld "Datum" (Typ: Date/Time, Bearbeitbar).

Abhängig von diesem Datum will ich im Querysave das "nächste Datum" berechnen und in das Feld "Termin" (Typ: Date/Time) schreiben.

Beispiel 1:
Wochentage = "2" : "4" : "7" (Montag, Mittwoch, Samstag)
Datum = 02.08.2012 (Donnerstag)
Termin = 04.08.2012 (Samstag)

Beispiel 2:
Wochentage = "3" (Dienstag)
Datum = 02.08.2012 (Donnerstag)
Termin = 07.08.2012 (Dienstag)

Beispiel 3:
Wochentage = "6" (Freitag)
Datum = 02.08.2012 (Donnerstag)
Termin = 03.08.2012 (Freitag)

Mit der Berechnung von "Termin" aufgrund der gewählten Wochentage in Abhängigkeit des Datums tue ich mir schwer. Wäre nett, wenn mir jemand einen Ansatz liefern könnte.

Danke und Gruß
Stefan
Titel: Re: Termin berechnen aufgrund eines Datums und ausgewähltem Wochentag
Beitrag von: Peter Klett am 02.08.12 - 18:37:07
Dim termin As Variant
termin = doc.Datum (0)
Do
   termin = termin + 1
   Forall wt in doc.Wochentage
      If Weekday (termin) = Cint (wt) Then
         Exit Do
      End If
   End Forall
Loop
doc.Termin = termin

Noch ein bißchen Errorhandling drum rum (Wochentag darf nicht leer sein), dann sollte das tun
Titel: Re: Termin berechnen aufgrund eines Datums und ausgewähltem Wochentag
Beitrag von: koehlerbv am 02.08.12 - 18:48:17
Für das Beispiel eins noch:
Vor Peters Schleife ermittelst Du, ob Ubound (Wochentage) > 0 ist. Wenn nicht: wt ist Cint (Wochentag).
Wenn nicht:
Das Array Wochentage durchlaufen, wenn Wochentage (Schleifenvariable) > Weekday (Datum), dann wt darauf setzen, sonst weiter.
Ist am Ende wt leer, dann ist wt = Weekday (Wochentage (0)).

Man kann das ganze noch "eleganter" machen (wenn Weekday (Datum) < wt, dann Termin = Datum + (wt - Weekday (Datum)), sonst Termin = Datum + (7 - Weekday (Datum)) + wt), aber für die Laufzeit gewinnst Du da nix.

HTH,
Bernhard
Titel: Re: Termin berechnen aufgrund eines Datums und ausgewähltem Wochentag
Beitrag von: eknori am 03.08.12 - 06:18:19
Meinst du sowas hier: http://www.eknori.de/2007-06-10/adjust-datetime-to-next-business-day/ u. http://www.eknori.de/2007-06-16/adjust-datetime-to-next-business-day-part-ii/ ?
Titel: Re: Termin berechnen aufgrund eines Datums und ausgewähltem Wochentag
Beitrag von: cebolina am 03.08.12 - 09:33:49
@Peter Klett: Perfekt  (wie immer ;-))
ErrorHandling ist klar.

Vielen Dank für die Unterstützung (auch an Bernhard und Eknori)

Gruß Stefan