Datum einlesen und damit Rechnen

  • Hallo.


    Kurze Frage, die für so alte Hunde kein Problem sein dürfte.


    Ich habe einen Agenten, der Dokumente anhand von verschiedenen Kriterien von Feldinhalten auswertet. (läuft auch)


    so nun muss dort aber noch ein monatlicher Aspekt hinzu. Mein bisheriger Versuch sah so aus:


    Code
    For a = 1 To collection.CountSet doc_temp2=collection.GetnthDocument(a)'If (doc_temp2.(Feldname_Datum) >= "01.01.2008") And (doc_temp2.Feldname_Datum(0) < "01.02.2008") ThenIf (doc_temp2.Feldname2(0)="Feldinhalt") Thenzaehler=zaehler +1Form.Feldname = zaehlerEnd If'End IfNext


    Ich arbeite hier mit einem Profildokument, welches als Vorlage zum füllen anhand von vorhandenen Daten in anderen Masken der Datenbank dient.
    Beispiel:


    Code
    Set Formname=New Notesdocument(db)
    Formname.Form="Profildokument"
    Formname.doctype="Profildokument"
    Set collection = db.AllDocuments


    Nun soll eben monatlich soetwas erstellt werden. Ich habe gehört man kann ein datum in eine Zahl umwandeln und dann gut damit rechnen ? oder wie baue ich das Datum richtig in die Syntax mit ein ?

  • Schau dir mal die Klasse NotesDateTime an.
    Dan kannst Du wunderbar Datumswerte mit erstellen und dann mit der Methode TimeDifference Differenzen bilden.
    Damit solltest Du dann alles das was du brauchst erledigen können.


    cu

  • okay danke schau ich mir an. die sache ist nur ich möchte kein datum erstellen, sondern ich möchte das VORGEGEBENE Datum in einem Feld mit einem vorgegebenen Wert ( monatlich vergleichen und anhand dieses Vergleiches den Datensatz oder die Maske zuordnen. Wenn das mit deiner Methode geklappt hab geb ich nochmal bescheid

  • Das ist schon okay damit.
    Mit wunderbar Datumswerte mit erstellen meine ich auch nicht, dass da ein neues Datum erstellt wird und dies in dem Dokument gespeichert wird.


    Du erstellst halt während der Laufzeit deines Scripts neue Objekte, die von der Klasse NotesDateTime sind. Wie gesagt, die haben dann eine Methode, die die Differenz (in ms) bilden können.


    Wenn du nicht explizit die Werte in deinem Dokument speicherst, sind die Objekte nachdem das Skript fertig ist, auch wieder futsch.


    Bsp.


    dim date1 as NotesDateTime
    dim date2 as NotesDateTime


    set date1 = new NotesDateTime(now())
    set date2 = new NotesDateTime(MeinProfilDokument.DatumsFeld(0))


    if date1.TimeDifference(date2) < 0 then
    ' date2 ist kleiner als date1
    else
    ' date1 ist grösser oder gleich date2
    end if


    ' so würden die werte in einem dokument gespeichert


    call meinDokument.replaceItemValue("Datumsfeld", date1)
    call meinDokument.save(true, false)


    Ich hoffe, dass wird jetzt etwas klarer....

  • japp das ist gut verständlich und ich denke so werd ichs auch machen.
    nur eins noch in deinem Beispiel:


    dim date1 as NotesDateTime
    dim date2 as NotesDateTime



    [color=990000]set date1 = new NotesDateTime(now())[/color]
    set date2 = new NotesDateTime(MeinProfilDokument.DatumsFeld(0))


    hast du date1 als Now() gesetzt, kann ich da auch ein festes Datum eingeben, oder sollte ich das mit einem neuen DatumsFeld in meinem Profildokument regeln ? wie gesagt, ich möchte gern prüfen, ob der 15.01.2008 zwischen dem 01.01.2008 und dem 31.01.2008 liegt. ( was er in diesem Fall ja tut)


    Vielen Dank nochmal

    • Offizieller Beitrag

    dann setze doch Date1 auf einen anderen Wert.
    set date1 = new NotesDateTime("15.01.2008")


    Ansonsten kannst Du, da es ein Verleich ist, auch reine Strings vergleichen.


    date2.DateOnly liefert Dir einen Datums-String.


    Alternativ, damit Du unabhängig von den im Profilfeld gespeicherten Formeten bist, kannst Du die Datumsstrings noch mit Format formatieren.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • japp ich habs auch schon durch testen rausgefunden. Das ganz sieht nun so aus und funktioniert einwandfrei:


    [color=990000]Dim DokDat as NotesDateTime[/color]
    Dim AnfJan as NotesDateTime
    Set AnfJan = NewNotesdatetime("01/01/08")
    DimAnfFeb As NotesDateTime
    Set AnfFeb = New NotesDatetime("01/02/08")


    etc.



    For a = 1 to collection.count
    Set doc_temp = collection.GetNthDocument(a)
    [color=990000]Set DokDat = New NotesDateTime(doc_temp.Datumsfeld(0))[/color]



    If DokDat.TimeDifference(AnfFeb)<0 Then
    etc, etc....(weiterer Quelltext hier aber überflüssig)
    zaehler = zaehler +1
    End If


    In diesem Fall ist das die Abfrage für den Monat JANUAR


    Danke ihr wart wie immer eine große Hilfe

    • Offizieller Beitrag

    ich setze es dann mal auf erledigt., Kannst Du über den Themenpräfix auch selber erledigen.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Hiho Ich nochmal.


    Ich hab mal weiter rumprobiert und mit dem Datum hab ichs wohl =)
    Ich wollte gern ein Datum in einer Mask auslesen, um dann je nach Feldbezeichnung eine bestimmte Anzahl Tage draufrechnen. Dazu hab ich dann einen Agenten erstellt, der folgendermaßen in auszügen aussieht:



    Nun der Agent gibt mir keinen Fehler zurück, aber im debugger stellte ich fest das der Agent sich wohl das Datum aus dem Vorgabdatum feld zieht. aber er gibt es nicht an das Ausgabefeld zurück


    Könnt ihr mich bitte mit dem Vorschlaghammer auf meinen Fehler hinweisen ?


    *EDIT* alles klar ahb den Vorschlaghammer selbst gefunden. oben nun statt dem falschen der korrekt Code.