Ansicht
Dokumentation
ABENITAB_HEADER_LINE - ITAB HEADER LINE
General Data in Customer Master ABAP Short ReferenceDiese Dokumentation steht unter dem Copyright der SAP AG.
Interne Tabellen mit Kopfzeile
Außerhalb von Klassen und solange eine interne Tabellen nicht Komponente einer Struktur oder Zeile einer anderen internen Tabelle ist, ist es noch möglich, interne Tabellen mit einer so genannten Kopfzeile anzulegen.
Deklaration von Kopfzeilen
Kopfzeilen von internen Tabellen entstehen
- über den Zusatz WITH HEADER LINE der Anweisung DATA bei der Deklaration beliebiger interner Tabellen,
- bei Verwendung der obsoleten Anweisungsfolge DATA - BEGIN OF OCCURS zur Deklaration strukturierter Standardtabellen,
- bei Verwendung der obsoleten Anweisung RANGES zur Deklaration von Ranges-Tabellen,
- bei der Deklaration von Selektionstabellen mit der Anweisung SELECT-OPTIONS,
- bei Verwendung von Tabellenparametern für Funktionsbausteine und Unterprogramme.
Hinweis
Mit der Anweisung CREATE DATA kann keine interne Tabelle mit Kopfzeile erzeugt werden.
Eigenschaften von Kopfzeilen
Eine Kopfzeile ist ein Arbeitsbereich,
- dessen Datentyp gleich dem Zeilentyp der internen Tabelle und
- dessen Name gleich dem Namen der internen Tabelle ist.
Beim Vorliegen einer Kopfzeile existieren in einem ABAP-Programm also zwei gleichnamige Datenobjekte, nämlich die eigentliche interne Tabelle und die Kopfzeile. Der Zugriff auf interne Tabelle und Kopfzeile ist wie folgt geregelt:
- Viele Verarbeitungsanweisungen für interne Tabellen haben obsolete Kurzformen, in denen die Kopfzeile als impliziter Arbeitsbereich verwendet wird, wenn kein expliziter Arbeitsbereich angegeben ist.
- In allen anderen Fällen hängt es von der jeweiligen Anweisung und Operandenposition ab, ob bei Angabe des Tabellennamens mit dem Tabellenkörper oder der Kopfzeile gearbeitet wird. In der Regel wird die Kopfzeile adressiert. Nur in folgenden Fällen wird der bloße Name einer internen Tabelle mit Kopfzeile als Tabellenkörper interpretiert:
- Operandenpositionen in den Verarbeitungsanweisungen für interne Tabellen, an denen die zu verarbeitende interne Tabelle angegeben wird.
- Operandenpositionen in Ausdrücken, bei denen eine interne Tabelle erwartet wird, wie hinter FOR ... IN bei einer Tabelleniteration.
- Operandenpositionen in anderen Anweisungen, deren Operandentyp eine interne Tabelle ist, wie z.B. hinter SPLIT ... INTO TABLE, CONCATENATE LINES OF, SELECT ... INTO TABLE, READ REPORT ... INTO usw.
- Angabe der internen Tabelle in einem Tabellenausdruck
- Beim Speichern und Lesen von Daten-Clustern mit EXPORT und IMPORT.
- In der Anweisung FREE.
- In der obsoleten Anweisung SEARCH.
Um beim Vorhandensein einer Kopfzeile den Zugriff auf den Tabellenkörper an beliebigen Operandenpositionen zu erzwingen, können an allen Operandenpositionen eckige Klammern direkt hinter dem Namen einer internen Tabelle angegeben werden (z.B. itab[]). Dies gilt aber nicht für die Angabe der internen Tabelle in einem Tabellenausdruck.
Hinweise
- Bei einem LIKE-Bezug auf eine interne Tabelle mit Kopfzeile kann man sich entweder auf die Kopfzeile oder über die Angabe von [] auf den Tabellenkörper beziehen, aber nicht auf die interne Tabelle inklusive Kopfzeile.
- Ein Feldsymbol, ein Formalparameter (außer Tabellenparametern) oder eine Datenreferenz können jeweils nur den Tabellenkörper oder nur die Kopfzeile adressieren. Ein Feldsymbol, ein Formalparameter (außer Tabellenparametern) oder eine Datenreferenz ist somit nie zweideutig.
- Bei der Übergabe einer Tabelle mit Kopfzeile an Tabellenparameter werden Tabellenkörper und Kopfzeile übergeben.
- Die Angabe von [] bei internen Tabellen ohne Kopfzeile ist zwar möglich, aber nicht notwendig, da bei einer internen Tabelle ohne Kopfzeile ihr bloßer Name (ohne []) an allen Operandenpositionen ohnehin als Tabellenkörper interpretiert wird.
- An vielen Operandenpositionen, an denen interne Tabellen erwartet werden, erzwingt die Syntaxprüfung die Angabe von [] hinter dem Namen einer internen Tabelle mit Kopfzeile.
- Die RTTS unterstützen keine internen Tabellen mit Kopfzeilen. Ein Typbeschreibungsobjekt kann entweder nur die Kopfzeile oder den Tabellenkörper beschreiben.
- Statt [] zur Adressierung der Kopfzeile kann in sehr alten Programmen auch noch die Verwendung der obsoleten Pseudokomponente *sys* gefunden werden.
Verwendung
Die Verwendung von Kopfzeilen ist wegen der Mehrfachverwendung eines einzigen Namens für zwei Datenobjekte äußerst kritisch und fehleranfällig. Die Erzeugung und Verwendung von Kopfzeilen muss auch außerhalb von Klassen so weit wie möglich vermieden werden.
- Der Zusatz WITH HEADER LINE und die Anweisungsfolge DATA - BEGIN OF OCCURS sollen nicht mehr verwendet und Ranges-Tabellen nicht mehr mit RANGES deklariert werden.
- Die Verwendung von Tabellenparametern soll so weit wie möglich vermieden werden.
- In den Fällen, in denen die Erzeugung der Kopfzeile unumgänglich ist, wie bei Selektionstabellen oder in Prozeduren, in denen noch Tabellenparameter notwendig sind (in der Regel nur remote-fähige Funktionsbausteine), soll niemals mit der Kopfzeile, sondern immer mit zusätzlich deklarierten expliziten Arbeitsbereichen gearbeitet werden.
Hinweise
- Ein Arbeitsbereich zum Ersetzen einer Kopfzeile kann sehr einfach mit dem Zusatz LINE OF der Anweisungen TYPES, DATA etc. deklariert werden.
- Die Verwendung eines zusätzlichen Arbeitsbereichs ist nicht mit der expliziten Vervollständigung der impliziten Kurzformen zu verwechseln, wie z.B. LOOP AT itab INTO itab. Auch letzteres zählt zu den unerwünschten Verwendungen einer Kopfzeile.
- Tabellen mit Kopfzeilen bieten keinerlei Performance-Vorteile.
Beispiel
Das folgende Beispiel zeigt eine typische Falle beim Umgang mit internen Tabellen mit Kopfzeile: Eine interne Tabelle mit Kopfzeile, hier der Tabellenparameter eines Funktionsbausteins, soll über CLEAR initialisiert werden, wobei vergessen wird, [] an den Namen anzuhängen. In diesem Fall wird nur die Kopfzeile gelöscht, was sich meistens aber erst zur Laufzeit bemerkbar macht.
FUNCTION work_with_tables.
*"---------------------------------
*"*"Local Interface
*" TABLES
*" table STRUCTURE structure
*"----------------------------------
CLEAR table.
...
ENDFUNCTION.
CL_GUI_FRONTEND_SERVICES - Frontend Services PERFORM Short Reference
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 11181 Date: 20240523 Time: 160306 sap01-206 ( 141 ms )