PDA

View Full Version : Letzter Tag eines Monats ermitteln



Seiten : [1] 2

jobra
26-05-04, 13:36
Hallo iSerianer,

gibt es eine Möglichkeit innerhalb eines CL-Pgm's vielleicht mit einem CL-Befehl den letzten Tag eines Kalendermonates zu ermitteln (Januar = 31, Februar = 28/29, März = 30 usw.). Einen mehrjährigen Systemkalender muß es wohl geben auf den z. B. beim CMD ADDJOBSCDE die Option *MONTHEND für GEPLANTES DATUM zugreift, nur bekomme ich nicht heraus wo und wie auf diesen Kalender zugegriffen werden kann.

Schon jetzt besten Dank für alle Info's.

Tschüß

jobra

B.Hauser
26-05-04, 17:12
Hallo Jobra,

mit CL ist das nicht so ganz einfach!
Aber kannst Du nicht eine kleine RPG-Funktion oder -Programm schreiben, das den Monatsletzen ermittelt?
Was willst Du? Das Datum oder den Tag?

Hier ist ein Beispiel, wie aus einem numerischen Datum (JJJJMMTT) der Monatsletzte im gleichen Format ermittelt wird.


D DateNum S 8P 0 inz(20040525)
D DateNxtMon S D
D MonthEnd S D
D MonthEndNum S 8P 0
************************************************** ***
C Monitor
C Eval DateNxtMon = %Date(DateNum) + %Months(1)
C Eval DateNew = DateNxtMon
C - %Days(%SubDt(DateNxtMon:*D))
C Move DateNew MonthEndNum
C MonthEndNum dsply
C on-Error
C 'Ungült.Dat.' dsply
C EndMon
C eval *InLR = *on

jobra
27-05-04, 09:24
Danke für den prompten Lösungsvorschlag. Wenn es keine direkte Möglichkeit aus dem CL heraus gibt, werde ich es hierüber ausführen. Hintergrund ist, daß für einen regelmäßigen Abrechnungsjob zum Monatsende sichergestellt sein muß, daß als Param. der letzte Monatstag mit übergeben wird. Da bei einem JOBSCDE nicht 100% sicher ist, daß er genau zum Monatsletzten und nicht erst später am folgenden Monatsersten anläuft und ich deshalb nicht auf's Jobdatum zugreifen kann, brauch ich eine Möglichkeit zum abzurechnenden Monat den letzten Monatstag zu ermitteln

Bruno Jakob
27-05-04, 13:07
Hallo Jobra,

stelle die Information, was Monatsletzter ist in eine DTAARA. Die kann vom CL-PGM ausgelesen werden und sogar von mehreren Jobs genutzt werden. Und wenn alle gelaufen sind, die mit Datum des Monatsletzten laufen müssen, änderst Du den Inhalt der DTAARA für den nächsten Monat.

Gruß
Bruno

jobra
28-05-04, 07:33
Hallo Bruno,

erstmal vielen Dank für Deinen Tipp. Dein Vorschlag setzt allerdings voraus, daß ich in einem eigenen Pgm. jeweils ermitteln muß ob der Letzte der 30., 31. oder 28. bzw. Schaltjahr 29. ist. Da es offensichtlich aber einen langjährigen systeminternen Kalender gibt, der dies alles schon beinhaltet, suche ich nach einer einfachen Möglichkeit darauf zu zugreifen.

Tschüß
Jobra

Fuerchau
28-05-04, 08:08
Es gibt keinen systeminternen Kalender sondern komfortable Routinen zur Berechnung von Datum und Zeit (siehe oben), die auch vom OS verwendet werden.
Es kann daher keine "Zugriffe" auf einen Kalender geben.
Nutze doch einfach die RPG-Routinen !

jobra
28-05-04, 10:09
Hallo Fuerchau,

auf die Vorstellung mit dem Systemkalender bin ich durch die Option *MONTHEND beim Parameter SCDDATE des ADDJOBSCDE gekommen. Zumindest muß hier eine Kalenderroutine dahinterstehen, die ich gerne genutzt hätte, um nicht das Rad neu zu erfinden. Nun muß ich es eben halt doch über eine eigene Routine regeln.

Danke
Jobra

Fuerchau
28-05-04, 10:17
Die Kalenderroutinen, die du suchst, sind doch genau die oben erwähnten !
Du kannst alles mit diesen Routinen errechnen. Das System verwendet genau diese Funktionen auch !
Mit den MI-Befehlen ging das alles auch schon früher und sind nun auch in RPG verfügbar.
Die Befehle SUBDUR/ADDDUR stehen seit V3 zur Verfügung, die nun bei ILE per Builtin nachgereicht bzw. verbessert wurden.

FrEEk
28-05-04, 10:23
BEGSR

SELEC
Monat WHEQ 1
Monat OREQ 3
Monat OREQ 5
Monat OREQ 7
Monat OREQ 8
Moant OREQ 10
Monat OREQ 12
Z-ADD 31 LetzterTag
Monat WHEQ 4
Monat OREQ 6
Monat OREQ 9
Monat OREQ 11
Z-ADD 30 LetzterTag
Monat WHEQ 2
Jahr DIV 4 ZwischenResultat
MVR Rest
Rest IFEQ 0
Z-ADD 29 LetzterTag
* Schaltjahr im Februar 29 Tage!!
ELSE
Z-ADD 28 LetzterTag
ENDIF
ENDSL

ENDSR

So hab ich das mal ausprogrammiert

Als Input-Parameter habe ich Jahr, Monat und als Output habe ich den LetztenTag ;)

jobra
28-05-04, 11:55
Dank Euch allen,

ok Ihr habt mich überzeugt - werde die Pgm.-Bsp. benutzen.

Bis bald
Jobra