[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Sep 2010
    Beiträge
    14

    Red face Datum berechnen mit CL

    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! )
    AS400-Newbie... :))

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Wozu die Sommerzeitumstellung von Hand machen? Unter V5R4 gibt's dafür WRKTIMZON und WRKSYSVAL QTIMZON. Die Zeitzone für Deutschland ist QP0100CET4.

  3. #3
    Registriert seit
    Sep 2010
    Beiträge
    14
    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.
    AS400-Newbie... :))

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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 .
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Jun 2009
    Beiträge
    316
    Wenn das Systemdatum innerhalb der letzten 7 Tage von März oder Oktober liegt und der Systemwert QDAYOWEEK auf Sonntag steht, dann.......

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Sep 2010
    Beiträge
    14
    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!
    AS400-Newbie... :))

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Mit CLP definitiv nicht möglich.
    Was kannst du ausser CLP denn noch ?
    Wie wärs mit REXX oder COBOL ?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Sep 2010
    Beiträge
    14
    In COBOL hab ich ein bisschen Erfahrung...
    AS400-Newbie... :))

  10. #10
    Registriert seit
    May 2002
    Beiträge
    1.121
    Hier mal ein CL was täglich oder eben jeden Sonntag im SCD laufen soll/kann.
    PHP-Code:
    PGM                                                                      
                 DCL        
    VAR(&MONATTYPE(*CHARLEN(2)                   
                 
    DCL        VAR(&DATUMTYPE(*CHARLEN(6)                   
                 
    DCL        VAR(&WOTAGTYPE(*CHARLEN(4)                   
                 
    DCL        VAR(&TAGTYPE(*CHARLEN(2)                     
                 
    DCL        VAR(&TAG_NUMTYPE(*DECLEN(2 0)                
                                                                             
                 
    RTVJOBA    DATE(&DATUMDAYOFWEEK(&WOTAG)                   
                 
    CHGVAR     VAR(&MONATVALUE(%SST(&DATUM 3 2))              
                 
    CHGVAR     VAR(&TAG  VALUE(%SST(&DATUM 1 2))              
                 
    CHGVAR     VAR(&TAG_NUMVALUE(&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 24THEN(DO)                     
                 
    CALL       PGM(CL_MAERZ)               
                 
    ENDDO                                  
                 
    GOTO       CMDLBL(ENDE)                
    OKTOBER:                                            
                 IF         
    COND(&TAG_NUM 24THEN(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
    Last edited by malzusrex; 30-10-10 at 06:43. Grund: Wenn man den Sonntag will, sollte macn auch Sonntag und nicht den Samstag abfragen ;-)

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Erstelle ein SQLCBL-Programm.
    Das Datum muss in ISO-Format (JJJJ-MM-TT) oder EUR-Format (TT.MM.JJJJ)
    übergeben werden


    77 MYDATE PIC X(10).
    PROCEDURE DIVISION USING MYDATE.

    EXEC SQL
    SET OPTION COMMIT=*NONE
    END-EXEC

    EXEC SQL
    SET :MYDATE = DATE(:MYDATE) - (DAYOFWEEK(DATE(:MYDATE)) - 1) DAYS
    END-EXEC

    GOBACK

    Wenn du nun z.B. den 31.03.2011 übergibst erhältst du den 27.03.2011 zurück.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Sep 2010
    Beiträge
    14

    Lösung...

    Hallo zusammen!

    Jetz muss ich nochmal schreiben bzgl. diesem Thema mit der Zeitumstellung und CL.

    Ich habe es mit einem CLLE, meinem Ausbilder und dieser folgenden Seite als Lösungsansatz hinbekommen.

    IBM servers - Time on a AS400 server

    Viele Grüße und Danke nochmal für eure zahlreichen Antworten!

    AS400-Newbie... :))

Similar Threads

  1. Dynamisches SQL in einem CL erstellen
    By Sony in forum IBM i Hauptforum
    Antworten: 27
    Letzter Beitrag: 20-07-09, 21:48
  2. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  3. Datum in Query
    By heini in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 30-09-06, 10:10
  4. Datum überlebt ODBC Transfer auf Excel nicht
    By jjagi in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 07-07-06, 08:29
  5. Übergabeparameter im CL Script
    By bo1 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 23-06-06, 15:00

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •