ABAP Obsolet - Refresh
Die Refresh Funktion ist schon eine ganze Weile obsolet, welche Funktion dann eigentlich nutzen? Refresh, Clear oder Free, was brauchst du wann?
Inhaltsverzeichnis
Die Funktion Refresh ist bereits seit einer ganzen Weile obsolet und wird auch nicht mehr benötigt, da bereits CLEAR und FREE zur Verfügung stehen, die das gleiche wie REFRESH können.
Verwendung von CLEAR
"Aber Refresh löscht doch den Tabellenkörper bei einer Tabelle mit Kopfzeile", wirst du dir vielleicht denken. Das ist richtig, aber dazu braucht man den Refresh nicht, da der Clear das gleiche kann, wenn man darauf achtet was man löschen will. Als Beispiel wie es bisher gemacht wurde:
" Löschen einer Select-Option
REFRESH: s_bukrs.
CLEAR: s_bukrs.
Nun kannst du beide Zeilen mit einer Zeile und dem Clear abbilden:
" Löschen einer Select-Option
CLEAR: s_bukrs, s_bukrs[].
Für die Angabe des Tabellenkörpers werden die eckigen Klammern [] eingesetzt, die auf die Tabelle verweisen. Wenn man dies weg lässt, wird auf die Kopfzeile verwiesen. Normale Tabellen ohne Kopfzeile benötigen keine spezielle Behandlung bei der Verabeitung und können weiterhin so genutzt werden.
Hinweis: Zudem solltest du beachten, dass die Verwendung von Tabellen mit Kopfzeilen noch viel länger obsolet ist und dies in Klassen bereits verboten ist. Select-Options und alte Reports sind die einzige Ausnahme zur Verwendung von Tabellen mit Kopfzeilen, wobei du diese mit Strukturen bearbeiten solltest, anstatt die Kopfzeile zu verwenden.
Verwendung von FREE
Was macht dann eigentlich noch die Funktion FREE? Diese arbeitet bei Tabellen ebenso wie Refresh, nur das sie den bis dahin festgesetzten Speicher durch die interene Tabelle und die Daten, wieder frei gibt. Bei einem Clear wird nur die Tabelle gelöscht, Speicher der durch die Tabelle besetzt ist, wird nicht freigegeben.
Dies mag von großem Interesse sein, wenn man mit der selben Tabelle im Programm weiter arbeitet und diese viele Daten halten muss. Wenn man dann auch noch viele große Tabellen im Report hält, könnte es mit dem Speicher knapp werden.
Clear vs Free
Als kleines Beispiel ein Report mit einem Beispiel für die Funktionsweise der Befehle. Der Report baut zwei interne Tabellen auf, die als Grundlage die Tabelle T001 (Buchungskreis Grunddaten) haben. Dies soll ein Beispiel für eine breitere Stuktur sein.
REPORT ztest_clear_vs_free.
DATA:
lt_tclr TYPE STANDARD TABLE OF t001,
lt_tfre TYPE STANDARD TABLE OF t001.
" Befüllung der Sätze
DO 100000 TIMES.
APPEND VALUE #( butxt = sy-index ) TO lt_tclr.
APPEND VALUE #( butxt = sy-index ) TO lt_tfre.
ENDDO.
" Löschen der Daten
CLEAR lt_tclr.
FREE lt_tfre.
Zu Anfang sind beide Tabellen leer ...
... nach dem ersten Schleifendurchlauf ist die erste Zeile enthalten und Speicher allokiert ...
... zum Ende ist die Tabelle vollständig befüllt ...
... doch der eigentliche Unterschied wird nach dem Löschen der Inhalte offensichtlich ...
Der gesamte reservierte Speicher der Tabelle wurde mit Free freigegeben, die Tabelle hat den stand vor der Befüllung. Bei Clear wurden ebenfalls die Zeilen gelöscht, doch der durch die Zeilen reservierte Speicher wird weiterhin blockiert, solange die Variable existiert.
Die Speicherzuweisung findet ihr im Debugger bei der Variablenanzeige unter einem seperaten Reiter.
Fazit
Dies sind soweit aber nur theoretische Konstrukte und nur für die wenigsten produktiven Reports anwendbar. Die Erfahrung zeigt, dass die Verwendung von Clear völlig ausreichend ist und man nicht mehr für den täglichen Gebrauch benötigt. Unsere Empfehlung liegt also ganz klar bei der Verwendung von Clear.
Quelle:
Dokumentation Refresh
Dokumentation Clear
Dokumentation Free