PDA

View Full Version : Datum + 10 Tage in RPG



Seiten : [1] 2

HoScHiE
02-08-01, 09:23
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

Fuerchau
02-08-01, 09:41
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.

HoScHiE
02-08-01, 10:49
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.

JoergZ
02-08-01, 11:43
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

HoScHiE
02-08-01, 11:57
Das habe ich mir auch gedacht aber geht so was net einfacher ?
ein kleiner simpler code ?

JoergZ
02-08-01, 14:48
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

JoergZ
02-08-01, 15:05
Damit das gequängel ein Ende hat, hier ist der Code.

Rechnung folgt.

http://www.as400-forum.de/ubb/smile.gif http://www.as400-forum.de/ubb/smile.gif




************************************************** ***************
* *
* ------------------------------------------------------------- *
* ! 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.]

K_Tippi
03-08-01, 08:51
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

Ludger Muhmann
03-08-01, 11:25
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

HoScHiE
03-08-01, 12:07
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