13.2 Quelltext-Module 

Unser Codebeispiel aus dem letzten Kapitel, den Report Z_TEILNEHMERLISTE12_ITAB_WA (siehe Listing 12.1), kann man mit bereits gut 160 Zeilen Code nicht als übersichtlich und gut gegliedert bezeichnen. Wie würde eine solche »Spaghetti-Programmierung« erst nach 2.000 Zeilen aussehen?
Um den Report besser zu strukturieren und zu gliedern, kopieren Sie ihn zunächst in den Report Z_TEILNEHMERLISTE13. Für den Deklarationsteil legen Sie dort ein eigenes Include-Programm Z_TEILNEHMER_DEKLARATIONEN an, der alle Datendeklarationen enthalten soll. Mit folgender Anweisung binden Sie den Inhalt des Reports Z_TEILNEHMER_DEKLARATIONEN in Ihren Report Z_TEILNEHMERLISTE13 so ein, dass nach der Generierung ein einziges Laufzeitobjekt entsteht:
INCLUDE z_teilnehmer_deklarationen.
Den Namen eines Includes sollten Sie stets so wählen, dass die Zuordnung zum Hauptprogramm leicht erkennbar ist. (Wie Sie wissen, kann ein Include zwar theoretisch auch in mehreren Hauptprogrammen verwendet werden, dies ist aber aus den genannten Gründen eher von Nachteil und wird nicht empfohlen.)
Die Wirkung der Anweisung ist daher die gleiche, als wenn Sie den Quellcode des Include-Programms anstelle der INCLUDE-Anweisung in das Hauptprogramm kopiert hätten.
[»] Sonderregelung
Beachten Sie eine kleine »Sonderregelung« für die INCLUDE-Anweisung: Sie muss vollständig in einer einzigen Zeile stehen, und es dürfen keine weiteren Anweisungen in dieser Zeile vorkommen.
Der Deklarationsteil des Hauptprogramms soll im Endstadium nur noch aus Kommentarzeilen und INCLUDE-Anweisungen bestehen, etwa:
* Deklarationsteil
INCLUDE z_teilnehmer_deklarationen.
Für das Anlegen des Include-Programms gibt es wiederum zwei Wege: Zum einen können Sie das Programm über die ABAP Workbench und den Einstiegsbildschirm im ABAP Editor anlegen, wie Sie bisher auch neue Reports angelegt haben; lediglich bei den Programmeigenschaften müssen Sie darauf achten, kein ausführbares Programm anzulegen, sondern ein Include-Programm (siehe Abschnitt 3.2, »ABAP Editor im Überblick«).
Der zweite Weg führt direkt aus dem ABAP Editor des Reports Z_TEILNEHMERLISTE13 durch Vorwärtsnavigation in den Editor des Include-Programms: Durch einen Doppelklick auf den Programmnamen beginnen Sie die Vorwärtsnavigation. Das Objekt existiert noch nicht, und das System fragt, ob das Objekt angelegt werden soll. Sie beantworten die Abfrage mit Ja. Danach legen Sie in diesem Beispiel das Objekt wieder als lokales Objekt an. In der Praxis würden Sie hier natürlich eine bestehende Auftragsnummer verwenden oder einen neuen Transportauftrag anlegen. Nach diesem Mausklick öffnet sich sofort wieder der ABAP Editor – Sie befinden sich allerdings in einem neuen Report und editieren nun das Include-Programm (siehe Abbildung 13.1).
Abbildung 13.1 Include-Programm editieren
Als Erstes sollte Ihnen auffallen, dass es im Quellcode keine REPORT-Anweisung gibt. Dies ist auch richtig so, denn es handelt sich nicht um einen ausführbaren Report. Wenn Sie über das Menü Springen • Eigenschaften zu den Programmeigenschaften des Reports wechseln, sehen Sie auch, dass das System als Programmtyp ein Include-Programm angelegt hat (siehe Abbildung 13.2). Diesen Typ hätten Sie hier auch angeben müssen, wenn Sie das Include-Programm auf dem ersten angedeuteten Weg direkt über die ABAP Workbench angelegt hätten.
In dieses Include-Programm schreiben Sie nun alle nötigen Datendeklarationen, die zuvor im Report Z_TEILNEHMERLISTE12_ITAB_WA fast eine DIN-A4-Seite füllten, d. h. die Zeilen 12 bis 52. Nachdem Sie alle erforderlichen Anweisungen in das Include-Programm hineingeschrieben oder -kopiert haben, prüfen und aktivieren Sie dieses Programm, um es auch tatsächlich nutzen zu können. Mit dem Zurück-Button () kehren Sie in Ihr Hauptprogramm zurück.
Abbildung 13.2 Programmeigenschaften eines Include-Programms
[ ! ] Schachtelungen möglich, aber nicht gut lesbar
Include-Programme sind schachtelbar, d. h. dass in einem Include-Programm ein anderes Include-Programm aufgerufen werden kann. Außerdem können beliebig viele INCLUDE-Anweisungen in einem solchen Report vorkommen. Für unser Beispiel hätten Sie demnach theoretisch für jede interne Tabelle ein eigenes INCLUDE anlegen können – zu beachten ist lediglich, dass die INCLUDE-Anweisung an der logisch richtigen Stelle im Quelltext stehen muss.
Es gibt (abschreckende) Beispiele von SAP-Standardprogrammen, bei denen die ersten beiden Programmebenen nur aus INCLUDE-Anweisungen bestehen und erst ab der dritten Ebene altbekannte Anweisungen erscheinen, wie beispielsweise DATA. Aus Gründen der Übersichtlichkeit und der Wartbarkeit empfehlen wir Ihnen, auf das Schachteln von Includes zu verzichten und sie höchstens zur Modularisierung auf der obersten Programmebene zu verwenden.
Generell sollten Sie abwägen, ob es der Lesbarkeit und Editierbarkeit eines Programms dienlich ist, den Quellcode auf mehrere Includes zu verteilen – und ob Sie die angestrebte Quelltext-Modularisierung nicht auch mit fortgeschrittenen Techniken der Wiederverwendung, wie Funktionsbausteinen und ABAP-Klassen, erreichen können.
Das Include-Programm wird bereits bei der Syntaxprüfung für das Hauptprogramm einbezogen, als ob die Quellcode-Zeilen im Hauptprogramm stünden.