Sturktur dynamisch erstellen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Sturktur dynamisch erstellen

Beitrag von jondahl11 (ForumUser / 79 / 0 / 0 ) »
Hallo ich habe folgendes Problem da sich nicht gelöst bekomme.

Ich habe eine DB Tabelle mit den Feldern "Stuktur" und "Feldname".
In dieser Tabelle stehen also bestimmte Felder von Stukturen.

Ich lese nun in eine interne Tabelle (itab_neu) alle Zeilen aus, die zu einer bestimmten Stuktur gehören, z.b. SKB1.

Nun möchte ich eine neue Struktur aufbauen, die eben genau diese Felder der skb1 Stuktur beinhaltet die in der internen Tabelle stehen.

In meiner itab_neu stehen nun z.B 3 Zeilen.

skb1 burks
skb1 saknr
skb1 ernam

Nun möchte ich eine Sturktur aufbauen ls_neu mit eben genau den namen der Felder und deren Typen. Also hardcodiert:

Code: Alles auswählen.

DATA BEGIN OF ls_neu,
bukrs like skb1-burks,
saknr like skb1-saknr,
ernam like skb1-ernam,
END OF ls_neu.
Hat jemand eine Idee wie das realisieren kann? Das Problem ist eben, das in der DB Tabelle theoretisch alle Felder der sturktur skb1 stehen können, die neue struktur muss also dynamisch aufgebaut werden.

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


Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Moin.

Schau dir den Befehl GENERATE SUBROUTINEPOOL an. Damit ist das machbar.
Natürlich musste die Logik noch dazu schreiben. Das die Struktur dann da ist, aber das ist ja dann nur eine Schleife.

Hab derzeit leider keine Zeit, falls dir bis zum nachmittag noch keiner helfen konnte (was ich weniger denke) werd ich mal was posten.

gruß
Markus

Re: Sturktur dynamisch erstellen

Beitrag von JHM (Top Expert / 1209 / 1 / 202 ) »
jondahl11 hat geschrieben:Hat jemand eine Idee wie das realisieren kann? Das Problem ist eben, das in der DB Tabelle theoretisch alle Felder der sturktur skb1 stehen können, die neue struktur muss also dynamisch aufgebaut werden.
Auf welchem Reales bist du unter wegs?

(Glaube) Ab 6.4 wird dir dies weiterhelfen:

Code: Alles auswählen.

TYPE-POOLS: abap.

DATA: ls_component   TYPE abap_componentdescr,        "Zeile der Strukturbeschreibung
      lt_component   TYPE abap_component_tab,         "Tabelle der Strukturbeschreibung
      lr_strucdescr  TYPE REF TO cl_abap_structdescr, "Referenz auf Datentyp der Struktur
      lr_tabledescr  TYPE REF TO cl_abap_tabledescr,  "Referenz auf Datentyp der Tabelle
      lr_data_struct TYPE REF TO data,                "Referenz auf die erzeugte Struktur
      lr_data_table  TYPE REF TO data,                "Referenz auf die erzeugte Tabelle
      l_count        TYPE        i.                   "Anzahl Komponenten

FIELD-SYMBOLS:  <fs_comp>   TYPE ANY,                  "Um auf eine Komponente zu zugreifen
                <fs_struct> TYPE ANY,                  "Um auf die Struktur zu zugreifen
                <fs_table>  TYPE ANY TABLE.            "Um auf die Tabelle zu zugreifen

* (1) identify components required in your dynamic table
CLEAR ls_component.
ls_component-name = 'CARRID'.
ls_component-type ?= cl_abap_typedescr=>describe_by_name( 'SFLIGHT-CARRID' ).
INSERT ls_component INTO TABLE lt_component.


CLEAR ls_component.
ls_component-name = 'CONNID'.
ls_component-type ?= cl_abap_typedescr=>describe_by_name( 'SFLIGHT-CONNID' ).
INSERT ls_component INTO TABLE lt_component.

CLEAR ls_component.
ls_component-name = 'FLDATE'.
ls_component-type ?= cl_abap_typedescr=>describe_by_name( 'SFLIGHT-FLDATE' ).
INSERT ls_component INTO TABLE lt_component.

* (2) create structure description in accordance to componentdata:
IF lt_component IS NOT INITIAL.
  lr_strucdescr = cl_abap_structdescr=>create( lt_component ).
ENDIF.

* (3) create table description for structure descriptiondata:
lr_tabledescr = cl_abap_tabledescr=>create( p_line_type = lr_strucdescr ).

* (4) create structure and assign
CREATE DATA lr_data_struct TYPE HANDLE lr_strucdescr.
ASSIGN lr_data_struct->* TO <fs_struct>.

* (5) create table and assign
CREATE DATA lr_data_table TYPE HANDLE lr_tabledescr.
ASSIGN lr_data_table->* TO <fs_table> .

* (6) fill table (from database)
SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE <fs_table>.

* (7) output
l_count = LINES( lt_component ).

LOOP AT <fs_table> INTO <fs_struct>.
  DO l_count TIMES.
    ASSIGN COMPONENT sy-index OF STRUCTURE <fs_struct> TO <fs_comp>.
    IF sy-index = 1.
      WRITE: / <fs_comp>.
    ELSE.
      WRITE: <fs_comp>.
    ENDIF.
  ENDDO.

ENDLOOP. "<fs_table>  INTO <fs_struct>
Gruß Hendrik

Beitrag von jondahl11 (ForumUser / 79 / 0 / 0 ) »
Bin auf 6.40, aber GENERATE SUBROUTINE POOL gefällt mir ganz gut.
Ich frag mich nur, wie ich auf die dort erzeugte struktur dann in meinem aufrufenden programm zugreifen kann??

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
jondahl11 hat geschrieben:Bin auf 6.40, aber GENERATE SUBROUTINE POOL gefällt mir ganz gut.
Ich frag mich nur, wie ich auf die dort erzeugte struktur dann in meinem aufrufenden programm zugreifen kann??

Code: Alles auswählen.

  CATCH SYSTEM-EXCEPTIONS generate_subpool_dir_full = 9.
    GENERATE SUBROUTINE POOL lt_source NAME l_name
             MESSAGE l_message LINE l_line WORD l_word.
  ENDCATCH.

  CASE sy-subrc.
    WHEN 0.
    WHEN OTHERS.
*      message x000 with l_message l_line l_word.
  ENDCASE.

  PERFORM table_create IN PROGRAM (l_name)
                 CHANGING rd_tabelle.

du musst die generierte Form auch noch aufrufen ;) (den fehler hab ich auch gemacht, alles erstellt und mich dann gefragt wie ichdas teil eigentlich nutzen kann ;) )
der name table_create hast du in deinem dynamisch erstellten coding angegeben..bei FORM table_create using bla bla bla...

Gruß
Markus

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

bevor man sich in das Abenteuer eines eigenen Subroutine-Pools begibt, empfiehlt es sich, mal die anderen Möglichkeiten der variablen Tabellen auszuloten.

Die LVC_FIELDCATALOG...-Reihe zum Beispiel.

Ich mache das z.B. so:
Beispielstruktur mit allen verschiedenen Felder erstmal im Dictionary anlegen. Im Programm dann Fieldkatalog zur Beispielstruktur erzeugen lassen, Felder raussuchen, die ich brauche (o.a. Tabelle ist ein gutes Beispiel), Feldkatalogeinträge in neuen Feldkatalog moven, Feldnamen anpassen und dann mit Baustein die Struktur/Tabelle erstellen lassen.

Zugriff auf Felder der Zielstruktur mit Feldsymbol und ASSIGNING mit Feldname oder Feldnummer.

Im Prinzip hast Du das alles auch schon:
Beispielstruktrur skb1 und eine Tabelle wo die Feldnamen drinstehen.
Jetzt noch Quellkatalog aufbauen, Loop at feld-tabelle und stelle Zielkatalog zusammen, Tabelle generieren, fertig.

.

Gruß
babap

Beitrag von jondahl11 (ForumUser / 79 / 0 / 0 ) »
Danke, funktioniert !!!

Beitrag von babap (Expert / 681 / 1 / 1 ) »
jondahl11 hat geschrieben:Danke, funktioniert !!!
was?????

Gruß
babap

Seite 1 von 1

Vergleichbare Themen

6
Antw.
3201
Views
Checkboxen dynamisch erstellen
von mareikemei92 » 14.11.2018 10:57 • Verfasst in ABAP® Core
9
Antw.
6891
Views
Selektionsbild dynamisch erstellen
von BesenWesen » 17.01.2007 15:26 • Verfasst in ABAP® Core
5
Antw.
3714
Views
Datenbanktabellen dynamisch zur Laufzeit erstellen
von KK » 20.12.2005 07:50 • Verfasst in ABAP® Core
12
Antw.
10702
Views
Select Option dynamisch erstellen
von irian » 06.05.2008 11:59 • Verfasst in ABAP® für Anfänger
10
Antw.
14140
Views
Dynpro: Eingabefelder dynamisch erstellen und ausrichten
von Nautilus » 08.11.2005 15:20 • Verfasst in Dialogprogrammierung

Über diesen Beitrag


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

Aktuelle Forenbeiträge

SAP GUI Installation Probleme
vor 23 Stunden von Romaniac gelöst 2 / 103
Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 280
Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 258
DIN Norm Klassifizierung
vor 5 Tagen von Radinator 2 / 3172

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.

Aktuelle Forenbeiträge

SAP GUI Installation Probleme
vor 23 Stunden von Romaniac gelöst 2 / 103
Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 280
Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 258
DIN Norm Klassifizierung
vor 5 Tagen von Radinator 2 / 3172

Unbeantwortete Forenbeiträge

Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 280
Erweiterung in ME51N/ME52N:
vor 4 Tagen von ABAPlerv 1 / 258