Zumindest auf unserem System (7.02) hab ich festgestellt, dass die Verwendung von Zeigern (REFERENCE INTO) gegenüber den Feldsymbolen (ASSIGNING) etwas langsamer ist. Aber wir reden hier von 1ms bei 1000 Einträgenralf.wenzel hat geschrieben:Ich bin nicht sicher, ob das mit den Feldsymbolen so noch stimmt, ABAP-intern wird doch eh nur mit Referenzen gearbeitet, soweit ich das beobachtet habe.
Inwiefern? Was "hantierst" du denn da?a-dead-trousers hat geschrieben:Persönlich finde ich die Zeiger besser, weil man damit innerhalb einer Klasse besser hantieren kann. Vergleichbar mit den "globalen" Feldsymbolen in den "alten" Reports.
z.B.: Gegeben sei eine Klasse die eine Tabelle beinhaltet. Der Zugriff darauf kann von mehreren Methoden innerhalb der Klasse erfolgen. Jetzt möchte ich nicht X-Mal das gleiche READ TABLE oder LOOP AT schreiben um darauf zuzugreifen. Daher eine Methode GET_ENTRY und Rückgabe ist eine Referenz. Damit hab ich einen raschen Zugriff, kann das Ergebnis wie bei einem Feld-Symbol direkt verändern und mit IS BOUND weiß ich auch ob die Abfrage gutgegangen ist. Weiters passiert auch keine Daten-Duplizierung im Speicher, was bei breiten/tiefen Tabellen und RETURNING zum Problem werden könnte.ralf.wenzel hat geschrieben:Inwiefern? Was "hantierst" du denn da?a-dead-trousers hat geschrieben:Persönlich finde ich die Zeiger besser, weil man damit innerhalb einer Klasse besser hantieren kann. Vergleichbar mit den "globalen" Feldsymbolen in den "alten" Reports.
Code: Alles auswählen.
REPORT ztest_abap_forum.
* TYPES:
* BEGIN OF ts_data,
* kennzeichen(20),
* marke(20),
* kilometer(10),
* kaufdatum TYPE d,
* END OF ts_data.
DATA ls_data TYPE zit_data.
DATA ls_data2 TYPE zit_data.
DATA it_data TYPE TABLE OF zit_data.
DATA it_data2 TYPE TABLE OF zit_data.
DATA i TYPE i.
SELECT * FROM zit_data INTO TABLE it_data2.
LOOP AT it_data2 INTO ls_data.
i = sy-tabix.
MOVE ls_data-kennzeichen TO ls_data2-kennzeichen.
MOVE ls_data-marke TO ls_data2-marke.
MOVE ls_data-kilometer TO ls_data2-kilometer.
MOVE ls_data-kaufdatum TO ls_data2-kaufdatum .
APPEND ls_data2 TO it_data. " Internal Table that I want to modify.
*insert zauto from ls_data2.
LOOP AT it_data INTO ls_data2 WHERE kilometer = ''.
DELETE TABLE it_data FROM ls_data2.
ENDLOOP.
MODIFY it_data FROM ls_data2 INDEX i. " Coding that I use in order to do it.
ENDLOOP.
in der Annahme das die Struktur it_data gleich it_data2 ist.REPORT ztest_abap_forum.
* TYPES:
* BEGIN OF ts_data,
* kennzeichen(20),
* marke(20),
* kilometer(10),
* kaufdatum TYPE d,
* END OF ts_data.
DATA ls_data TYPE zit_data.
DATA ls_data2 TYPE zit_data.
DATA it_data TYPE TABLE OF zit_data.
DATA it_data2 TYPE TABLE OF zit_data.
DATA i TYPE i.
SELECT * FROM zit_data INTO TABLE it_data2.
* Mein VORSCHLAG
it_data[] = it_data2[].
DELETE it_data WHERE kilometer IS INITIAL.