Ansicht
Dokumentation

ABENITAB_HEADER_LINE - ITAB HEADER LINE

ABENITAB_HEADER_LINE - ITAB HEADER LINE

General Data in Customer Master   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

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,

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:

  • In der Anweisung FREE.

  • In der obsoleten Anweisung SEARCH.

  • Bei der dynamischen Token-Angabe in (außer bei der Angabe von Datenbanktabellen).

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.

  • 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 )