[Gelöst] Datum errechnen

19. Dezember 2007 14:06

Hallo

Ich möchte aufgrund einer Integervariable (dies enthält das Jahr z.B.: 2007 usw) jeweils das Startdatum und Enddatum aller Monate errechnen. Wie kann ich diese Integervariable mittels calcdate nutzen.

besten dank für eure unterstützung

lg
stony
Zuletzt geändert von stony am 20. Dezember 2007 13:34, insgesamt 1-mal geändert.

19. Dezember 2007 14:08

Müsste doch eigentlich genau so gehen wie Natalie es dir in diesem Thema:

http://www.msdynamics.de/ftopic4418.html

schon erklärt hat.

19. Dezember 2007 14:12

Leider ist meine Variable nicht eine Datum sondern ein Integer und diese beinhaltet 2007 oder 2008 usw.

19. Dezember 2007 14:16

Die Idee dahinter:
Der Erste eines Monats ist immer fest, also per DMY2DATE ein Startdatum zusammenbauen und per CACLDATE den Monatsletzten herausfinden.

19. Dezember 2007 15:24

stony hat geschrieben:Leider ist meine Variable nicht eine Datum sondern ein Integer und diese beinhaltet 2007 oder 2008 usw.


In einer Schleife die Zahlen 1 bis 12 durchlaufen und dafür - wie MrBurns bereits sagte - mittels DMY2DATE (siehe Onlinehilfe) ein Datum (also Type = Date) basteln. Ab dann kannst du mit jedem Monat wie beschrieben Berechnungen durchführen.

19. Dezember 2007 16:08

Die Daten solltest Du auch der internen Tabelle "Date" entnehmen können.

Periodentyp auf Monart filtern, dann steht für jeden Monat das Start und Endedatum drin.

20. Dezember 2007 09:33

Du kannst einen Bericht mit DataItem "Integer" erstellen, mit "MaxIteration = 12".

Code:
VARAIBLEN

Name             DataType    Subtype   Length
V_Jahr           Integer               
V_Startdatum     Date                  
V_Monat_Start    Date                  
V_Monat_Ende     Date                  


Integer - OnPreDataItem()

V_Jahr := 2008;
IF EVALUATE(V_Startdatum,'0101'+COPYSTR(FORMAT(V_Jahr),3)) Then;

Integer - OnAfterGetRecord()

V_Monat_Start := V_Startdatum;
V_Monat_Ende  := CALCDATE('+LM',V_Monat_Start);
V_Startdatum := V_Monat_Ende + 1;


Wenn du das ganze als Schleife laufen lassen willst, müssen die Variablen "V_Monat_Start " und "V_Monat_Ende " als Array mit der Dimension 12 definiert sein.

20. Dezember 2007 10:03

Schau dir nochml den Hinweis von "tba" an. Dau brauchst du nicht lange rumrechnen, in dieser Table steht alles drin

20. Dezember 2007 13:39

Da bis auf der Februar alle Monate eine feste Anzahl Tage haben, stellt sich die Frage doch nur beim Februar.
Hierzu habe ich mal eine Funktion geschrieben, welche mir zurückgibt, ob es sich um ein Schaltjahr handelt.

Code:
IsLeapYear(Year : Integer) : Boolean
// > TL5.00:07 >>>
IF (Year < 1753) AND (STRPOS(UPPERCASE(CONTEXTURL),'SERVERTYPE=MSSQL') <> 0) OR
   (NOT (Year IN [1..9999]) AND (STRPOS(UPPERCASE(CONTEXTURL),'SERVERTYPE=NAVISION') <> 0))
THEN
  ERROR(Text0001,Year);  // '%1 ist kein gültiges Jahr.'

EXIT(DATE2DMY(DMY2DATE(28,2,Year) + 1,2) = 2);
// < TL5.00:07 <<<