Ausgabe aller DateifelderIn diesem Beispiel wollen wir eine Vorlage erstellen, mit der wir ein Programm erzeugen können das:
- Die Schlüsselfelder eines Datensatzes als Parameter erhält
- Jedes Feld des Satzes mit seiner Beschreibung auf einer Liste ausgibt.
Der Inhalt der DO-Schleife soll später zugefügt werden
1. Schritt: Vorlagen-Teildatei erstellenFolgenden Befehl eingeben: STRSEU PPHTPL PRTRCD SEUTYPE(RPGLE)
2. Schritt: Variable definierenUm eine vollständige Programmquelle zu erstellen benötigen wir einige Angaben wie Name, Autor und Datum. Für die Datenbankdatei müssen wir keine Variable definieren. PPHSEU ordnet automatisch die folgenden zu:
- &F Datei
- &L Bibliothek
- &R Satzformat
Dann fügen wir eine Zeile mit /TPL ein, womit die eigentliche Vorlage beginnt. SEU==> DO FMT * *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+. ***************** Datenanfang ***************************************** 0001.00 * &N=Name,10,*MBR 0002.00 * &A=Autor,25,*USX 0003.00 * &T=Text,40,*MBX 0004.00 * &D=Datum,25,*DAT 0005.00 * &J=Jahr,4,*Y 0006.00 */TPL |
3. Schritt: Programm-KopfzeilenAußer den Kommentarzeilen am Anfang fügen wir eine F-Anweisung für die Datenbankdatei ein, die immer dem Platzhalter &F zugeordnet wird und eine F-Anweisung für die Druckausgabe. SEU==> PRTRCD FMT * *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+. 0006.00 */TPL 0007.00 /TITLE &t 0008.00 *===================================================================== 0009.00 * Modulname . . . . . . . . : &N 0010.00 * Beschreibung . . . . . . . : &t 0011.00 * Autor . . . . . . . . . . : &a 0012.00 * Erstelldatum . . . . . . . : &D 0013.00 *--------------------------------------------------------------------- 0014.00 H COPYRIGHT('Kümpflein DV-Beratung GmbH &J ') 0015.00 *--------------------------------------------------------------------- 0016.00 * CRTRPGMOD DBGVIEW(*SOURCE) 0017.00 * CRTPGM MODULE(&N<) 0018.00 *===================================================================== 0019.00 H DATEDIT(*DMY.) DATFMT(*EUR) DECEDIT('0,') OPTION(*SRCSTMT:*NODEBUGIO) 0023.00 0024.00 F&F IF E K DISK 0025.00 FQSYSPRT O F 132 PRINTER OFLIND(nOvrFlw) USROPN |
4. Schritt: Das ProgramminterfaceAls Parameter erhält unser späteres Programm eine Variable, in der ein Ergebniscode zurückgegeben wird und alle Schlüsselfelder der Datei. Hierzu erstellen wir einen /FFA-/FFE-Block mit Angabe KEY. Das bewiwrkt, dass die dazwichenliegenden Zeilen für jedes Schlüsselfeld der Datei wiederholt werden. SEU==> PRTRCD FMT D DName+++++++++++ETDsVon++++Bi/L+++IDG.Schlüsselwörter++++++++++++++++++ 0036.00 D &N PR 0037.00 D EPRtnCode 1A 0038.00 /FFA KEY 0039.00 D EP&3 LIKE(&1<) 0040.00 /FFE 0041.00 0042.00 D &N PI 0043.00 D EPRtnCode 1A 0044.00 /FFA KEY 0045.00 D EP&3 LIKE(&1<) 0046.00 /FFE |
6. Schritt: Die AusgabefunktionFür die Druckausgabe erstellen wir eine Funktion die Feldname, Feldbeschreibung und den Feldinhalt erhält. Zur Druckausgabe benötigen wir Ausgabefelder und einen Überlaufanzeiger. SEU==> PRTRCD FMT * *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+. 0046.01 0046.02 D LCLPrtFld PR 0046.03 D EPName 10A CONST 0046.04 D EPText 50A CONST 0046.05 D EPData 50A CONST 0046.06 0046.07 * Ausgabefelder 0046.09 D sName S 10A 0046.10 D sText S 50A 0046.11 D sData S 50A 0046.12 * Überlauf 0046.13 D nOvrFlw S N |
6. Schritt: Schlüsselliste und lesen des DatensatzesWir definieren die Schlüsselliste KEYEP und lesen den gewünschten Satz, falls er nicht existiert geben wir 9 im Rückkehrcode zurück. SEU==> PRTRCD FMT * *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+. 0048.00 * Schlüssel für Datei &F 0049.00 C KEYEP KLIST 0050.00 /FFA KEY 0051.00 C KFLD EP&3 0052.00 /FFE 0053.00 0054.00 C KEYEP CHAIN &R 0055.00 C IF NOT %FOUND 0056.00 C EVAL EPRtnCode = '9' 0057.00 C RETURN 0058.00 C ENDIF 0059.00 |
6. Schritt: Ausgabefunktion für jedes Fekd aufrufenWir rufen nun für jedes Feld die Funktion LCLPrtFld auf. Diese druckt eine Zeile für jedes Ausgabefeld. Hier müssen wir Zeichfelder anders behandeln als numerische. Mit den /IF:, /ELSE: und /ENDIF-Zeilen können wir Bedingungen setzen. Diese sind nur zwischen /FFA und /FFE zulässig. SEU==> PRTRCD FMT * *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+. 0059.01 0059.02 * Feldweise Ausgabe 0059.03 * ----------------- 0059.04 C OPEN QSYSPRT 0060.00 C EXCEPT EXHDG 0061.00 */FFA 0062.00 * &4 0063.00 */IF: *A 0064.00 C CALLP LCLPrtFld('&1<': 0065.00 C '&4<': 0066.00 C &1<) 0067.00 */ELSE: 0068.00 C CALLP LCLPrtFld('&1<': 0069.00 C '&4<': 0070.00 C %EditC(&1<:'&8<')) 0071.00 */ENDIF: 0072.00 */FFE 0073.00 0074.00 C EVAL EPRtncode = '1' 0075.00 C RETURN |
7. Schritt: Ausgabefunktion erstellenDie Funktion LclPrtFld druckt eine Zeile mit Beschreibung, Feldname und Feldinhalt. Die Beschreibung ergänzt sie um . . . . zur besseren Lesbarkeit. 0088.00 /TITLE LCLPrtFld Einzelnes Dateifeld ausgeben 0089.00 *===================================================================== 0090.00 * Prozedur . . . . . . . . . : .PrtFld 0091.00 * Beschreibung . . . . . . . : Einzelnes Dateifeld ausgeben 0092.00 *===================================================================== 0093.00 P LCLPrtFld B EXPORT 0094.00 D LCLPrtFld PI 0095.00 D EPName 10A CONST 0096.00 D EPText 50A CONST 0097.00 D EPData 50A CONST 0098.00 0099.00 D iPos S 5I 0 0100.00 0101.00 C EVAL iPos = %CHECKR(' ':EPText) 0102.00 C IF iPos > 0 0103.00 C EVAL sText = *ALL' .' 0104.00 C EVAL %SUBST(sText:1:iPos+1) = EPText 0105.00 C ELSE 0106.00 C EVAL sText = EPText 0107.00 C ENDIF 0108.00 0109.00 C EVAL sName = EPName 0110.00 C EVAL sData = EPData 0111.00 0112.00 C IF nOvrFlw 0113.00 C EXCEPT EXHDG 0114.00 C EVAL nOvrFlw = *OFF 0115.00 C ENDIF 0116.00 C EXCEPT EXFLD 0117.00 0118.00 P LCLPrtFld E |
Aufruf der Vorlage zum TestUnsere Vorlage ist damit fertig. Wir können nun Druckprogramme für Einzelsätze wie folgt erstellen: Strseu qrpglesrc testpr Type(RPGLE) TEXT(Beispiel Druck) Und TPRTRCD eingeben SEU==> TESTPR FMT H HSchlüsselwörter+++++++++++++++++++++++++++++++++++++++++++++++++++++++ ***************** Datenanfang ***************************************** TPRTRCD ''''''' ''''''' |
In der Anzeige die nun erscheint müssen wir nur noch den Namen einer geschlüsselten Datenbankdate angeben: BSRPMT 15.07.06 Beispiel Druck
Auswahl eingeben und Eingabetaste drücken.
Name . . . . . . . . . . . . . . TESTPR
Autor . . . . . . . . . . . . . . Harald Kümpflein Text . . . . . . . . . . . . . . Beispiel Druck
Datum . . . . . . . . . . . . . . 15.07.2006 Jahr . . . . . . . . . . . . . . 2006
Datei . . . . . . . . . . . . . . ADRSTM1 F4 für Liste Bibliothek . . . . . . . . . . . *LIBL F4 für Liste Satzformat . . . . . . . . . . . *FIRST Name, *FIRST |
Ergebnis: Das fertige RPG-ProgrammKopfzeile und F-Anweisung 0002.00 /TITLE Beispiel Druck 0003.00 *===================================================================== 0004.00 * Modulname . . . . . . . . : TESTPR 0005.00 * Beschreibung . . . . . . . : Beispiel Druck 0006.00 * Autor . . . . . . . . . . : Harald Kümpflein 0007.00 * Erstelldatum . . . . . . . : 15.07.2006 0008.00 *--------------------------------------------------------------------- 0009.00 H COPYRIGHT('Kümpflein DV-Beratung GmbH 2006') 0010.00 *--------------------------------------------------------------------- 0011.00 * CRTRPGMOD DBGVIEW(*SOURCE) 0012.00 * CRTPGM MODULE(TESTPR) 0013.00 *===================================================================== 0014.00 H DATEDIT(*DMY.) DATFMT(*EUR) DECEDIT('0,') OPTION(*SRCSTMT:*NODEBUGIO) 0015.00 0016.00 FADRSTM01 IF E K DISK 0017.00
|
Programm-Interface 0032.00 0033.00 D TESTPR PI 0034.00 D EPRtnCode 1A 0035.00 D EPNUM LIKE(ADNUM) 0036.00 D EPSEQ LIKE(ADSEQ) 0037.00 0038.00 * Schlüssel für Datei ADRSTM01 0039.00 C KEYEP KLIST 0040.00 C KFLD EPNUM 0041.00 C KFLD EPSEQ 0042.00 0043.00 C KEYEP CHAIN ADSATZ 0044.00 C IF NOT %FOUND 0045.00 C EVAL EPRtnCode = '9' 0046.00 C RETURN 0047.00 C ENDIF 0048.00 0049.00 * Ausgabefunktion für jedes Dateifeld aufrufen 0050.00 * Anschriftennummer 0051.00 C CALLP LCLPrtFld('ADNUM': 0052.00 C 'Anschriftennummer': 0053.00 C %EditC(ADNUM:'Z')) 0054.00 * Folgenummer 0055.00 C CALLP LCLPrtFld('ADSEQ': 0056.00 C 'Folgenummer': 0057.00 C %EditC(ADSEQ:'Z')) 0058.00 * 1. Namenszeile 0059.00 C CALLP LCLPrtFld('ADNM1': 0060.00 C '1. Namenszeile': 0061.00 C ADNM1) |
... Alle weiteren Felder
0086.00 * Verwendung 0087.00 C CALLP LCLPrtFld('ADUSG': 0088.00 C 'Verwendung': 0089.00 C %EditC(ADUSG:'Z')) 0090.00 0091.00 C EVAL EPRtncode = '1' 0092.00 C RETURN 0093.00 0094.00 OQSYSPRT E EXHDG 3 3 0095.00 O 'TESTPR'
|
Alles weitere kommt unverändert aus unserer Vorlage
|