Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: stussy am 12.04.05 - 14:05:01

Titel: Datum aktualisieren per Agent + AdjustMonth
Beitrag von: stussy am 12.04.05 - 14:05:01
Hi,

ich habe ein kleines Problem und hoffe das mir hier jemand helfen kann.
Es geht um folgendes:

Ich habe einen Agenten, der sich ein Datum holt und solange 2 Monate draufzählt, bis das Datum in der Zukunft liegt.

Soweit sogut...

Jetzt ist mir aufgefallen das in meinem Script im Februar ein Fehler auftritt.

Beispiel:

StartDatum: 31.12.2004
+ 2 Monate = 28.02.2005
+ 2 Monate = 28.04.2005 (statt 30.04.2005!!!) :-\

Hier ist mal ein Teil aus dem Agenten:

      If Status = "läuft"  And Cdat(AblaufKD.DateOnly) < Today And TurnusAktiv = "ja" Then
         
         Dim Ablauf As New NotesDateTime(Cstr (doc.datVTAblauf(0)))
         
         Do Until Cdat(Ablauf.DateOnly) > Today
            Turnus = Cint(doc.numVTKuendTurnus(0))
            Call Ablauf.AdjustMonth(Turnus)
            doc.datVTAblauf = Ablauf.DateOnly
            Ablaufdatum = Ablauf.DateOnly
         Loop
      End If

Bitte helft mir :)

Danke
Titel: Re: Datum aktualisieren per Agent + AdjustMonth
Beitrag von: Bastel123 am 12.04.05 - 17:27:34
Hallo,

da kann man nur tricksen. Wenn es immer der letzte Tag das Monats sein soll musst mann sich das neue Datum zusammensetzen.  Drei Monate addieren, dann Tag auf 01 setzen. Davon dann einen Tag abziehen.

Also
28. Februar 05      + 3 Monate
-> 28. Mai 2005     auf ersten Tag setzen
-> 01. Mai 2005     einen Tag abziehen
-> 30. April 2005

Ist ein wenig Aufwand, aber immer noch besser als mit dem 28. 29. 30. oder 31. einen Monats zu rechnen.

Gruß Bastel123
Titel: Re: Datum aktualisieren per Agent + AdjustMonth
Beitrag von: koehlerbv am 12.04.05 - 17:45:28
Soviel Aufwand ist das gar nicht, Bastel. Vor allem kann man dabei auf das Dealen mit der NotesDateTime class verzichten. Man kann alles mit Variants vom Typ 7 (DATETIME) machen.

- StartDate holen und Variant zuweisen
- Mit DateNumber den ersten Tag des Monats bilden und dabei gleich x Monate daraufzählen.
- Vom Zieldatum (Variant !) einfach 1 abziehen - das wäre der letzte des betreffenden Vormonats.

A-Bär: "stussy" will m.E. gar nicht immer den letzten des Monats haben - er hat sein Problem MIT dem Ultimo, wenn sein StartDate denn darauf fällt. Sein Problem ist: Er verändert permanent das Ausgangsdatum, vielmehr müsste es heissen (und hier durchaus mit der NotesDateTime class):
- Ausgangsdatum nehmen, plus zwei Monate -> prüfen, ob er über dem Limitdatum ist.
- Wenn nicht, Ausgangsdatum (!) nehmen, jetzt plus vier Monate (das muss also die Schleifenvariable sein) und wieder prüfen.

Was ich an seiner Lösung aber für arg gefährlich halte, ist das Speichern der Datumswerte in Textfeldern. Über kurz oder lang führt das zum "big Bang" (da braucht nur mal das OS eines beteiligten Computers auf ein anderes Datumsformat umgestellt werden ...). Datums-/Zeitwerte gehören meines Erachtens immer in Datums-/Zeitfelder. Für die Anzeige oder andere unkritische Aufgaben kann man dann ja on the fly immer noch in Text ändern.

Bernhard