Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: nsm am 02.12.02 - 18:21:23

Titel: restmonate zwischen heute und enddatum berechnen
Beitrag von: nsm am 02.12.02 - 18:21:23
 ???

hallo leute,
ich habe ein problem mit der datumsberechnung.

user füllt das feld A (TEXT) mit einen datumswert, feld B (ZAHL) hat den wert 36.
feld C berechnet das enddatum (feld A + Feld B)
das funkt auch alles bestens.

nun soll aber im feld D die anzahl der restlichen monate
zwischen heute und dem enddatum (feld C) erscheinen.

ich bring das nicht hin. wer hat einen tip für mich?

danke nsm
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: ata am 02.12.02 - 19:03:29
... in LotusScript habe ich dir sofort eine Lösung...

http://www.anton-tauscher.de/download/DateHandling.zip (http://www.anton-tauscher.de/download/DateHandling.zip)

... in der Datenbank habe ich eine Library mit en verschiedensten Datumsberechnung, u.a. auch die Anzahl der Monate zwischen zwei Datumsangaben

ata
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: wflamme am 03.12.02 - 06:39:23
nun soll aber im feld D die anzahl der restlichen monate
zwischen heute und dem enddatum (feld C) erscheinen.

Das Problem ist, was Du unter Monate verstehst. Es gibt nämlich welche von 28-31 Tagen, also ist 'Monat' kein zulässiges Zeitmaß, sondern muß definiert werden.
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: nsm am 03.12.02 - 09:29:19
danke für die raschen antworten!

@ ata,
ich behersche leider kein script - ist es möglich diese eine funktion
bei mir einzubauen?


nsm
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: ata am 03.12.02 - 13:28:10
... wie heißen deine Felder? Ich schicke dir den Code dann zu...

ata
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: nsm am 03.12.02 - 14:25:05
hallo ata,

meine feldnamen lauten:

fld_in_lidatum       =    startdatum (text)
fld_in_ab_ende      =   enddatum (text)
fld_in_ab_monate_anz   =   anzahl der monate zwischen den beiden datumswerten (text)

vielen dank für deine hilfe

nsm
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: ata am 03.12.02 - 14:28:54
... sorry, noch was - bei der Berechnung wird der Start und der End-Monat mitgerechnet, also inklusive...

... wo willst du den Code verwenden, in einer Schaltfläche oder im Postrecalc?...

ata
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: ata am 03.12.02 - 15:26:40
... ich hab dir das auf die schnelle mal zusammengeschrieben.
Den kompletten Code fügst du in einer Schaltfläche bei LotusScript in das Ereignis "Click". Die angehängte Funktion löst sich dann von alleine an die richtige Position...

... im Postrecalc verhält es sich genauso, es muß eben LotusScript ausgewählt sein ...
Code
' # Ich habe den Code in einer Schaltfläche postiert, 
' # damit initialisiere ich das doc über ws...  - ata
' # ... berechnet mit Hilfe der Funktion AnzMonate() die Anzahl der 
' # ...betroffenen Monate zwischen Start und EndDatum...
' # ... Ich habe keine Validierung der Felder berücksichtigt...
   
   Dim ws As New NotesUIWorkspace
   Dim docThis As NotesDocument
   Dim sStart As String
   Dim sEnd As String   
   
   ' # Set docThis = Source.Document ' # wenn im PostRecalc, dann diese Zeile aktivieren
   Set docThis = ws.CurrentDocument.Document ' # wenn in einer Schaltfläche, dann diese Zeile aktivieren
   
   ' # ... die Feldwerte einlesen
   sStart = docThis.fld_in_lidatum(0)
   sEnd = docThis.fld_in_ab_ende(0)
   
   ' # und den Wert in das Ausgabefeld schreiben
   docThis.fld_in_ab_monate_anz = Cstr(AnzMonate(sStart, sEnd))   
   ' # ... müßte funktionen - ata

Function AnzMonate(StartDatum As String, EndDatum As String) As Integer
' # ata - Liefert die Anzahl der tangierten Monate zurück
' # StartDatum und EndDatum sind Datumsstrings
   AnzMonate = 1 ' # Ein Monat ist mindestens betroffen   
   If AnzJahre(StartDatum, EndDatum) = 1 Then
      ' # Der Zeitraum liegt innerhalb eines Kalenderjahres
      AnzMonate =  Month(Datevalue(EndDatum)) -  Month(Datevalue(StartDatum)) +1
   Else
      ' # Der Zeitraum liegt über mehr als ein Kalenderjahr
      AnzMonate = ((AnzJahre(StartDatum, EndDatum)-1) * 12) + (Month(Datevalue(EndDatum)) -  Month(Datevalue(StartDatum)) +1)
   End If   
End Function
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: nsm am 03.12.02 - 18:10:46
danke, werde es heute abend versuchen

nsm
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: nsm am 04.12.02 - 09:53:17
@ ata,

habe dein script eingebaut.

ich erhalte immer eine fehlermeldung.
ich glaube zu wissen, daß eine fumktion ANZJahre fehlt???

was ich noch vergessen habe:
ich habe im ersten posting geschrieben, daß ich restmonate
vom heute bis zum enddatum (fld_in_ab_ende) berechnen möchte.

ich habe bei der faldangabe einen fehler gemacht und dir als
startwert das feld fld_in_lidatum anstelle von @today angegeben.

bitte entschuldige

danek für deine hilfe

nsm
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: ata am 04.12.02 - 10:39:52
... sorry, da war ich wohl zu schnell.... hier ist die Funktion AnzJahre

Function AnzJahre(StartDatum As String, EndDatum As String) As Integer
' # ata - Liefert die Anzahl der tangierten Jahre zurück
   AnzJahre = Year(Datevalue(EndDatum)) -  Year(Datevalue(StartDatum)) +1
End Function

Auch dort einfügen...

anstelle von
    sStart = docThis.fld_in_lidatum(0)
gibst du
   sStart = Today()
ein...

ata



Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: nsm am 04.12.02 - 12:04:04
super, super, super, ;D ;D ;D

danke läuft sehr gut

nsm
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: nsm am 04.12.02 - 13:09:19
hallo ata,

nun habe ich noch eine frage zu deinem script:

kann ich das ganze auch in einem agent verwenden?
wenn ja, was muß ich umstallen?

vielen dank
nsm
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: ata am 04.12.02 - 13:15:58
Generell lässt sich das Script auch in einem Agent verwenden, es kommt allerdings darauf an...

... was hast du denn vor?
Den Agent verwenden, um im Frontend-Dokument was zu ändern,
oder nur im Backend arbeitend was ändern?

Im Frontend ändern funktioniert wie ich dir den Code gesendet habe. Du musst eben die beiden Funktionen auch in den Agenten übernehmen...

Bei Backend mußt du dir die Dokumente anders initialisieren, über eine View, DokumentCollection, oder was auch immer...

ata

Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: nsm am 04.12.02 - 13:25:25
hallo ata,

ich habe nun folgendes problem:

wenn ich den code ins postrecalc stelle, erhalte ich beim öffnen
und jeder aktion eine fehlermeldung, daß in einem verwendeten
feld kein wert steht. das ist ja auch kalr, da ich ja erst mit dem
befüllen der maske beginne.

nun war meine idee, den code über einen agenten auszulösen
wenn das doc bearbeitet wird.


das ist das eine, das andere stellt sich wie folgt dar:
ich errechne aufgrund des wertes der such das script ermittelt wird
eine summe. nun ist dise summe nur aktuell, wenn ich das doc
bearbeite das script susführe und erneut speichere.

diese summe soll allerdings in einer view angezeit werden.
meine idee dazu, ein agent der die monatsberechnung jeden
1 eines monats aktualisiert. somit habe ich immer monatsaktuelle
views.

oder sehe ich da was falsch?

nsm
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: Polarbaer am 04.12.02 - 13:43:07
mit Formelsprache:

(@Year(feldC) - @Year(@Today))*12+(@Month(feldC) - @Month(@Today))

vielleicht reicht das ja auch?
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: nsm am 04.12.02 - 15:37:24
@ Polarbaer

bei dieser formel erhalte ich einen wert von zb -22024.
ich glaube nicht, daß es damit geht.

nsm
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: Polarbaer am 04.12.02 - 16:09:09
dann schau Dir mal die Werte @Year(feldC) und @Year(@Today) an. @Year(@Today) sollte 2002 liefern und  @Year(feldC) etwas aehnliches. Diese Differenz (in Klammern!) mal 12 ergibt wieder einen kleinen Wert (0,12,24,36,...) Die Differenz der Monate liegt irgendwo zwischen -11 und 11. Also ist -22024 eigentlich ausgeschlossen ???
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: nsm am 05.12.02 - 13:13:16
@ Polarbaer

hatte das problem, daß die umwandlung von text nach date
und das gleichzeitige berechnen nicht geklappt hat.

habe das genze in zwei neue felder gesetzt und siehe da
es geht.

danek für deine hilfe.

@ ata

danke für die hilfe.

ich muß mir erst noch klrwerden welche der beiden lösungen
ich verwenden werde.
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: Polarbaer am 05.12.02 - 13:20:52
@nsm
...gern geschehen, keine Ursache...aber wenn ich die Formel mit dem Script vergleiche, so ist das Script doch "mit Kanonen auf Spatzen schiessen", oder?
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: nsm am 05.12.02 - 13:35:26
@ Polarbaer

bei uns sabg man(n):
"hinterher ist ma imma gscheida"

ich bin kein programmierer, daher habe ich gerade noch rausbekommen, daß es mit @adjust nicht geht.
das es so einfach mit der formelsprache läuft habe ich offensichtlich außeracht gelassen.

da ich kein script kann, binn ich immer auf der suche nach formeln, denn die verstehe ich leichter.

in diesem fall ist es sicherlich so, daß das script zu mächtig ist.

mfg

nsm
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: ata am 05.12.02 - 19:06:20
@Polarbaer...

... da hast du sicherlich recht, wenn man die Formel nur gerade mal an der Stelle braucht, ist das mit Kanonen nach Spatzen geschossen...

... ich neige manchmal zur Bequemlichkeit, und da ich die Klasse mit den Funktionen schon hae, warum soll ich mir da den Kopf über Formeln zerbrechen..

ata
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: Polarbaer am 06.12.02 - 10:10:33
@ata

...vielleicht weil Formeln webfaehig sind? Aber ich will jetzt keine Diskussion ueber Formen vs. Script lostreten. Ich nehme auch gern Script wenn es nötig ist.
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: ata am 06.12.02 - 22:07:26
... nicht alle Formeln sind webfähig... die hier verwendeten ja..

... soll das gane denn auch webfähig sein? Dann wäre Formel auf jeden Fall sicher besser...

... wenn du im Postrecalc die Fehlermeldungen bekommst, dann muß man dort eben abfangen, daß wenn das Feld leer ist die Berechnung nicht durchgeführt werden soll...

If doc.Feldname(0) = "" Then
   ' # überspringen
Else
   ' # Berechung ausführen
End If

ata
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: klaussal am 06.12.02 - 23:02:45
@ata,

wann schläfst du eigentlich ?
 ;)
Titel: Re:restmonate zwischen heute und enddatum berechnen
Beitrag von: ata am 07.12.02 - 00:52:23
...  ;D kommt auch vor...  ;D

... na ja, im Augenblick hat das auch was mit meinem kleinen Zeh zu tun, den ich in Konfrontation mit einem Türrahmen gebracht habe...

... wer den Schaden hat, braucht.... weniger Schlaf...

... auf jeden Fall habe ich jetzt einen gesunden Respekt vor Türrahmen...

... und der LotusScript-Kurs gedeiht...

ata   :-\