[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Aug 2007
    Beiträge
    243

    Woche des Monats, Quartal

    Wie kann ich in ILE am besten die Woche des Monats bzw. das Quaral ermitteln. Basis wäre das aktuelle Tagesdatum.

    Es soll z.B. immer Ende der 4.Woche eines Monats bzw. Ende eines Quartals eine bestimmte Aktion durchgeführt werden.

  2. #2
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Also mit wrkjobscde kannst Du einen Job erstellen der immer am Monatsende läuft.

    (Ich weiß, hilft die bei ILE RPG nicht weiter, wäre aber evtl. eine Alternativlösung)
    GG

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das kannst du eigentlich per ADDJOBSCDE automatisieren. Da gibt es die diversen Möglichkeiten für genau solche Aktionen.
    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

  4. #4
    Registriert seit
    Aug 2007
    Beiträge
    243
    Ich brauch aber den betreffenden Wert als Parameter im Programm, da ich im Programm einen FTP-Command zusammenbastle, der mir dann zum jeweiligen Zeitpunkt in ein, für diesen Zeitpunkt gültiges Verzeichnis, was reinschreibt.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ab V6 hilft dir da VARCHAR_FORMAT:
    http://pic.dhe.ibm.com/infocenter/is...6e%74%68%22%20

    Beispiel:
    select varchar_format(current timestamp, 'Q W MM D')
    from sysibm/sysdummy1

    Q = Quartal
    W = Woche im Monat
    MM = Monat
    D = Wochentag

    u.v.m.
    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

  6. #6
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Wenn der Job über den Scheduler läuft bräuchtest Du ja nur das Tagesdatum abzufragen. Dann hättest Du deinen Parameter

    GG

  7. #7
    Registriert seit
    Aug 2007
    Beiträge
    243
    @F: hab leider nur ein älteres OS zur Verfügung.

    @KoK: Bitte um Hilfe - wie geh ich das an?

  8. #8
    Registriert seit
    May 2002
    Beiträge
    1.121
    Vielleicht hilft ja folgender Ansatz. Hatte da mal ein Programm, was an Hand des Datums das Jahr, Woche, Wochentag ermittelt. Und wenn Du Monat und/bzw Woche hast, sollte auch das Quartal zu ermitteln sein
    PHP-Code:
    d Datum           s               d   datfmt(*eur)     
    d Woche           s              3u 0                  
    d WoTag           s              3u 0                  
    d Jahr            s              4s 0                  
    d                                                      
    d parm_Dat        s              8a                    
    d parm_WoTag      s             10a                    
    d parm_DayOf      s              1a                    
    d parm_Woche      s              2a                    
    d parm_Jahr       s              4                     
    d                                                      
    d Datum_num       s              8  0                  
    d                                                      
    d                 ds                                   
    d $woche                        10a                    
    d                                     dim
    (7)           
    d                         1     10a   inz('Montag    ')
    d                        11     20a   inz('Dienstag  ')
    d                        21     30a   inz('Mittwoch  ')
    d                        21     30a   inz('Mittwoch  ')
    d                        31     40a   inz('Donnerstag')
    d                        41     50a   inz('Freitag   ')
    d                        51     60a   inz('Samstag   ')
    d                        61     70a   inz('Sonntag   ')
                                                           
    c     *entry        plist                              
    c                   parm                    parm_Dat   
    c                   parm                    parm_WoTag 
    c                   parm                    parm_DayOf 
    c                   parm                    parm_Woche 
    c                   parm                    parm_Jahr  
    c                                                      
    c                   move      parm_Dat      datum_num  
    c                   move      datum_num     datum      
    c                                                      
    c
    /EXEC SQL                                             
    c
    set  :Woche  =  week_iso(:Datum)                    
    C/END-EXEC                                             
    c
    /EXEC SQL                                             
    c
    set  :WoTag  =  DayOfWeek_iso(:Datum)                    
    C/END-EXEC                                                  
    c                                                           
    c
    *                                                          
    c                   Select                                  
    c                   When      woche 
    1                     
    c                              
    and                          
    c                             %SubDt(Datum: *M) = 12        
    c                   
    eval      Jahr =  %SubDt(Datum: *Y) + 
    c                   When      woche 
    >= 52                   
    c                              
    and                          
    c                             %SubDt(Datum: *M) = 1         
    c                   
    eval      Jahr =  %SubDt(Datum: *Y) - 
    c                   Other                                   
    c                   
    eval      Jahr =  %SubDt(Datum: *Y)     
    c                   EndSl                                   
    c
    *                                                          
    c                   eval      parm_WoTag  $Woche(Wotag)   
    c                   move      wotag         parm_DayOf      
    c                   move      woche         parm_woche 
    c                   move      Jahr          parm_Jahr  
    c
    *                                                     
    c                   return 
    In ähnlicher Form findest du das Programm hier bestimmt noch mal im Forum
    (Danke an dieser Stelle noch mal an Birgitta)

    Gruß Ronald

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das ist aber die "Woche des Jahres".
    Die "Woche des Monats" liegt immer zwischen 1-4/5.
    So kann ich im JOBSCD bestimmen, dass immer am letzten Freitag eines Monats oder immer am Dienstag in der 2 Woche eines Monates welche Jobs gestartet werden.
    Sicherlich kann ich mir dieses zu nutze machen in dem ich an das aufgerufene Programm einen eintsprechenden Parameter (als Konstante) übergebe und die Art des Aufrufes zu bestimmen (wie oben vorgeschlagen).
    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

  10. #10
    Registriert seit
    May 2002
    Beiträge
    1.121
    Upps,
    wieder nicht richtig gelesen....
    ..Thema verfehlt! .. Setzen, Sechs!

    ;-)

  11. #11
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Zitat Zitat von programmer400 Beitrag anzeigen
    @F: hab leider nur ein älteres OS zur Verfügung.

    @KoK: Bitte um Hilfe - wie geh ich das an?
    Hallo,
    diese Aussage hilft keinem weiter!

    Welche Version hast Du konkret im Einsatz, welches RPG benutzt Du?
    Ich nehme aber an daß das Beispiel von malzusrex Dir weiterhilft.

    Ansonsten kannst Du beim Job Scheduler unter
    Häufigkeit . . . . . . . . . . . *WEEKLY *SAME, *ONCE, *WEEKLY...
    Geplantes Datum . . . . . . . . *NONE Datum, *SAME, *CURRENT...
    Geplanter Tag . . . . . . . . . *ALL *SAME, *NONE, *ALL, *MON...
    + für weitere Werte

    Die Werte für Monatsende eingeben.

    GG

  12. #12
    Registriert seit
    Jan 2007
    Beiträge
    905
    So schlecht find ich jetzt Ronalds Vorschlag nicht...

    Damit Du die Woche auf den Monat reduzieren kannst, errechne doch die Woche des Tagesdatum, dann die Woche des 1. des jeweiligen Monats; Differenz + 1 et voilà, c'est fait.

    Haste kein SQL hilft dir vielleicht das weiter:
    Code:
    H NoMain
      * ------------------------------------------------------- Prototypes
     D DayOfWeek       PR             5I 0
     D                                 D   Value
     D WeekOfYear      PR             5I 0
     D                                 D   Value
      * -----------------------------------------------------------------
      *
      * Procedure: DayOfWeek
      * Description: Retrieve day of week using ISO 8601 standard
      *              (0=Monday - 6=Sunday)
      *
     P DayOfWeek       B                   Export
     D DayOfWeek       PI             5I 0
     D  DateIn                         D   Value
     D NbrDays         S             10I 0
     D Monday          C                   D('2001-01-04')
      /Free
       NbrDays = %DIFF(DateIn:Monday:*DAYS);
       Return  = %REM( %REM(NbrDays:7) + 7 : 7);
      /End-Free
     P DayOfWeek       E
      * -----------------------------------------------------------------
      *
      * Procedure: WeekOfYear
      * Description: Retrieve week of year using ISO 8601 standard
      *              (Year starts on Monday of week containing January 4)
      *
     P WeekOfYear      B                   Export
     D WeekOfYear      PI             5I 0
     D  DateIn                         D   Value
     D                 DS
     D Jan04Date                       D   INZ(D'0001-01-04')
     D  Jan04Year                     4  0 Overlay(Jan04)
     D FirstMonday     S               D
     D Jan04DOW        S              5I 0
      /Free
       // Change Jan04Date to target year,
       // then calculate first Monday of target year
      Jan04Year   = %SUBDT(DateIn:*Y);           
      Jan04DOW    = DayOfWeek(Jan04Date);        
       FirstMonday = Jan04Date - %DAYS(Jan04DOW); 
      // If target date is before first Monday, switch to prior year
       If DateIn < FirstMonday;                   
        Jan04Year   = Jan04Year D 1;             
        Jan04DOW    = DayOfWeek(Jan04Date);      
         FirstMonday = Jan04Date - %DAYS(Jan04DOW);
       Endif;
       // Return week number (number of full weeks since first Monday + 1)
       Return %DIV(%DIFF(DateIn:FirstMonday:*DAYS):7) + 1;
      /End-Free
     P WeekOfYear      E
    Quelle: iprodeveloper.com (geht ab V5R1)
    kf

Similar Threads

  1. IBM gibt Ergebnis für 4. Quartal 2001 bekannt
    By Burgy Zapp in forum Archiv NEWSblibs
    Antworten: 0
    Letzter Beitrag: 09-02-02, 20:58
  2. aktuelle Kalender Woche - wie abfragen?
    By Timmo in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 29-03-01, 21:12

Berechtigungen

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