Wie zählt man Zeilen in internen Tabellen in SAP ABAP? (lines(), DESCRIBE)

kategorie
General
Veröffentlicht
autor
Johannes

Es gibt in SAP ABAP mehrere Möglichkeiten, die Anzahl der Zeilen (Einträge) in einer internen Tabelle zu ermitteln. Hier sind die gängigsten Methoden:

1. Die lines() Funktion (Empfohlen für neuere ABAP-Versionen, ab ABAP 7.02)

Dies ist die modernste und oft bevorzugte Methode, da sie direkt in Ausdrücken verwendet werden kann und sehr lesbar ist.

DATA lt_data TYPE STANDARD TABLE OF mara.
DATA lv_anzahl_zeilen TYPE i.
" ... Logik zum Füllen der Tabelle lt_data ...
lv_anzahl_zeilen = lines( lt_data ).
WRITE: / 'Anzahl der Zeilen:', lv_anzahl_zeilen.

2. Das DESCRIBE TABLE Statement

Dies ist die klassische Methode, die in allen ABAP-Versionen funktioniert. Sie weist die Anzahl der Zeilen einer separaten Variablen zu.

DATA lt_data TYPE STANDARD TABLE OF mara.
DATA lv_anzahl_zeilen TYPE i.
" ... Logik zum Füllen der Tabelle lt_data ...
DESCRIBE TABLE lt_data LINES lv_anzahl_zeilen.
WRITE: / 'Anzahl der Zeilen:', lv_anzahl_zeilen.

3. Systemfeld sy-tfill (Vorsicht!)

Nach bestimmten Operationen, die eine interne Tabelle modifizieren (wie APPEND, INSERT, COLLECT, DELETE), enthält das Systemfeld sy-tfill die Anzahl der Zeilen nach der Operation. Es ist jedoch nicht zuverlässig, sich nur für die Abfrage der Zeilenanzahl auf sy-tfill zu verlassen, da es nicht bei allen Tabellenoperationen ( insbesondere Lesezugriffen wie LOOP AT oder READ TABLE) garantiert aktualisiert wird. Die Verwendung von lines() oder DESCRIBE TABLE ist expliziter und sicherer, um die aktuelle Zeilenzahl zu ermitteln.

Zusammenfassend:

  • Verwende die lines() Funktion, wenn du mit ABAP 7.02 oder höher arbeiten. Sie ist prägnant und gut lesbar.
  • Verwende das DESCRIBE TABLE ... LINES ... Statement für ältere Systeme oder wenn Sie explizit eine separate Variable benötigen und die funktionale Schreibweise nicht bevorzugen.
  • Vermeide es, sich für die reine Abfrage der Zeilenzahl auf sy-tfill zu verlassen.