Anmelden

View Full Version : Datum berechnen mit CL



Seiten : [1] 2

j.k.
28-10-10, 11:54
Hallo zusammen!

Ich bin noch ziemlich neu in der iSeries-Welt und noch nicht ganz so fit.

Ich hab die Aufgabe bekommen ein kleines Prog zu schreiben das im Oktober und im März immer den letzten Sonntag ermittelt, und diese Datum an einen Scheduljob ändert (denselben scheduljob der dieses Programm aufruft). D.h. das Prog ändert den Scheduljob und ruft sich damit wieder selbst auf.

Mein Problem ist nun in CL den letzten Sonntag des folgenden Okt. bzw März zu errechnen.
Kann mir da jemand helfen? Ich komm einfach nicht auf die Logik... :((

Vielen Dank schon jetzt für eure Hilfe! :))

Pikachu
28-10-10, 12:03
Wozu die Sommerzeitumstellung von Hand machen? Unter V5R4 gibt's dafür WRKTIMZON und WRKSYSVAL QTIMZON. Die Zeitzone für Deutschland ist QP0100CET4.

j.k.
28-10-10, 12:08
Leider haben wir noch Maschinen die auf V5R3 und niedrigerem Stand sind.
Deswegen soll ich dies Prog erstellen damit nicht 2x im Jahr alle von Hand umgestellt werden müssen.

Fuerchau
28-10-10, 12:14
In CLP hast du da schlechte Karten, hier hilft schon eher ein SQLRPGLE, mit SQL und WEEKDAY kannst du den Wochentag z.B. für den 31.3. eines Jahres ermitteln und das Datum berechnen.

Allerdings ist das manuelle ändern der SCD-Job's 2 mal pro Jahr doch erheblich einfacher ;).

Dschainers
28-10-10, 12:14
Wenn das Systemdatum innerhalb der letzten 7 Tage von März oder Oktober liegt und der Systemwert QDAYOWEEK auf Sonntag steht, dann.......:)

Fuerchau
28-10-10, 12:19
Dazu müsste aber ggf. jedes CLP (da gibts ggf. mehrere) angepasst werden.

Alternativ kann man ja auch ein "Master-CLP" jeden Sonntag laufen lassen. Dieses braucht nur den Monat abzufragen und wenn es der letzte Sonntag im März/Oktober ist, das gewünschte original CLP aufrufen. Ansonsten beendet es sich sofort wieder.

j.k.
28-10-10, 12:35
Danke euch für eure zahlreichen Antworten! :)
Gibt es dann da keine Möglichkeit, dass ich über eine "Schleife" den letzten Sonntag im März des Folgejahres bzw den letzten Sonntag im Oktober errechnen lassen kann dies dann in den Scheduljob eintrage??
Leider hab ich RPG noch keinerlei Kenntnisse... :(
Ich bekomme einfach nicht die Logik zusammen wie ich dieses Datum abfragen/berechnen kann.
Es ist zum Mäuse melken!

Fuerchau
28-10-10, 12:38
Mit CLP definitiv nicht möglich.
Was kannst du ausser CLP denn noch ?
Wie wärs mit REXX oder COBOL ?

j.k.
28-10-10, 12:41
In COBOL hab ich ein bisschen Erfahrung...

malzusrex
28-10-10, 13:05
Hier mal ein CL was täglich oder eben jeden Sonntag im SCD laufen soll/kann.


PGM
DCL VAR(&MONAT) TYPE(*CHAR) LEN(2)
DCL VAR(&DATUM) TYPE(*CHAR) LEN(6)
DCL VAR(&WOTAG) TYPE(*CHAR) LEN(4)
DCL VAR(&TAG) TYPE(*CHAR) LEN(2)
DCL VAR(&TAG_NUM) TYPE(*DEC) LEN(2 0)

RTVJOBA DATE(&DATUM) DAYOFWEEK(&WOTAG)
CHGVAR VAR(&MONAT) VALUE(%SST(&DATUM 3 2))
CHGVAR VAR(&TAG ) VALUE(%SST(&DATUM 1 2))
CHGVAR VAR(&TAG_NUM) VALUE(&TAG)

IF COND(&WOTAG *NE '*SUN') THEN(GOTO CMDLBL(ENDE))
IF COND(&MONAT *EQ '03') THEN(GOTO CMDLBL(MAERZ))
IF COND(&MONAT *EQ '10') THEN(GOTO CMDLBL(OKTOBER))
GOTO CMDLBL(ENDE)
MAERZ:
IF COND(&TAG_NUM > 24) THEN(DO)
CALL PGM(CL_MAERZ)
ENDDO
GOTO CMDLBL(ENDE)
OKTOBER:
IF COND(&TAG_NUM > 24) THEN(DO)
CALL PGM(CL_OKTOBER)
ENDDO
GOTO CMDLBL(ENDE)
ENDE:

ENDPGM


Nicht schön und nur teilweise getestet. Ist aber vielleicht ein denkanstoß.

Gruß
Ronald