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 12 Interne Tabellen
Pfeil 12.1 Sinn und Zweck interner Tabellen
Pfeil 12.2 Aufbau und Arten von internen Tabellen
Pfeil 12.3 Interne Standardtabelle anlegen
Pfeil 12.3.1 Objektorientierte Schreibweise mit Workarea
Pfeil 12.3.2 Obsolete Schreibweise mit Kopfzeile
Pfeil 12.4 Interne Standardtabelle füllen
Pfeil 12.4.1 Interne Tabelle mit Workarea füllen
Pfeil 12.4.2 Interne Tabelle mit Kopfzeile füllen
Pfeil 12.5 Interne Tabelle zeilenweise verarbeiten
Pfeil 12.5.1 Interne Tabelle mit Workarea verarbeiten
Pfeil 12.5.2 Interne Tabelle mit Kopfzeile verarbeiten
Pfeil 12.6 Inhalte von internen Tabellen löschen
Pfeil 12.6.1 Workareas und interne Tabellen mit Workarea löschen
Pfeil 12.6.2 Interne Tabellen mit Kopfzeile löschen
Pfeil 12.7 Codebeispiel zu ITAB mit Workarea
Pfeil 12.8 Codebeispiel zu ITAB mit Kopfzeile
 
Zum Seitenanfang

12.3    Interne Standardtabelle anlegen Zur vorigen ÜberschriftZur nächsten Überschrift

Betrachten wir zunächst die reguläre Anlage einer Standardtabelle.

 
Zum Seitenanfang

12.3.1    Objektorientierte Schreibweise mit Workarea Zur vorigen ÜberschriftZur nächsten Überschrift

In der modernen Schreibweise gibt es eine klare Trennung zwischen Datenobjekt – das konkret mit Werten belegt wird – und Datentyp. Ein Datentyp ist eine Strukturbeschreibung, die beim Deklarieren eines Datenobjektes als Muster dient und in mehreren Datenobjekten wiederverwendet werden kann. Datentypen können elementar (ein einzelnes Feld) oder komplex (aus anderen Datentypen zusammengesetzt) sein. Ist ein Datentyp komplex, d. h. aus anderen Datentypen zusammengesetzt, können diese wiederum elementar oder komplex sein. Dieses Zusammensetzen im »Baukastenprinzip« lässt sich beliebig fortsetzen, sodass Sie komplexe Datentypen erstellen können, die wiederum aus Datentypen zusammengesetzt sind. Erst hierdurch ist es beispielsweise möglich, eine interne Tabelle anzulegen, die eine interne Tabelle enthält etc.

[+]  Vorteile der Abstraktion

Der Vorteil dieser Abstraktion liegt zum einen in der Modularisierung und Wiederverwendbarkeit solcher Datentypen und zum anderen darin, dass hierdurch alle zusammengehörenden Datenobjekte auch in zusammengehörende Arbeitsbereiche gelegt und verarbeitet werden können.

Um eine interne Tabelle zu deklarieren, benötigen Sie für die objektorientierte Denk- und Schreibweise vier Stufen, die häufig, aber nicht zwingend in dieser Reihenfolge deklariert werden:

  • Deklaration eines Zeilentyps

  • Deklaration eines Tabellentyps

  • Deklaration der Tabelle

  • Deklaration des Arbeitsbereiches

Zunächst sieht das Durchgehen dieser Stufen nach viel Aufwand aus; dies kann allerdings täuschen: Bei großen und komplexen Programmen kommt der Vorteil zum Tragen, dass die Typdeklarationen von Tabellen und Tabellenzeilen wiederverwendbar sind. Sie können für weitere Tabellen oder für Schnittstellen verwendet werden, und Sie können sie nach Bedarf schachteln und in neue Typen integrieren.

Bezogen auf unser erstes Beispiel, würden Sie für die Deklaration der internen Tabelle ITAB01 zunächst den Zeilentyp ZEILE01_TYP mit der Anweisung TYPES deklarieren:

TYPES: BEGIN OF zeile01_typ,
zzkurstitel TYPE zteilnehmer02-zzkurstitel,
tkurspreis TYPE zteilnehmer02-tkurspreis,
END OF zeile01_typ.

Der Zeilentyp besteht aus zwei Feldern, ZZKURSTITEL und TKURSPREIS, bei deren Deklaration wiederum auf das ABAP Dictionary verwiesen wird. Die Deklaration der Felder, genau genommen der Feldtypen, erfolgt hier ebenfalls mit der TYPES- und nicht mit der DATA-Anweisung. Die TYPES-Anweisung ist im Beispiel als Kettensatz aufgebaut.

Der Tabellentyp wird ebenfalls mit der TYPES-Anweisung deklariert. Für den Tabellentyp ITAB01_TYP soll gelten, dass es sich immer um einen Standardtabellentyp mit dem Zeilentyp ZEILE01_TYPE handelt. Eine Standardtabelle hat immer einen nicht eindeutigen Schlüssel; der Zusatz für den Schlüssel kann deshalb entfallen.

Ebenso entfallen kann in den meisten Fällen der Zusatz für den initialen Speicherplatz der internen Tabelle. Dieser ist nur sinnvoll, wenn Sie die voraussichtliche Anzahl von Zeilen bei diesem Tabellentyp bereits in diesem Stadium genauer schätzen könnten und die richtige Schätzung auch in irgendeiner Weise relevant für eine gute Performance Ihres Programms wäre, was nur in seltenen Sonderfällen bei sehr großen oder vielfach erzeugten Tabellen der Fall ist. Der Zusatz hierfür lautet INITIAL SIZE n. Er kann entfallen, wenn für n der Wert 0 eingesetzt wird und Sie es wieder dem System überlassen möchten, wie es den Speicherplatz verwaltet.

Der Zusatz STANDARD TABLE OF ist erforderlich, um die Tabellenart festzulegen. Wenn Sie den Typ ITAB01_TYP für eine Standardtabelle mit der Zeilenstruktur vom Typ ZEILE01_TYP anlegen möchten, schreiben Sie:

TYPES itab01_typ TYPE STANDARD TABLE OF zeile01_typ.

Nur zum Vergleich und zum besseren Verständnis ein kurzer Hinweis auf die Deklaration einer internen sortierten Tabelle mit eindeutigem Schlüssel: Angenommen, die interne Tabelle soll eine sortierte Tabelle mit eindeutigem Schlüssel werden, dann müssten Sie den Tabellentyp anders deklarieren. Der Tabellentyp wäre dann vom Typ SORTED TABLE. Den eindeutigen Schlüssel, im Beispiel das Feld ZZKURSTITEL, deklarieren Sie dann mit dem Zusatz WITH UNIQUE KEY:

TYPES itab01_typ TYPE SORTED TABLE OF zeile01_typ
WITH UNIQUE KEY zzkurstitel.
[ ! ]  Eindeutigkeit des Schlüssels

Beachten Sie, dass der Schlüssel in diesem Beispiel wirklich eindeutig sein muss. Es dürfen keine zwei Zeilen mit demselben Schlüssel, d. h. mit denselben Feldinhalten der Schlüsselfelder vorkommen. Der Schlüssel selbst kann aus mehreren Komponenten bestehen. Sie werden als Feldliste – getrennt durch ein Leerzeichen – geschrieben.

Damit wären die erforderlichen Typdeklarationen abgeschlossen. Wie erwähnt, sind diese Typdeklarationen für andere interne Tabellen und Typdeklarationen wiederverwendbar. Leider sieht man die Vorteile nicht bei kleinen Beispielprogrammen, sondern erst in der Praxis.

Was noch fehlt, sind die Deklarationen der internen Tabelle selbst und die der zugeordneten Workarea.

Die Tabelle ITAB01 deklarieren Sie ohne Kopfzeile mit der Anweisung:

DATA itab01 TYPE itab01_typ.

Den Arbeitsbereich für die Tabelle ITAB01 deklarieren Sie mithilfe des Zeilentyps ZEILE01_TYP:

DATA wa_itab01 TYPE zeile01_typ.

Die Workarea ist technisch nicht an die interne Tabelle gebunden, sondern Sie können sie beliebig verwenden. Sie müssen selbst durch die geeigneten Anweisungen dafür sorgen, dass die Workarea zum richtigen Zeitpunkt die richtigen Inhalte hat. Ob Sie diese Inhalte dann verwenden, um interne Tabellen zu verarbeiten oder zu anderen Zwecken, ist Ihre Entscheidung.

 
Zum Seitenanfang

12.3.2    Obsolete Schreibweise mit Kopfzeile Zur vorigen ÜberschriftZur nächsten Überschrift

Die obsolete Schreibweise, um eine interne Tabelle zu deklarieren, verwendet ausschließlich die DATA-Anweisung. Die TYPES-Anweisung wird nicht verwendet, denn die dargestellte Trennung zwischen Datentyp und Datenobjekt entfällt; ebenso gibt es keine von der internen Tabelle unabhängige Workarea, sondern eine an die Tabelle gekoppelte Kopfzeile erfüllt diese Funktion. Mit Zusätzen der DATA-Anweisung bilden Sie eine Struktur, die Beginn und Ende der internen Tabelle kennzeichnet. Dazwischen stehen die Felder, die eine Zeile beschreiben. Struktur und Felder werden als Kettensatz mit der DATA-Anweisung deklariert.

Möchten Sie z. B. eine interne Tabelle mit dem Namen ITAB01 anlegen, die Felder für die Kursbezeichnung und den Kurspreis haben soll, deklarieren Sie diese folgendermaßen:

DATA: BEGIN OF itab01 OCCURS 0,
zzkurstitel LIKE zteilnehmer02-zzkurstitel,
tkurspreis LIKE zteilnehmer02-tkurspreis,
END OF itab01.

Mit der Anweisung DATA: BEGIN OF itab01 deklarieren Sie den Strukturanfang, d. h. den Beginn der internen Tabelle. Durch den Doppelpunkt (:) nach der DATA-Anweisung leiten Sie den Kettensatz ein. Der Zusatz BEGIN OF kennzeichnet den Beginn der internen Tabelle ITAB01. Die Deklaration der internen Tabelle ITAB01 wird mit der DATA-Anweisung und dem Zusatz END OF beendet.

Nach dem Namen der internen Tabelle geben Sie mit dem Zusatz OCCURS eine Schätzung ab, wie viele Zeilen die Tabelle voraussichtlich haben wird. Das System reserviert daraufhin einen entsprechenden Speicherbereich. Ist der reservierte Bereich zu groß, verschwenden Sie Ressourcen; ist der reservierte Platz zu klein, legt das System automatisch Erweiterungen im Arbeitsspeicher an. Die erste Erweiterung wird mit der doppelten Größe des reservierten Speichers, maximal aber mit acht Kilobytes angelegt; jede folgende Erweiterung mit zwölf Kilobytes. Mit dem Zusatz OCCURS 0 überlassen Sie es dem System, wie groß es den ersten, initialen Speicherbereich anlegt. In der Praxis können Sie häufig mit dieser Option arbeiten.

Der Zusatz OCCURS hat noch eine andere wesentliche Bedeutung: Er unterscheidet bei der Deklaration eine interne Tabelle von einer flachen Struktur bzw. einem Arbeitsbereich. Fehlt der Zusatz, ist es die Deklaration für einen Arbeitsbereich, d. h. eine Workarea; ist er vorhanden, legt das System eine interne Standardtabelle mit Kopfzeile an.

Die DATA-Anweisung als Kettensatz wird mit dem Doppelpunkt begonnen, und jede Anweisung wird mit einem Komma beendet; nur die letzte Anweisung der Kette wird mit einem Punkt abgeschlossen. Im angeführten Codebeispiel beendet die Anweisung END OF itab01., die Struktur nach den Felddeklarationen.

In der Struktur stehen die Anweisungen für die Deklarationen der Tabellenfelder der internen Tabelle. Sie beschreiben eine Zeile. Der Zeilentyp könnte wiederum durch eine Struktur oder durch eine Mischform beschrieben sein. Für die Deklaration der einzelnen Felder gelten die allgemeinen Regeln der DATA-Anweisung.

[+]  Namensgleiche Felder

Für die Arbeit mit internen Tabellen kann es von Vorteil sein, wenn Felder mit gleicher Bedeutung namensgleich mit den jeweiligen Feldern der Datenbanktabellen sind. Aus technischen Gründen ist dies allerdings nicht notwendig. Dies gilt analog auch für die Attribute der namensgleichen Felder. Beispiele hierzu finden Sie im folgenden Abschnitt.

 


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