Rheinwerk < openbook > SAP-Wissen aus erster Hand
SAP-Wissen aus erster Hand.
 
Inhaltsverzeichnis
Vorwort zur vierten Auflage
1 ABAP und die ersten Schritte im SAP-System
2 ABAP Dictionary
3 Programmieren im ABAP Editor
4 Felder und Berechnungen
5 Modifikation von Zeichenketten
6 Debugging von Programmen
7 Modifikation von transparenten Datenbanktabellen
8 Rechnen mit Datum und Zeit, Mengen und Währungen
9 Mit Daten in einer Datenbanktabelle arbeiten
10 Programmablaufsteuerung und logische Ausdrücke
11 Selektionsbildschirme
12 Interne Tabellen
13 Modularisierung von Programmen
14 Weiterführende Themen
A Icons auf einen Blick
B Abkürzungsverzeichnis
C Die Autoren
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 23 KB

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Einstieg in ABAP von Karl-Heinz Kühnhauser, Thorsten Franz
Buch: Einstieg in ABAP

Einstieg in ABAP
Pfeil 13 Modularisierung von Programmen
Pfeil 13.1 Überblick
Pfeil 13.2 Quelltext-Module
Pfeil 13.3 Prozeduren
Pfeil 13.3.1 Unterprogramme
Pfeil 13.3.2 Funktionsbausteine
Pfeil 13.3.3 ABAP-Klassen
Pfeil 13.4 Speicherbereiche für Datenübergabe
Pfeil 13.4.1 Globales SAP Memory
Pfeil 13.4.2 Lokales SAP Memory
Pfeil 13.4.3 ABAP Memory
Pfeil 13.4.4 Shared Objects
Pfeil 13.5 Codebeispiele zur Modularisierung
Pfeil 13.6 Codebeispiele zum Aufruf fremder Reports
 
Zum Seitenanfang

13.5    Codebeispiele zur Modularisierung Zur vorigen ÜberschriftZur nächsten Überschrift

Anhand des folgenden Codebeispiels zeigen wir Ihnen, wie Sie Ihren Programmcode mit den Mitteln der Modularisierung strukturieren können. Dazu zeigen wir neben dem Report in Listing 13.3 zwei Include-Programme in Listing 13.4 und Listing 13.5.

  1  *&---------------------------------------------*
2 *& Report Z_TEILNEHMERLISTE13_A *
3 *& *
4 *&---------------------------------------------*
5 *& *
6 *& *
7 *&---------------------------------------------*
8 REPORT z_teilnehmerliste13_a.
9 * Deklarationsteil
10 INCLUDE z_teilnehmer_deklarationen.
11 * Selektionsbildschirm deklarieren
12 INCLUDE zteilnehmer13_a_selektionsbild.
13 *----------------------------------------------*
14 * initialization.
15 *----------------------------------------------*
16 * at selection-screen.
17 *----------------------------------------------*
18 START-OF-SELECTION.
19 * itab01 füllen
20 PERFORM itab01_fuellen.
21 * itab02 füllen
22 PERFORM itab_fuellen USING itab02.
23 * itab03 füllen
24 PERFORM itab03_fuellen.
25 * itab04 füllen
26 PERFORM itab04_fuellen USING itab04
zzaehler_itab04 par04.
27 *----------------------------------------------*
28 END-OF-SELECTION.
29 * itab01 aufbereiten und in Liste ausgeben
30 PERFORM itab01_liste.
31 * itab02 verarbeiten und in Liste ausgeben
32 PERFORM itab02_liste.
33 * itab03 verarbeiten und in Liste ausgeben
34 PERFORM itab03_liste.
35 * itab04 verarbeiten und in Liste ausgeben
36 PERFORM itab04_liste USING par04 zzaehler_itab04.
37 * Aufruf eines Programms auf Präsentationsserver
38 PERFORM execute_loc_prog USING execlopr.
39 * Download itab04 auf Präsentationsserver
40 PERFORM itab04_download USING it04down.
41 * Workareas, Rumpf- und Kopfzeilen initialisieren
bzw. löschen
42 PERFORM aufraeumen.
43 * Prüfen, ob der Report von einem anderen Report
aufgerufen wurde
44 PERFORM report_ruf_pruefen.
45 * Ende des Hauptprogramms
46 *----------------------------------------------*
47 * Beginn der Unterprogramme
48 *&---------------------------------------------*
49 *& Form itab01_fuellen
50 *&---------------------------------------------*
51 * text
52 *----------------------------------------------*
53 * --> p1 text
54 * <-- p2 text
55 *----------------------------------------------*
56 FORM itab01_fuellen. " globale Variable
57 CHECK par01 IS NOT INITIAL.
58 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
59 ORDER BY PRIMARY KEY.
60 MOVE-CORRESPONDING wa_zteilnehmer02 TO wa_itab01.
61 APPEND wa_itab01 TO itab01.
62 ENDSELECT.
63 ENDFORM. " itab01_fuellen
64 *&---------------------------------------------*
65 *& Form itab02_fuellen
66 *&---------------------------------------------*
67 * text
68 *----------------------------------------------*
69 * --> p1 text
70 * <-- p2 text
71 *----------------------------------------------*
72 FORM itab_fuellen USING itab_universal TYPE table.
73 CHECK par02 IS NOT INITIAL.
74 SELECT * FROM zteilnehmer02
INTO CORRESPONDING FIELDS OF TABLE itab_universal
75 ORDER BY PRIMARY KEY.
76 ENDFORM. " itab_fuellen
77 *&---------------------------------------------*
78 *& Form itab03_fuellen
79 *&---------------------------------------------*
80 * text
81 *----------------------------------------------*
82 * --> p1 text
83 * <-- p2 text
84 *----------------------------------------------*
85 FORM itab03_fuellen . " lokale Variable
86 DATA lok_tmax TYPE i VALUE 10.
87 CHECK par03 IS NOT INITIAL.
88 wa_itab03-maxteil = lok_tmax.
89 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
90 ORDER BY PRIMARY KEY.
91 wa_itab03-bezeichnung =
wa_zteilnehmer02-zzkurstitel.
92 wa_itab03-preis = wa_zteilnehmer02-tkurspreis.
93 APPEND wa_itab03 TO itab03 .
94 ENDSELECT.
95 PERFORM test.
96 ENDFORM. " itab03_fuellen
97 *&---------------------------------------------*
98 *& Form itab04_fuellen
99 *&---------------------------------------------*
100 * text
101 *----------------------------------------------*
102 * --> p1 text
103 * <-- p2 text
104 *----------------------------------------------*
105 FORM itab04_fuellen USING lok_itab TYPE table
lok_zzaehler
lok_par04.
106 CHECK lok_par04 IS NOT INITIAL.
107 SELECT * FROM zteilnehmer02
INTO CORRESPONDING FIELDS OF TABLE lok_itab
108 ORDER BY PRIMARY KEY.
109 DESCRIBE TABLE lok_itab LINES lok_zzaehler.
110 ENDFORM. " itab04_fuellen
111 *&---------------------------------------------*
112 *& Form test
113 *&---------------------------------------------*
114 * text
115 *----------------------------------------------*
116 * --> p1 text
117 * <-- p2 text
118 *----------------------------------------------*
119 FORM test .
120 * BREAK-POINT.
121 * Globale Variable glob_tmax ist im Unterprogramm
bekannt.
122 * Lokale Variable lok_tmax ist nicht im Unterprogramm
bekannt.
123 ENDFORM. " test
124 *&---------------------------------------------*
125 *& Form itab01_liste
126 *&---------------------------------------------*
127 * text
128 *----------------------------------------------*
129 * --> p1 text
130 * <-- p2 text
131 *----------------------------------------------*
132 FORM itab01_liste .
133 CHECK par01 IS NOT INITIAL.
134 * Anzahl der Rumpfzeileneinträge für itab01 lesen und
ausgeben
135 DESCRIBE TABLE itab01 LINES zeilen_itab01.
136 SKIP.
137 WRITE: / 'Anzahl Zeilen itab01:', zeilen_itab01.
138 * Workarea initialisieren, füllen und neue Zeile in
itab01 anhängen
139 CLEAR wa_itab01.
140 zeilen_itab01 = zeilen_itab01 + 1.
141 wa_itab01-zzkurstitel = 'LINUX-GRUNDLAGEN'.
142 wa_itab01-tkurspreis = '456.78'.
143 INSERT wa_itab01 INTO itab01 INDEX zeilen_itab01.
144 * itab01 in Liste ausgeben
145 SKIP.
146 WRITE: / 'sy-tabix, itab01-zzkurstitel,
itab01-tkurspreis'.
147 LOOP AT itab01 INTO wa_itab01.
148 WRITE: / sy-tabix, wa_itab01-zzkurstitel,
wa_itab01-tkurspreis.
149 ENDLOOP.
150 * Einen Satz aus itab01 über Index lesen, löschen,
protokollieren
151 READ TABLE itab01 INTO wa_itab01 INDEX 3.
152 DELETE itab01 INDEX 3.
153 SKIP.
154 WRITE: / 'gelöscht von itab01', sy-tabix NO-GAP,
'.Zeile:',
155 wa_itab01-zzkurstitel, wa_itab01-tkurspreis.
156 ENDFORM. " itab01_liste
157 *&---------------------------------------------*
158 *& Form itab02_liste
159 *&---------------------------------------------*
160 * text
161 *----------------------------------------------*
162 * --> p1 text
163 * <-- p2 text
164 *----------------------------------------------*
165 FORM itab02_liste .
166 CHECK par02 IS NOT INITIAL.
167 * itab02 verarbeiten und in Liste ausgeben
168 SKIP.
169 WRITE: / 'itab02-zzkurstitel, itab02-tkurspreis,
itab02-minteiln'.
170 LOOP AT itab02 INTO wa_itab02 WHERE zzkurstitel =
'PC-GRUNDLAGEN' .
171 wa_itab02-minteiln = 2.
172 WRITE: / wa_itab02-zzkurstitel,
wa_itab02-tkurspreis, wa_itab02-minteiln.
173 ENDLOOP.
174 * Gezielt einzelnen Satz aus itab02 über Schlüssel
lesen, löschen, protokollieren
175 READ TABLE itab02 INTO wa_itab02
WITH KEY zzkurstitel = 'SAP-Grundlagen'.
176 DELETE TABLE itab02 FROM wa_itab02.
177 SKIP.
178 WRITE: / 'gelöscht von itab02',
sy-tabix NO-GAP,
'.Zeile:', wa_itab02-zzkurstitel.
179 ENDFORM. " itab02_liste
180 *&---------------------------------------------*
181 *& Form itab03_liste
182 *&---------------------------------------------*
183 * text
184 *----------------------------------------------*
185 * --> p1 text
186 * <-- p2 text
187 *----------------------------------------------*
188 FORM itab03_liste .
189 CHECK par03 IS NOT INITIAL.
190 * itab03 verarbeiten, ausgeben und Rumpf modifizieren
191 SKIP.
192 WRITE: / 'itab03-bezeichnung,
itab03-preis,
itab03-maxteil'.
193 LOOP AT itab03 INTO wa_itab03.
194 IF wa_itab03-bezeichnung = 'PC-GRUNDLAGEN'.
195 wa_itab03-preis = 567.
196 MODIFY itab03 FROM wa_itab03.
197 ENDIF.
198 WRITE: / wa_itab03-bezeichnung,
wa_itab03-preis,
wa_itab03-maxteil.
199 ENDLOOP.
200 * Einen Satz aus itab03 mit Index lesen und ausgeben
201 READ TABLE itab03 INDEX 3 INTO wa_itab03.
202 SKIP.
203 WRITE: / 'gelesen von itab03',
sy-tabix NO-GAP,
'.Zeile:',
204 wa_itab03-bezeichnung, wa_itab03-preis,
wa_itab03-maxteil.
205 ENDFORM. " itab03_liste
206 *&---------------------------------------------*
207 *& Form itab04_liste
208 *&---------------------------------------------*
209 * text
210 *----------------------------------------------*
211 * --> p1 text
212 * <-- p2 text
213 *----------------------------------------------*
214 FORM itab04_liste USING lok_par04 lok_zzaehler.
215 CHECK lok_par04 IS NOT INITIAL.
216 * Satz aus itab04 mit Schlüssel lesen und ausgeben,
Tabelleninfo ausgeben
217 READ TABLE itab04 INTO wa_itab04
WITH KEY mandant = sy-mandt tnummer = 5.
218 IF sy-subrc = 0.
219 SKIP.
220 WRITE: / 'gelesen von itab04',
221 / 'Zeilenanzahl der Tabelle:',
lok_zzaehler,
222 / 'Mandant', wa_itab04-mandant,
'Teilnehmer', wa_itab04-tnummer,
223 / wa_itab04-tname,
wa_itab04-tgeburtsdatum,
wa_itab04-tgeschlecht.
224 ENDIF.
225 ENDFORM. " itab04_liste
226 *&---------------------------------------------*
227 *& Form aufraeumen
228 *&---------------------------------------------*
229 * text
230 *----------------------------------------------*
231 * --> p1 text
232 * <-- p2 text
233 *----------------------------------------------*
234 FORM aufraeumen .
235 * Wirkung von CLEAR, REFRESH und FREE bei internen
Tabellen ohne Kopfzeile
236 * BREAK-POINT.
237 CLEAR wa_itab01. " initalisiert Workarea
238 CLEAR itab01. " löscht Rumpfzeilen
239
240 CLEAR wa_itab02. " initalisiert Workarea
241 REFRESH itab02. " löscht Rumpfzeilen
242
243 CLEAR wa_itab03. " initalisiert Workarea
244 FREE itab03. " löscht Rumpfzeilen und gibt
Platz frei
245 ENDFORM. " aufräumen
246 *&---------------------------------------------*
247 *& Form report_ruf_pruefen
248 *&---------------------------------------------*
249 * text
250 *----------------------------------------------*
251 * --> p1 text
252 * <-- p2 text
253 *----------------------------------------------*
254 FORM report_ruf_pruefen .
255 GET PARAMETER ID 'Z_TEST' FIELD progname.
256 IF progname IS NOT INITIAL.
257 repname = 'Z_TEILNEHMERLISTE13_A'.
258 SKIP.
259 WRITE: / 'Report', repname,
'wurde aufgerufen von:', progname.
260 IMPORT itab04 TO itab05 FROM MEMORY ID progname.
261 SKIP.
262 LOOP AT itab05 INTO wa_itab05.
263 WRITE: / 'itab05-tname:', wa_itab05-tname.
264 ENDLOOP.
265 progname = space.
266 SET PARAMETER ID 'Z_TEST' FIELD progname.
267 ENDIF.
268 ENDFORM. " report_ruf_pruefen
269 *&----------------------------------------------------*
270 *& Form test_execute
271 *&----------------------------------------------------*
272 * text
273 *-----------------------------------------------------*
274 * --> p1 text
275 * <-- p2 text
276 *-----------------------------------------------------*
277 FORM execute_loc_prog USING par_sel.
278 CHECK NOT par_sel IS INITIAL.
279 CALL FUNCTION 'WS_EXECUTE'
280 EXPORTING
281 * DOCUMENT = ' '
282 * CD = ' '
283 commandline = 'C:\TEMP\TEST.PDF'
284 program = 'C:\Program
Files (x86)\Adobe\Reader 11.0\
Reader\AcroRd32.exe'
285 * EXEC_RC = ' '
286 EXCEPTIONS
287 FRONTEND_ERROR = 1
288 NO_BATCH = 2
289 PROG_NOT_FOUND = 3
290 ILLEGAL_OPTION = 4
291 GUI_REFUSE_EXECUTE = 5
292 OTHERS = 6
293 .
294 IF sy-subrc <> 0.
295 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
296 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
297 ENDIF.
298 ENDFORM. " execute_loc_prog
299 *&----------------------------------------------------*
300 *& Form itab04_download
301 *&----------------------------------------------------*
301 * text
303 *-----------------------------------------------------*
304 * --> p1 text
305 * <-- p2 text
306 *-----------------------------------------------------*
307 FORM itab04_download USING par_sel.
308 CHECK NOT par_sel IS INITIAL.
309 CALL FUNCTION 'WS_DOWNLOAD'
310 EXPORTING
311 * BIN_FILESIZE = ' '
312 filename = locfile
313 filetype = 'DAT'
314 mode = ' '
315 * IMPORTING
316 * FILELENGTH =
317 TABLES
318 data_tab = itab04
319 EXCEPTIONS
320 file_open_error = 1
321 file_write_error = 2
322 invalid_filesize = 3
323 invalid_type = 4
324 no_batch = 5
325 unknown_error = 6
326 invalid_table_width = 7
327 gui_refuse_filetransfer = 8
328 customer_error = 9
329 no_authority = 10
330 OTHERS = 11
331 .
332 IF sy-subrc <> 0.
333 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
334 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
335 WRITE: / 'Download itab04 auf lokale Datei
misslungen, sy-subrc =', sy-subrc.
336 ENDIF.
337 ENDFORM. " itab04_download

Listing 13.3    Report Z_TEILNEHMERLISTE13_A

 1  *&---------------------------------------------*
2 *& INCLUDE ZTEILNEHMER13_A_SELEKTIONSBILD*
3 *&---------------------------------------------*
4
5 * Block auf Selektionsbildschirm mit Rahmen und
Rahmentext
6 SELECTION-SCREEN BEGIN OF BLOCK teilnehmer
WITH FRAME TITLE text-001.
7 PARAMETERS: par01 AS CHECKBOX,
8 par02 AS CHECKBOX,
9 par03 AS CHECKBOX,
10 par04 AS CHECKBOX,
11 execlopr AS CHECKBOX,
12 it04down AS CHECKBOX,
13 locfile TYPE c length 128
default 'C:\TEMP\TEST.XLS'.
14 SELECTION-SCREEN END OF BLOCK teilnehmer.

Listing 13.4    Include-Programm ZTEILNEHMER13_A_SELEKTIONSBILD

 1  *&---------------------------------------------*
2 *& INCLUDE Z_TEILNEHMER_DEKLARATIONEN *
3 *&---------------------------------------------*
4
5 * Tabellenarbeitsbereiche deklarieren
6 DATA wa_zteilnehmer02 TYPE zteilnehmer02.
7
8 * Felder deklarieren
9 DATA: glob_tmax TYPE i VALUE 12,
10 lokale_datei TYPE string,
11 nvml TYPE c LENGTH 1, " itab04 füllen
und verarbeiten in
Z_TEILNEHMERLISTE13_A
12 progname TYPE c LENGTH 25,
13 repname LIKE progname,
14 zeilen_itab01 TYPE i,
15 zzaehler_itab04 TYPE c LENGTH 1.
16
17 * Datentypen für Zeilen deklarieren
18 TYPES: BEGIN OF zeile01_typ,
19 zzkurstitel TYPE zteilnehmer02-zzkurstitel,
20 tkurspreis TYPE zteilnehmer02-tkurspreis,
21 END OF zeile01_typ.
22
23 TYPES BEGIN OF zeile02_typ.
24 INCLUDE TYPE zeile01_typ.
25 TYPES minteiln TYPE i.
26 TYPES END OF zeile02_typ.
27
28 TYPES: BEGIN OF zeile03_typ,
29 bezeichnung TYPE zteilnehmer02-zzkurstitel,
30 preis TYPE zteilnehmer02-tkurspreis,
31 maxteil TYPE i,
32 END OF zeile03_typ.
33
34 TYPES zeile04_typ TYPE zteilnehmer02.
35
36 * Datentypen für interne Tabellen deklarieren
37 TYPES itab01_typ TYPE STANDARD TABLE OF zeile01_typ.
38 TYPES itab02_typ TYPE STANDARD TABLE OF zeile02_typ.
39 TYPES itab03_typ TYPE STANDARD TABLE OF zeile03_typ.
40 TYPES itab04_typ TYPE STANDARD TABLE OF zeile04_typ.
41
42 * Interne Tabellen deklarieren ohne Kopfzeile
43 DATA itab01 TYPE itab01_typ.
44 DATA itab02 TYPE itab02_typ.
45 DATA itab03 TYPE itab03_typ.
46 DATA itab04 TYPE itab04_typ.
47 DATA itab05 TYPE itab04_typ.
48
49 * Workareas für interne Tabellen deklarieren
50 DATA wa_itab01 TYPE zeile01_typ.
51 DATA wa_itab02 TYPE zeile02_typ.
52 DATA wa_itab03 TYPE zeile03_typ.
53 DATA wa_itab04 TYPE zeile04_typ.
54 DATA wa_itab05 TYPE zeile04_typ.

Listing 13.5    Include-Programm Z_TEILNEHMER_DEKLARATIONEN

Anmerkungen zum Quellcode

Das Programm in Listing 13.3 soll keine neuen betriebswirtschaftlichen Aufgabenstellungen lösen. Es bietet in etwa die Funktionalität des Reports aus Kapitel 12, »Interne Tabellen« (siehe Listing 12.1). Der wesentliche Unterschied ist aber die Programmorganisation. Während im Report Z_TEILNEHMERLISTE12_ITAB_WA noch ziemlich unstrukturiert und unübersichtlich gearbeitet wurde, wird im Report Z_TEILNEHMERLISTE13_A – auch als Gegenüberstellung und zum Vergleich – Wert auf Strukturierung und Lesbarkeit gelegt. Diese wird u. a. durch die Verwendung der in Listing 13.4 und Listing 13.5 dargestellten Include-Programme erreicht.

Zeile 10

Alle Deklarationen von Datentypen und Datenobjekten wurden in ein eigenes Include-Programm ausgelagert. Auf diese Deklarationen greift auch der Report in Listing 13.6 Z_TEILNEHMERLISTE13_B (siehe Abschnitt 13.6, »Codebeispiele zum Aufruf fremder Reports«) zu. Das Include-Programm könnte die Funktion eines zentralen Deklarationsobjektes für mehrere Reports oder ein Aufgabengebiet übernehmen.

Zeile 12

Auch die Deklarationen für den Selektionsbildschirm wurden aus Gründen der Übersichtlichkeit in ein Include-Programm ausgelagert.

Zeile 18 bis 26

Unter dem Ereignis START-OF-SELECTION stehen auf oberster Programmebene keine Verarbeitungskommandos mehr, sondern nur noch steuernde Anweisungen, in unserem Beispiel Unterprogrammaufrufe. Hierdurch wird das Ereignis klar gegliedert und wesentlich übersichtlicher.

Zeile 28 bis 44

Auch unter dem Ereignis END-OF-SELECTION stehen nur noch Unterprogrammaufrufe aus denselben Gründen. Diese Arbeitsweise gilt auch für alle anderen denkbaren Ereignisse.

Zeile 45

Das Hauptprogramm enthält lediglich 44 Zeilen. Die Ereignisse sind klar gegliedert; die Funktionalität ist gekapselt. Sollte das Programm geändert oder angepasst werden müssen, ist durch Vorwärtsnavigation über das entsprechende Unterprogramm der Ort für die Anpassung schnell lokalisiert.

Zeile 56 bis 63

Das Unterprogramm arbeitet mit globalen Variablen, die im Include-Programm (Zeile 10) deklariert wurden und auf allen Ebenen des Reports bekannt sind.

Zeile 72 bis 76

Das Unterprogramm arbeitet mit einem lokalen Tabellennamen, der nur innerhalb des Unterprogramms bekannt ist. Der lokale Name ist in der FORM-Anweisung deklariert. Der Name in der rufenden Struktur muss bei der PERFORM-Anweisung mitgeliefert werden; die Attribute für die lokale Deklaration werden aus den Attributen der Deklaration des Objektes bei der PERFORM-Anweisung übernommen. Durch diese Kapselung kann das Unterprogramm jede beliebige interne Tabelle mit den Werten der Datenbanktabelle ZTEILNEHMER02 füllen und ist damit universell einsetzbar.

Zeile 85 bis 96

Im Unterprogramm wird eine lokale Variable deklariert und verarbeitet. Zum Verständnis wird ein weiteres Unterprogramm aufgerufen. Wie Sie im Debugger gut verfolgen können, sind dort nur die globalen Variablen bekannt.

Zeile 105 bis 110

Dem Unterprogramm werden eine Tabelle und mehrere Variablen übergeben. Die PERFORM- und die FORM-Anweisung müssen strukturgleich sein, da es sich bei den Übergabeobjekten um Stellungsoperanden handelt.

Zeile 111 bis 123

In diesem Unterprogramm befindet sich lediglich ein zunächst auskommentierter statischer Breakpoint. Wenn Sie den Breakpoint durch Entfernen des Sternchens zu Beginn der Zeile aktivieren, hält der Debugger an diesem Unterprogramm an. Sie können dann mit der Sichtbarkeit der Variablen experimentieren: Globale Variablen des Programms sind sichtbar, aber lokale Variablen aus anderen Unterprogrammen – z. B. aus der rufenden Prozedur ITAB03_FUELLEN – sind nicht sichtbar.

Zeile 124 bis 156

Im Unterprogramm wird die interne Tabelle ITAB01 bearbeitet. Zunächst wird die Zahl der Tabelleneinträge ausgegeben, dann wird eine Zeile an die interne Tabelle angehängt und anschließend wird die Tabelle zeilenweise ausgegeben. Zuletzt wird ein Tabelleneintrag gelöscht und eine entsprechende Meldung ausgegeben.

Zeile 157 bis 179

Im Unterprogramm wird die interne Tabelle ITAB02 bearbeitet. Zunächst wird eine Schleife mit einer Bedingung durchlaufen, und die passenden Tabelleneinträge werden ausgegeben. Dann wird ein Tabelleneintrag gezielt gelöscht.

Zeile 180 bis 205

Im Unterprogramm wird die interne Tabelle ITAB03 modifiziert und ausgegeben. Anschließend wird ein Satz gezielt gelesen und ausgegeben.

Zeile 206 bis 225

Im Unterprogramm wird die interne Tabelle ITAB04 mit Schlüssel gelesen und ausgegeben. Das Unterprogramm besitzt zwei Parameter: Der erste steuert, ob die interne Tabelle überhaupt verarbeitet werden soll; der zweite wird vom Unterprogramm befüllt und steht anschließend als globale Variable ZZAEHLER_ITAB04 im Hauptprogramm auch anderen Unterprogrammen zur Verfügung.

Zeile 226 bis 245

Im Unterprogramm werden verschiedene Datenobjekte initialisiert.

Zeile 246 bis 268

In diesem Unterprogramm wird geprüft, ob der Report von einem anderen Report aufgerufen wurde. Es liest hierzu die Parameter-ID aus dem SAP Memory, die zuvor vom rufenden Report gefüllt wurde. Findet das Unterprogramm einen Wert »ungleich Blank«, wurde der Report von einem fremden Report aufgerufen. Es startet für diesen Fall eine Verarbeitung, bei der eine interne Tabelle aus dem ABAP Memory gefüllt und verarbeitet wird. Der rufende Report muss dort die Rumpfzeilen der internen Tabelle bereits vorher abgelegt haben. Danach wird die Parameter-ID initialisiert und wieder ins SAP Memory geschrieben. Bei einem wiederholten eigenständigen Start des Reports könnte sonst keine Unterscheidung stattfinden, ob der Report von selbst gestartet oder von einem fremden Programm aufgerufen wurde.

Zeile 269 bis 298

Dieses Unterprogramm ruft auf dem lokalen PC, d. h. dem Präsentationsserver, den Acrobat Reader auf und »sagt« ihm gleichzeitig, welche Datei er öffnen soll. Bei beiden Angaben müssen Sie den Pfadnamen angeben. Bei der Frage, ob im Literal ein Unterschied zwischen Groß- und Kleinschreibung gemacht werden muss, denken Sie an die Anforderungen Ihres Betriebssystems auf dem PC. Manche Betriebssysteme differenzieren hier, andere nicht. Beachten Sie auch, dass die Pfadangaben bei Ihnen von den im Beispiel verwendeten abweichen können, da sie Ihrer Version des Adobe Acrobat Reader abhängig sind.

Zeile 299 bis 337

In diesem Abschnitt wird der Inhalt der internen Tabelle itab04 per Download auf dem lokalen PC gespeichert und als Datei abgelegt. Der Name der Zieldatei muss als Pfadname angegeben werden. Am einfachsten erledigen Sie dies über den Selektionsbildschirm. Je nach Weiterverwendung der Datei können Sie verschiedene Formate wählen. Da diese Datei mit Excel weiterverarbeitet werden soll, wurde als Dateityp 'DAT' gewählt. Dies ist ein Format, mit dem die meisten Tabellenkalkulationsprogramme auf einem PC arbeiten können.

Ausgabe des Quellcodes

Der veränderten Denkstruktur – hin zu modularen Bausteinen – entspricht auch der umgestaltete Selektionsbildschirm (siehe Abbildung 13.31): Nur die ausgewählten Teilaufgaben sollen im Programm verarbeitet werden. Durch das Verwenden von Ankreuzfeldern ist auch eine Mehrfachauswahl möglich.

Selektionsbildschirm des Reports Z_TEILNEHMERLISTE13_A

Abbildung 13.31    Selektionsbildschirm des Reports Z_TEILNEHMERLISTE13_A

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Einstieg in ABAP Einstieg in ABAP
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: SAP – Der technische Einstieg
SAP – Der technische Einstieg


Zum Rheinwerk-Shop: ABAP Objects – Das umfassende Handbuch
ABAP Objects – Das umfassende Handbuch


Zum Rheinwerk-Shop: ABAP-Entwicklung für SAP S/4HANA
ABAP-Entwicklung für SAP S/4HANA


Zum Rheinwerk-Shop: Kundeneigene Erweiterungen mit ABAP
Kundeneigene Erweiterungen mit ABAP


Zum Rheinwerk-Shop: Schrödinger programmiert ABAP
Schrödinger programmiert ABAP


Zum Rheinwerk-Shop: Migration nach SAP S/4HANA
Migration nach SAP S/4HANA


Zum Rheinwerk-Shop: Design Thinking mit SAP
Design Thinking mit SAP


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern