[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jul 2001
    Beiträge
    45

    Question Datum + 10 Tage in RPG

    Hallo,

    hat jemand vielleicht schonmal einen kurzen COde geschrieben, das ein Datum(gezont Länge 6) + 10 Tage berechnet.

    Es werde Kalendertage benötigt.
    Beispiel: Ich habe das Datum 01.08.2001 in der Form 010801 und möchte gerne das Datum + 10 Tage haben = 11.08.2001.

    Vielleicht gibt es dann noch ne Möglichkeit, wenn es am Wochenende ist, es auf den nächsten MONTAG zu legen.

    Danke
    Bye
    HoScHiE

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.206

    Post

    Versuchen Sie es z.B. mit ILE-RPG. Definieren Sie eine Variable vom Typ Datum und verwenden Sie die Befehle ADDDUR oder SUBDUR (nachzulesen im RPG-Handbuch).

    Die 2. Möglichkeit ist SQL !
    Formatieren Sie das Datum in ein gültiges Format (z.B. *ISO) und mittels:
    /EXEC-SQL
    + SET :Ziel = DATE(DAYS(:Quelle) + :Tage)
    + SET :WTag = WEEKDAY(:Ziel)
    /END-EXEC
    können Sie alle benötigten Berechnungen durchführen (nachzulesen im SQL-Handbuch).

    Die handbücher finden Sie auf der Buch-CD.
    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

  3. #3
    Registriert seit
    Jul 2001
    Beiträge
    45

    Post

    Das ist alles sehr lieb und nett gemeint aber ich brauche es in RPG.Mit ILE wüßte ich es auch aber ich kann es nicht in ILE umstellen(darf es nicht).

    Ich brauche also den Code für RPG, only.

    Danke für Deine Hilfe.
    Bye
    HoScHiE

  4. #4
    Registriert seit
    Apr 2001
    Beiträge
    80

    Exclamation

    Warum machst Du nicht ein kleines ILE-RPG, dass du aus deinem RPG mit dem Datum als Parameter aufrufst, welches dann nur die Datumsberechnung macht ??

    Must ja nicht das ganze Programm auf RPG/IV umstellen.

    Jörg

  5. #5
    Registriert seit
    Jul 2001
    Beiträge
    45

    Post

    Das habe ich mir auch gedacht aber geht so was net einfacher ?
    ein kleiner simpler code ?

    Bye
    HoScHiE

  6. #6
    Registriert seit
    Apr 2001
    Beiträge
    80

    Smile

    Also was ist einfacher, als ein paar RPG/IV Zeilen zu schreiben ??? Gut, wenn die Ermittlung des Wochentages dazu kommt, sind's eben ein paar mehr. Aber immer noch einfacher, als sich in RPG/III einen abzubrechen.

    Klar geht's auch in RPG/III, aber das sind bestimmt 5 mal so viele Statements wie in IV.

    Jörg

  7. #7
    Registriert seit
    Apr 2001
    Beiträge
    80

    Cool

    Damit das gequängel ein Ende hat, hier ist der Code.

    Rechnung folgt.



    Code:
          *****************************************************************
          *                                                               *
          * ------------------------------------------------------------- *
          *  ! Achtung !! Programm muss wegen der verwendeten APIs        *
          *  erst mit CRTRPGMOD und dann mit CRTRPGPGM ACTGRP(QILE)       *
          *  umgewandelt werden !!                                        *
          * ------------------------------------------------------------- *
          *                                                               *
          *****************************************************************
          *                                                               *
          * ------------------------------------------------------------- *
          *         P r o g r a m m   -   B e s c h r e i b u n g         *
          * ------------------------------------------------------------- *
          *                                                               *
          *  Das Programm addiert zu dem im Parameter mitgegebenem Datum  *
          *  10 Tage, ermittelt den Wochentag, addiert bei Samstag oder   *
          *  Sonntag nochmals 1 oder 2 Tage dazu.                         *
          *                                                               *
          *  Eingangsparameter / Rückgabeparameter :                      *
          *                                                               *
          *  PE#Datum  (6S 0)  -  Datumsfeld Format TTMMJJ                *
          *                                                               *
          *  Rückgabeparameter:                                           *
          *                                                               *
          *  PE#Error   (1A)   -  Fehler  ('0' = O.K., '1' = Fehler)      *
          *                                                               *
          *****************************************************************
     
         H DatEdit(*DMY.)
         H DatFmt(*EUR.)
         H Debug(*Yes)
         H DecEdit('0,')
         H ExprOpts(*MaxDigits)
         H Option(*ShowCpy : *NoDebugIO : *SrcStmt)
         H TimFmt(*HMS)
     
         D PE#Datum        S              6S 0
         D PE#RtnCode      S              1A
     
         D P#Datum         S             10A
         D P#DatFmt        S             10A   Inz('DDMMYY')
         D P#ApiParm       S              9B 0
         D P#TagNr         S              9B 0
     
         D #DatumD         S               D
     
          *=====================================================================
          *  *ENTRY - Parameter
          *=====================================================================
     
         C     *Entry        PList
         C                   Parm                    PE#Datum
         C                   Parm                    PE#RtnCode
     
          **********************************************************************
          ******    H  A  U  P  T  V  E  R  A  R  B  E  I  T  U  N  G     ******
          **********************************************************************
     
         C                   Eval      PE#RtnCode = '0'
     
         C                   Do
     
          * Datum auf Gültigkeit prüfen
     
         C     *DMY          Test(D)                 PE#Datum               RT
     
         C                   If        *InRT
         C                   Eval      PE#RtnCode = '1'
         C                   Leave
         C                   EndIf
     
         C     *DMY          Move      PE#Datum      #DatumD
     
         C                   AddDur    10:*D         #DatumD
     
         C     *DMY          Move      #DatumD       PE#Datum
     
         C                   Movel     PE#Datum      P#Datum
     
         C                   CallB(D)  'CEEDAYS'
         C                   Parm                    P#Datum
         C                   Parm                    P#DatFmt
         C                   Parm                    P#ApiParm
         C                   Parm                    *OMIT
     
         C                   CallB(D)  'CEEDYWK'
         C                   Parm                    P#ApiParm
         C                   Parm                    P#TagNr
         C                   Parm                    *OMIT
     
          * neuer Tag ist Samstag
     
         C                   If        P#TagNr = 7
         C                   AddDur    2:*D          #DatumD
         C                   EndIf
     
          * neuer Tag ist Sonntag
     
         C                   If        P#TagNr = 1
         C                   AddDur    1:*D          #DatumD
         C                   EndIf
     
         C     *DMY          Move      #DatumD       PE#Datum
     
         C                   EndDo
     
          *----------------------------------------------------------------
          *  Programmende
          *----------------------------------------------------------------
     
         C                   Eval      *InLR = *On

    [Dieser Beitrag wurde von JoergZ am 02. August 2001 editiert.]

  8. #8
    Registriert seit
    Dec 2000
    Beiträge
    279

    Cool

    Hier noch eine Möglichkeit
    Verwende ein CL Programm mit CVTDAT.
    Mache dein Datum Julianich. Addiere 10 Tage und lass es zurückwandel. Sicherheitshalber kannst du in der Programminitialisierung ja den 31.12 abfragen und so den höchsten Tag des Jahres im Programm abfragen (365 oder 366) damit ist dann auch der Jahreswechsel zu bewerkstelligen.
    Wie mann sieht
    viele Wegen führen nach Rom (oder zum Datum ;-)
    Gruß Klaus
    Programmierung

  9. #9
    Registriert seit
    Mar 2001
    Beiträge
    46

    Post

    Hallo Hoschie,

    ich kann Ihnen folgendes anbieten:
    a) Programm zum Erstellen eines Kalenders
    natürlich incl. Berücksichtigung von
    Schaltjahren
    b) Routine, die mit /COPY ins
    RPGIII oder RPGIV - Programm einkopiert
    wird und mit der alle Umdrehungen eines
    Datums, Tage hinzuzählen, abziehen
    (Werktage, Kalendertage) und vieles
    mehr erledigt werden kann.
    c) Beschreibung, wie die Routine
    eingesetzt wird.

    Diese Modul ist bereits einige Zeit im Einsatz und deckt alle mir bis dahin erforderlich gewordenen Datums-Modifikationen ab.

    Für einen gewissen Preis könnte ich es zur Verfügung stellen.

    Zusätzlich beinhaltet dieses Modul auch
    das Erweitern des Kalenders, das Eintragen von Feiertagen und das Anzeigen der Kalenderdatei.

    bei Interesse: mail@muhmann.de

  10. #10
    Registriert seit
    Jul 2001
    Beiträge
    45

    Post

    Erstmal vielen Dank an alle.
    Ich habe mich jetzt für die xxterne ILE Variante entschlossen und es auch schon ausprobiert.
    Danke Jörg.

    Kaufen möchte und kann ich auch nix.
    Wir habe einige Programme im Einsatz, die das Konvertieren und Umrechnen und Berechnen,etc. von Tagen/Wochen,etc. beinhalten und das anhand unseres Kalenders.
    Nur dieses Tool kann nicht per Parameter gesteuert werden, so daß es die 10 Tage addiert.Dieses Standprogramm sollte ungerne angepasst werden, da ca. 1000 Programme darauf zugreifen.

    So das wars...

    Danke,
    HoScHiE
    Bye
    HoScHiE

  11. #11
    Registriert seit
    Jan 2001
    Beiträge
    62

    Post

    Ich weiß, meine Antwort kommt schon zu spät, möchte sie aber trotzdem los werden. Vielleicht dient sie jemand anderem als Idee.

    Ich habe dieses Problem folgendermaßen gelöst:
    1. Einen Fabrikskalender erstellt:
    Datei FBRKLD
    Felder: JAHR JJJJ
    Monat MM
    Tag TT
    Woche JJWW
    Wochentag T (1-7)
    Feiertag F (J/N)

    2. Dazu habe ich ein Programm geschrieben, welches mit diese Datei automatisch aufbaut, wobei das besondere Problem die generierung der Kalenderwoche war.
    3. Weiter logische Dateien nach Woche, JMT, JM erstellt

    Diese Datei verwende ich nun zur Datumberechnung. In Ihrem Fall CHAIN mit heutigem Datum in den Kalender dann
    Do 10
    Read FBRKLD
    end
    Sollen Samstage, Son- und Feiertage übersprungen werde, so ist das ebenfalls leicht realisierbar. Ebenso kann ich mit dieser Datei leicht den ersten bzw. letzten Tag einer Kalenderwoche feststellen.

    Dazu braucht man außerdem keine Zeile in einem ILE-RPG (ist meine Meinung nach nur für Vielschreiber).

    Das RPG-Programm zum Erstellen der Fabrikskalender-Datei veröffentliche ich gerne auf Wunsch.

    Interesse: zehetner@ins.at

  12. #12
    Registriert seit
    Apr 2001
    Beiträge
    80

    Talking

    So so.. für Vielschreiber..

    Dann programmier doch mal in RPG/III Substring- oder Trim-Funktionen, die man in RPG/IV mit einer Zeile abhandelt.

    Da wirst Du Dir in RPG/III wohl einen Wolf schreiben..


    Jörg

    [Dieser Beitrag wurde von JoergZ am 06. August 2001 editiert.]

Similar Threads

  1. Rückgabewert vom RPG Programm
    By mk in forum NEWSboard Java
    Antworten: 8
    Letzter Beitrag: 21-04-11, 22:51
  2. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 11:58
  3. Datum in Query
    By heini in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 30-09-06, 11:10
  4. Datum überlebt ODBC Transfer auf Excel nicht
    By jjagi in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 07-07-06, 09:29
  5. RPG Routine Datum
    By GEA in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 25-11-04, 17:32

Berechtigungen

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