Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: schikoli am 02.01.06 - 12:26:07

Titel: Datumswert auslesen
Beitrag von: schikoli am 02.01.06 - 12:26:07
Hallo,

ich habe in meiner Maske ein field Datum (type Date) und möchte die eingegeben Daten in die Kalenderwoche umrechnen.

Der Formelscript für die Berechnung der KW funktioniert mittels

D:=@TextToTime(@Prompt([OkCancelEdit];

Ich möchte aber aus einem normalen Datumsfeld, das Datum auslesen und anschließend berechnen. Wie lese ich nun Feldwerte aus?


D:= @thisvalue;

funktioniert leider nicht


REM {D := [31/12/95]};

FirstOfYear := @Date(@Year(D); 1; 1);
LastOfYear := @Date(@Year(D); 12; 31);
FirstDayNum := @Weekday(FirstOfYear);
LastDayNum := @Weekday(LastOfYear);
REM {ISO weeks start on Monday and ends on Sunday.};
ISOFirstDayNum := @If(FirstDayNum = 1; 7; FirstDayNum - 1);
ISOLastDayNum := @If(LastDayNum = 1; 7; LastDayNum - 1);
REM {The first and last ISO week is the first};
REM {and last ISO week to include Thursday};
IsFirstWeek := 7 - ISOFirstDayNum > 2;
IsLastWeek := 7 - ISOLastDayNum < 4;
REM {The date of the first day of the first ISO week};
ISOFirstDay := @If(IsFirstWeek;
@Adjust(FirstOfYear; 0; 0; 1 - ISOFirstDayNum; 0; 0; 0);
@Adjust(FirstOfYear; 0; 0; 8 - ISOFirstDayNum; 0; 0; 0));
REM {The date of the last day of the last ISO week};
ISOLastDay := @If(IsLastWeek;
@Adjust(LastOfYear; 0; 0; 7 - ISOLastDayNum; 0; 0; 0);
@Adjust(LastOfYear; 0; 0; -ISOLastDayNum; 0; 0; 0));
REM {Date outside ISOFirstDay and ISOlastDay};
REM {are from the previous or next year};
REM {Return the ISO week number and exit};
FirstWeekNextYear := @If(D > ISOLastDay; @Return(@Prompt([Ok]; "FWNY";
@Text(@Year(D)+1) + "W01")); NULL);

REM {I suspect this is where Julian dates would be useful};
REM {A recursive call could be used in a real language};
LastWeekLastYear := (D - @Adjust(FirstOfYear; -1; 0; 0; 0; 0; 0))/60/60/24/7;
AdjustLastWeek := 1 - (LastWeekLastYear - @Integer(LastWeekLastYear));
@Set("LastWeekLastYear"; LastWeekLastYear + AdjustLastWeek);
@If(D < ISOFirstDay;
@Return(@Prompt([Ok]; "LWLY"; @Text(@Year(D) - 1) + "W" +
@Text(LastWeekLastYear))); NULL);

REM {If you get this far, the date falls into an ISO week this year};
REM {Convert the difference in seconds to weeks};
NumWeeks := (D - ISOFirstDay)/60/60/24/7;

REM {Fractions indicate that the date falls};
REM {in the middle of the ISO week};
WeekAdjust := 1 - (NumWeeks - @Integer(NumWeeks));
ISOWeekNum := NumWeeks + WeekAdjust;

REM {Conform to ISO 8601 format};
Pad:=@If(ISOWeekNum<10;"0";"");
Result := @Text(ISOWeekNum);
 Result

 

Vielen Dank für Eure Hilfe

und

Gesundes neues Jahr

LG
Titel: Re: Datumswert auslesen
Beitrag von: gossifu am 02.01.06 - 12:37:45
Hallo,

wo steht diese Formel, in der Eingabeumsetzung?
Versuche doch anstatt des @ThisValue, den Feldnamen direkt.

Ich würde eine Hilfsfeld nehmen, in welches ich das Datum eintrage und
ein Feld in welchem ich mit Deiner Formel die KW berechne. Ich weiß nämlich
nicht, ob ein Datumsfeld die Umwandlung in die KW möchte.

mfg

Kjeld

Titel: Re: Datumswert auslesen
Beitrag von: schikoli am 02.01.06 - 12:44:23
ja das habe ich auch schon probiert, ich habe mit thisvalue auf

field Datum (type Date) zugegriffen

und hatte aber im field KW (typeText) den Formelcode für die Berechnung!

Dennoch thisvalue funktioniert nicht, ich glaube es liegt daran:

This @function returns null outside a field formula.

es muss doch aber eine funktion geben, mit der man aus einem feld einen wert ausliest und in einem anderen übernimmt und umrechnet
Titel: Re: Datumswert auslesen
Beitrag von: gossifu am 02.01.06 - 12:47:50
Hallo,

aus der Hilfe:

Gibt den Wert des angegebenen Felds zurück.
Hinweis  Diese @Funktion gibt es ab Version 6.
Syntax
@GetField ( Feldname )
    Parameter
       Feldname
          Text. Der Name eines Felds im aktuellen Dokument.
       Rückgabewert
          Wert
          Der Wert des angegebenen Felds.

mfg

Kjeld   
Titel: Re: Datumswert auslesen
Beitrag von: koehlerbv am 02.01.06 - 12:49:56
D := Datum (wenn das Feld mit dem Datumswert so heisst).

An den absoluten Basics würde ich aber dringendst arbeiten (und erst danach anfangen, mit fremden Code zu dealen).

Bernhard
Titel: Re: Datumswert auslesen
Beitrag von: schikoli am 02.01.06 - 13:10:44
Hallo Bernard, Gossifu

vielen Dank für deinen Tip, ich bin dabei die Basics aufzuarbeiten.
Leider geht das nicht von heute auf morgen, zumal Lotus Notes nicht mein berufl. Arbeitsschwerpunkt ist.

Was mache ich falsch?

D:= Datum;

oder

D:= @GetField (Datum);

ich bekomme jedes mal Fehlermeldung:

Incorrect data type for operator or @Function: Time/Date expected
Titel: Re: Datumswert auslesen
Beitrag von: koehlerbv am 02.01.06 - 13:14:46
Ich vermute mal, das passiert genau in dem Moment, wenn ein neues Dokument angelegt wird? Die Formel zur Berechnung der KW kann natürlich nur ausgeführt werden, wenn ein gültiges Datum im entsprechenden Feld steht.
Titel: Re: Datumswert auslesen
Beitrag von: schikoli am 02.01.06 - 13:21:30
Hallo Bernard,

nein es funktioniert auch nicht, bei bereits existierenden Dokumenten, bei denen Daten im Feld Datum eingepflegt sind...
Titel: Re: Datumswert auslesen
Beitrag von: smoki am 02.01.06 - 13:25:28
Hallo!

Falls es sich beim Datums-Feld um ein Text-Feld handelt muss man noch @TextToTime verwenden!

Gruss
Chris
Titel: Re: Datumswert auslesen
Beitrag von: koehlerbv am 02.01.06 - 13:27:49
Die naheliegendste Vermutung: Der Inhalt des Feldes Datum ist nicht vom Typ Datum/Zeit.

Innerhalb des Formelapparates im Feld für die KW kann man sich ja mal mit @Prompt Zeile für Zeile vortasten, um zu sehen, welche Inhalte überhaupt gegeben sind und an welcher Stelle genau die Formelabarbeitung wegen Fehler abgebrochen wird.

Bernhard
Titel: Re: Datumswert auslesen
Beitrag von: flaite am 02.01.06 - 13:36:55
versuch mal:
Code
D:= @toTime(Datum);
Titel: Re: Datumswert auslesen
Beitrag von: koehlerbv am 02.01.06 - 13:40:18
Dann stimmt aber diese Aussage nicht, wenn es mit @TextToTime bzw. @ToTime funktionieren würde:

ich habe in meiner Maske ein field Datum (type Date) ...
Titel: Re: Datumswert auslesen
Beitrag von: schikoli am 02.01.06 - 14:21:25
Hallo,

ich habe eben das feld Datum vom Typ Date/time auf Text gesetzt und

D:= @totime(Datum) definiert.

es werden auch so keine Werte ausgelesen bzw umgerechnet.

Bernard,

ich lasse jetzt wieder Datum als Type Date/time und field KW als Text.

ich habe leider noch nicht verstanden was du meintest mit, dass der Inhalt des Feldes Datum nicht vom Typ Datum/Zeit ist, denn als solchen habe ich ja das Feld Datum definiert.

Gibt es eine Art Debugging Fkt unter Lotus Designer?

Titel: Re: Datumswert auslesen
Beitrag von: gossifu am 02.01.06 - 16:35:12
Hallo,

ich hab das mal nachgestellt, ein Datumsfeld 'Datum' und ein KW - Feld KW.

D habe ich mit

D:= @If(Datum = "";@Today;Datum);

berechnet. Rest deiner Formel genommen.

Funzt einwandfrei.

Kjeld

(

D:= @If(Datum = "";@Today;Datum);
REM {D := [31/12/95]};

FirstOfYear := @Date(@Year(D); 1; 1);
LastOfYear := @Date(@Year(D); 12; 31);
FirstDayNum := @Weekday(FirstOfYear);
LastDayNum := @Weekday(LastOfYear);
REM {ISO weeks start on Monday and ends on Sunday.};
ISOFirstDayNum := @If(FirstDayNum = 1; 7; FirstDayNum - 1);
ISOLastDayNum := @If(LastDayNum = 1; 7; LastDayNum - 1);
REM {The first and last ISO week is the first};
REM {and last ISO week to include Thursday};
IsFirstWeek := 7 - ISOFirstDayNum > 2;
IsLastWeek := 7 - ISOLastDayNum < 4;
REM {The date of the first day of the first ISO week};
ISOFirstDay := @If(IsFirstWeek;
@Adjust(FirstOfYear; 0; 0; 1 - ISOFirstDayNum; 0; 0; 0);
@Adjust(FirstOfYear; 0; 0; 8 - ISOFirstDayNum; 0; 0; 0));
REM {The date of the last day of the last ISO week};
ISOLastDay := @If(IsLastWeek;
@Adjust(LastOfYear; 0; 0; 7 - ISOLastDayNum; 0; 0; 0);
@Adjust(LastOfYear; 0; 0; -ISOLastDayNum; 0; 0; 0));
REM {Date outside ISOFirstDay and ISOlastDay};
REM {are from the previous or next year};
REM {Return the ISO week number and exit};
FirstWeekNextYear := @If(D > ISOLastDay; @Return(@Prompt([Ok]; "FWNY";
@Text(@Year(D)+1) + "W01")); NULL);

REM {I suspect this is where Julian dates would be useful};
REM {A recursive call could be used in a real language};
LastWeekLastYear := (D - @Adjust(FirstOfYear; -1; 0; 0; 0; 0; 0))/60/60/24/7;
AdjustLastWeek := 1 - (LastWeekLastYear - @Integer(LastWeekLastYear));
@Set("LastWeekLastYear"; LastWeekLastYear + AdjustLastWeek);
@If(D < ISOFirstDay;
@Return(@Prompt([Ok]; "LWLY"; @Text(@Year(D) - 1) + "W" +
@Text(LastWeekLastYear))); NULL);

REM {If you get this far, the date falls into an ISO week this year};
REM {Convert the difference in seconds to weeks};
NumWeeks := (D - ISOFirstDay)/60/60/24/7;

REM {Fractions indicate that the date falls};
REM {in the middle of the ISO week};
WeekAdjust := 1 - (NumWeeks - @Integer(NumWeeks));
ISOWeekNum := NumWeeks + WeekAdjust;

REM {Conform to ISO 8601 format};
Pad:=@If(ISOWeekNum<10;"0";"");
Result := @Text(ISOWeekNum);
 Result

)
Titel: Re: Datumswert auslesen
Beitrag von: flaite am 02.01.06 - 17:41:23
Dann stimmt aber diese Aussage nicht, wenn es mit @TextToTime bzw. @ToTime funktionieren würde:

ich habe in meiner Maske ein field Datum (type Date) ...
Wie du weisst, kann man nicht sicher sein, ob das Feld im Dokument tatsächlich date/time ist, nur weil das zufällig in der Maske steht.

Vielleicht noch auf nicht null überprüfen...
Code
@If(@IsNull(Datum); "";@toTime(Datum)):