[gelöst]DateFormula

5. Dezember 2011 15:33

Hallo zusammen,

Wir berechnen ein MHD mit Hilfe einer in der Artikel Tabelle hinterlegten Dateformula, da steht jetzt z.B. folgender Wert drin : 12M
Was bei der Berechung mit Calcdate dann ja beim 05.12.11 den 05.12.12 gibt... Soweit ganz einfach....

Jetzt habe ich aber das Datum 05.12.12 und möchte über den im Artikelstammhinterlegten Wert zurück auf das Ursprungsdatum kommen...
Also CALCDATE("05.12.12",'<-12M>') sorry... falschrum geschrieben
richtig...
Also CALCDATE('<-12M>',"05.12.12")

Wie kann ich aus dem hinterlegten 12M ein -12M machen? Das muss man doch irgendwie in eine Dateformula Variable schreiben können, oder?
Bei allem was in Richtung TEXT geht schmeisst mir Fehlermeldungen .... Typkonvertierung...

Steh ich auf dem Schlauch? Habe ich den faschen Ansatz? Oder geht das einfach nicht?

Danke für eure Hilfe...

Gruß Matthias
Zuletzt geändert von himi81 am 6. Dezember 2011 12:40, insgesamt 2-mal geändert.

Re: DateFormula

5. Dezember 2011 15:36

Schau dir noch einmal genau den Onlinehilfeartikel zu CALCDATE an ;-)
Die Datumsformel ist der erste Parameter.

Re: DateFormula

5. Dezember 2011 15:45

Hallo Natalie,

sorry, ich versteh die Erläuterung da nicht so wirklich...
Wenn ich folgenden Code habe:

"RLZ-Date":=CALCDATE(item."Expiration Calculation","Last Expiration Date");
Dann müsste ich doch vor dem "Last Expration Date" ein [- ]Minuszeichen setzten, es gibt doch nur 2 Parameter...??

Gruß Matthias

Re: DateFormula

5. Dezember 2011 15:53

Ich bezog mich nur darauf, dass du geschrieben hattest:
himi81 hat geschrieben:Also CALCDATE("05.12.12",'<-12M>')

Aber das hast du ja korrigiert.

himi81 hat geschrieben:"RLZ-Date":=CALCDATE(item."Expiration Calculation","Last Expiration Date");
Dann müsste ich doch vor dem "Last Expration Date" ein [- ]Minuszeichen setzten, es gibt doch nur 2 Parameter...??

Nein, das Minuszeichen gehört zur Formel. Du hattest doch den richtigen Ansatz:
himi81 hat geschrieben:Also CALCDATE('<-12M>',"05.12.12")


Vermutlich kannst du die Datumsformel nur so mit einem Minus versehen:
- Datumsformel in Text konvertieren (mit FORMAT)
- Minuszeichen davorsetzen
- aus Text zurück nach DateFormula konvertieren (probiers mal mit EVALUATE).

Re: DateFormula

5. Dezember 2011 16:31

Bitte beachtet, dass eine Datumsformel auch etwas komplexer sein könnte:
MeineDateFormulaAlsText := 2M-1W+3T
Hier muss man also nicht nur ein Minus davorsetzen, sondern auch alle anderen Operatoren negieren.
Lösung:
  1. Steht am Anfang kein Plus oder Minus, dann fügen wir vor dem Text ein Plus ein
    Ergebnis: +2M-1W+3T
  2. Jetzt negieren wir alle Operatoren:
    MeineDateFormulaAlsText := STRSUBSTNO(MeineDateFormulaAlsText,'+-','-+');
  3. Nun können wir mit der negierten Datumsformel rückwärts rechnen

Re: DateFormula

5. Dezember 2011 17:18

Timo Lässer hat geschrieben:Bitte beachtet, dass eine Datumsformel auch etwas komplexer sein könnte:
MeineDateFormulaAlsText := 2M-1W+3T
Hier muss man also nicht nur ein Minus davorsetzen, sondern auch alle anderen Operatoren negieren.
Lösung:
  1. Steht am Anfang kein Plus oder Minus, dann fügen wir vor dem Text ein Plus ein
    Ergebnis: +2M-1W+3T
  2. Jetzt negieren wir alle Operatoren:
    MeineDateFormulaAlsText := STRSUBSTNO(MeineDateFormulaAlsText,'+-','-+');
  3. Nun können wir mit der negierten Datumsformel rückwärts rechnen


Das von Timo sollte gut klappen!

Zumindestens solange die Formel nicht soetwas wie z. B. CM, CQ oder T15 beinhaltet.
Dann kann man zwar immer noch die Datumsformel umkehren, aber kommt nicht eindeutig nur auf ein Datum.

mfg,
winfy

Re: DateFormula

5. Dezember 2011 20:18

ACHTUNG! Ich habe versehentlich den falschen Befehl verwendet!
Timo Lässer hat geschrieben:MeineDateFormulaAlsText := STRSUBSTNO(MeineDateFormulaAlsText,'+-','-+');

Es müsste heissen:
MeineDateFormulaAlsText := CONVERTSTR(MeineDateFormulaAlsText,'+-','-+');

Re: DateFormula

6. Dezember 2011 11:31

Erstmal danke an Alle für die schnelle Hilfe....

Im Grunde funktioniert die Berechung des Datums ... Allerdings nur wenn "+12M" im Artikelstamm steht bei uns steht leieder derzeit "12M"
das plus ist ja Optional...
Ich denke ich werde es mit einem Report per Massendatenpflege anpassen....

Oder hat noch jemand eine zündende Idee?

Re: DateFormula

6. Dezember 2011 11:35

himi81 hat geschrieben:Erstmal danke an Alle für die schnelle Hilfe....

Im Grunde funktioniert die Berechung des Datums ... Allerdings nur wenn "+12M" im Artikelstamm steht bei uns steht leieder derzeit "12M"
das plus ist ja Optional...
Ich denke ich werde es mit einem Report per Massendatenpflege anpassen....

Oder hat noch jemand eine zündende Idee?

Ja, nämlich meinen Beitrag, denn dort ist der von dir beschriebene (übliche) Fall berücksichtigt:
1.Steht am Anfang kein Plus oder Minus, dann fügen wir vor dem Text ein Plus ein

Code:
IF NOT (MeineDateFormulaAlsText[1] IN ['+','-']) THEN
  MeineDateFormulaAlsText := '+' + MeineDateFormulaAlsText;

Re: DateFormula

6. Dezember 2011 11:35

himi81 hat geschrieben:Im Grunde funktioniert die Berechung des Datums ... Allerdings nur wenn "+12M" im Artikelstamm steht bei uns steht leieder derzeit "12M"
das plus ist ja Optional...

Darum hat Timo doch schon geschrieben:
Timo Lässer hat geschrieben:Steht am Anfang kein Plus oder Minus, dann fügen wir vor dem Text ein Plus ein
Ergebnis: +2M-1W+3T

Re: DateFormula

6. Dezember 2011 12:39

Ja, vielen Dank nochmal, ich glaube ich habe es überlesen... :oops: ist ja aber auch logisch.
Sorry, ich glaube heute nicht nicht so ganz mein Tag.

Hier noch einmal die Lösung:
Will ich ein Datum nach einem Datum berrechnen das zuvor mitz hilfe einer Datumsformel errechnet wurde muss ich zunächst auf das Ursprungsdatum, und von diesem Datum per anderer Datumsformel mein neues Datum zu berechnen...
Code:
item.GET("Item No.");
DateForm_txt:= (FORMAT(item."Expiration Calculation"));

IF NOT (DateForm_txt[1] IN ['+','-']) THEN
  DateForm_txt := '+' + DateForm_txt;

DateForm_txt:=CONVERTSTR(DateForm_txt,'+-','-+');

l_date:=CALCDATE(DateForm_txt,"Last Expiration Date");
"RLZ-Date":=CALCDATE(item."Min Remaining Term Date Fomula",l_date);
MODIFY;


Nochmal danke @ All!