Interne Table modifizieren durch Index

Getting started ... Alles für einen gelungenen Start.
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Interne Table modifizieren durch Index

Beitrag von Chamberlin (ForumUser / 1 / 0 / 0 ) »
Hi Leute,
ich möchte eine interne Tabelle modifizieren.
Leider bekomme ich ein Dump.

So sieht meine Coding aus



loop at it_data2" ( Internal table from table control)
into ls_data.

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. " Coding that I use in order to do it.

endloop.

Laufzeitfehler

Es sollte eine Zeile der internen Tabelle "\PROGRAM=ZAUTO\DATA=IT_DATA"
geändert,
gelöscht oder hinzugefügt werden. Zu der Tabelle existiert jedoch
kein gültiger Cursor.
Mögliche Ursachen:
1. Im entsprechenden ABAP-Sprachbefehl wurde der Zusatz
"...INDEX..." nicht angegeben, obwohl dieser Befehl nicht
innerhalb einer "LOOP...ENDLOOP" Schleife über diese Tabelle steht.
2. Der entsprechende ABAP-Sprachbefehl wurde innerhalb einer
"LOOP...ENDLOOP" Schleife nach einem DELETE "\PROGRAM=ZAUTO\DATA=IT_DATA"
aufgerufen.

könnten Sie mir sagen wie ich das Problem lösen kann. Mit Index muss ich definitiv arbeiten. Aber wie ?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Interne Table modifizieren durch Index

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
Moin.
Nimm doch mal den loop mit dem delete raus.
Kann man auch nach dem endloop in einem Step erledigen.
Delete ... where..
Wenn man interne Tabellen ändern möchte, ist es erfahrungsgemäß schneller Feldsymbole einzusetzten.
lg jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Interne Table modifizieren durch Index

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
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.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Interne Table modifizieren durch Index

Beitrag von a-dead-trousers (Top Expert / 4286 / 214 / 1142 ) »
ralf.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.
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ägen :wink:
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.

Zum Thema:
Ich würde auch das LOOP AT mit dem DELETE außerhalb machen. Warum es zu dem Fehler kommt kann ich nur raten, aber vermutlich wird durch das DELETE die gerade in Bearbeitung befindliche Zeile entfert und dadurch funktioniert das MODIFY nicht mehr (weil ja die zugehörige Zeile nicht mehr existiert)

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Interne Table modifizieren durch Index

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
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.
Inwiefern? Was "hantierst" du denn da?

Ich bevorzuge Feldsymbole gegenüber Workareas, weil ein Feldsymbol auf einen Dump läuft, wenn der ASSIGN schiefgeht und man ein IS_ASSIGNED schön abfragen kann.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Interne Table modifizieren durch Index

Beitrag von a-dead-trousers (Top Expert / 4286 / 214 / 1142 ) »
ralf.wenzel hat geschrieben:
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.
Inwiefern? Was "hantierst" du denn da?
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.
Das Ganze natürlich nur in einem PRIVATE und max. PROTECTED Kontext. PUBLIC wäre so etwas nicht empfehlenswert :evil:

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Interne Table modifizieren durch Index

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Da werde ich nach meinem Urlaub mal mit herumspielen....
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Interne Table modifizieren durch Index

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
... nochmal zum Coding.

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.
..so funktioniert es. Der innere Loop verändert SY-TABIX, deshalb MODIFY it_data FROM ls_data2 INDEX i.

mein Vorschlag:
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.
in der Annahme das die Struktur it_data gleich it_data2 ist.

lg Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Seite 1 von 1

Vergleichbare Themen

3
Antw.
1831
Views
Interne tabelle modifizieren
von Olga » 02.08.2006 15:30 • Verfasst in ABAP® für Anfänger
2
Antw.
1987
Views
Interne Tabelle in table Control ausgeben
von ABAPSunny » 07.03.2008 09:32 • Verfasst in ABAP® für Anfänger
1
Antw.
2152
Views
löschen/ändern in interne Tabellen im Table Control
von Herakles80 » 07.10.2004 17:20 • Verfasst in ABAP® für Anfänger
3
Antw.
5486
Views
Dynamische interne Tabelle generieren für Select into Table
von jondahl11 » 24.09.2007 16:06 • Verfasst in ABAP Objects®
3
Antw.
3400
Views
LOOP über führende interne Tabelle + READ TABLE und MODIFY
von HawkDT » 23.03.2017 13:02 • Verfasst in ABAP® für Anfänger

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.