Assign zu mehreren itabs möglich?

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Assign zu mehreren itabs möglich?

Beitrag von DeMa (ForumUser / 13 / 0 / 0 ) »
Hallo zusammen,

ich habe mal eine Frage.

Ich versuche gerade ein wenig dynamisch zu programmieren und habe folgende Ausgangsituation.

Code: Alles auswählen.

FIELD-SYMBOLS:
  <dyn_rec> TYPE any,
  <dyn_tab> TYPE STANDARD TABLE.

DATA:
  l_ref_type_descr_ddic   TYPE REF TO cl_abap_typedescr,
  l_ref_type_descr_line   TYPE REF TO cl_abap_typedescr,
  l_ref_struct_descr_line TYPE REF TO cl_abap_structdescr,
  l_tab_component         TYPE        cl_abap_structdescr=>component_table.

DATA:
  lop_tabledescr    TYPE REF TO cl_abap_tabledescr,
  ldp_dynaic_record TYPE REF TO data,
  ldp_dyn_table     TYPE REF TO data,
  lop_strucdescr    TYPE REF TO cl_abap_structdescr.
  
..... "LT_TAB füllen  

LOOP AT lt_tab ASSIGNING FIELD-SYMBOL(<ls_tab>).

  l_ref_type_descr_ddic = cl_abap_typedescr=>describe_by_name( <ls_tab>-tab_name ).
  l_ref_struct_descr_line ?= l_ref_type_descr_ddic.
  l_tab_component = l_ref_struct_descr_line->get_components( ).

  lop_strucdescr = cl_abap_structdescr=>create( l_tab_component ).
  CREATE DATA ldp_dynaic_record TYPE HANDLE lop_strucdescr.

  lop_tabledescr ?= cl_abap_tabledescr=>create( p_line_type = lop_strucdescr ).
  CREATE DATA ldp_dyn_table TYPE HANDLE lop_tabledescr.

  ASSIGN ldp_dynaic_record->* TO <dyn_rec>.
  ASSIGN ldp_dyn_table->* TO <dyn_tab>.

ENDLOOP.
Das Ergebnis ist, dass ich eine Struktur und eine interne Tabelle von meiner DDIC-Tabelle habe.

Mein Problem ist, dass ich bei jedem Durchlauf meiner internen Tabelle <dyn_rec> und <dyn_tab> überschreibe.

Weiß einer eine Lösung, dass ich auch hier je DDIC-Tabelle einen anderes Fieldsymbol zuweisen kann?

vg
DeMa

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


Re: Assign zu mehreren itabs möglich?

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Das geht leider nicht. Feldsymbole kann man nur statisch definieren und nicht dynamisch vorhalten. Was aber geht ist eine Tabelle von Datenreferenzen für die mit CREATE DATA erzeugten Inhalte. Für die Zuweisung an ein Feldsymbol muss man dann aber trotzdem einzeln jede Zeile der neuen Tabelle durchlaufen.
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: Assign zu mehreren itabs möglich?

Beitrag von jocoder (Specialist / 343 / 3 / 102 ) »
So ungefähr kann die Lösung aussehen:

Code: Alles auswählen.

TYPES: BEGIN OF dynamic_table,
  name TYPE tabname,
  content_ref TYPE REF TO data,
END OF dynamic_table.

FIELD-SYMBOLS:
  <dyn_rec> TYPE any,
  <dyn_tab> TYPE STANDARD TABLE.

DATA:
  l_ref_type_descr_ddic   TYPE REF TO cl_abap_typedescr,
  l_ref_type_descr_line   TYPE REF TO cl_abap_typedescr,
  l_ref_struct_descr_line TYPE REF TO cl_abap_structdescr,
  l_tab_component         TYPE        cl_abap_structdescr=>component_table.

DATA:
  lop_tabledescr    TYPE REF TO cl_abap_tabledescr,
  ldp_dynaic_record TYPE REF TO data,
  ldp_dyn_table     TYPE REF TO data,
  lop_strucdescr    TYPE REF TO cl_abap_structdescr.
  dynamic_table_store TYPE HASHED TABLE OF dynamic_table WITH UNIQUE KEY name.

LOOP AT lt_tab ASSIGNING FIELD-SYMBOL(<ls_tab>).

  l_ref_type_descr_ddic = cl_abap_typedescr=>describe_by_name( <ls_tab>-tab_name ).
  l_ref_struct_descr_line ?= l_ref_type_descr_ddic.
  l_tab_component = l_ref_struct_descr_line->get_components( ).

  lop_strucdescr = cl_abap_structdescr=>create( l_tab_component ).

  lop_tabledescr ?= cl_abap_tabledescr=>create( p_line_type = lop_strucdescr ).
  CREATE DATA ldp_dyn_table TYPE HANDLE lop_tabledescr.

  INSERT VALUE #( name = <ls_tab>-tab_name content_ref = ldp_dyn_table ) INTO TABLE dynamic_table_store.

ENDLOOP.
LOOP AT lt_tab ASSIGNING FIELD-SYMBOL(<ls_tab>).
  DATA(content_ref) = dynamic_table_store[ name = <ls_tab>-tab_name ]-content_ref.
  ASSIGN content_ref->* TO <dyn_tab>.
  lop_strucdescr = cl_abap_structdescr=>create( l_tab_component ).
  CREATE DATA ldp_dynaic_record TYPE HANDLE lop_strucdescr.
  ASSIGN ldp_dynaic_record->* TO <dyn_rec>.
  " ...
ENDLOOP.

Folgende Benutzer bedankten sich beim Autor jocoder für den Beitrag:
qyurryus


Re: Assign zu mehreren itabs möglich?

Beitrag von DeMa (ForumUser / 13 / 0 / 0 ) »
Perfekt. Danke

Re: Assign zu mehreren itabs möglich?

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Kleine Anmerkung zur Performance von jocoder's Beispiel:
Nachdem man in der ersten Schleife ja bereits alle Objekte (Tabellentyphandle, Zeilentyphandle, Datenreferenz usw.) erzeugt, kann man sich diese Informationen gleich in der Tabelle dynamic_table_store mitablegen und spart sich so in der zweiten Schleife das erneute Erzeugen was bei RTTI/RTTC (so heißt das in ABAP) sehr zeitaufwändig ist.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
qyurryus

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

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2437
Views
Muster anlegen und auf mehreren Systemen nutzen möglich?
von RIG » 12.10.2012 10:25 • Verfasst in ABAP® für Anfänger
7
Antw.
4679
Views
itabs vergleichen?
von asdfjklö » 05.09.2008 11:59 • Verfasst in ABAP® für Anfänger
4
Antw.
1210
Views
2 ITABS vergleichen mit Bedingunen
von SAP-Thomas » 25.07.2013 08:01 • Verfasst in ABAP® für Anfänger
2
Antw.
1344
Views
Wer schlichtet den Streit? Sek.index in itabs
von ralf.wenzel » 20.01.2015 17:10 • Verfasst in ABAP® Core
1
Antw.
2593
Views
ABAP Obj Aufgabe (Cockpit, Edit-Field, Checkbox, ALV, itabs)
von -shaun- » 03.01.2011 09:21 • Verfasst in ABAP Objects®

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 548
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2175
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8770