Interne Tabelle

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

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

Interne Tabelle

Beitrag von Gast ( / / 0 / 3 ) »
Hallo liebe Forumgemeinde !

Habe das Forum schon einige Male durchforstet bin aber leider nicht so richtig fuendig geworden

Habe eine interne Tabelle mit 20 Felder definiert.
Zur Laufzeit des Programms möchte ich diese itab auf x-beliebige Felder erweitern und berechnete Daten reinschreiben, sodass ich am Schluss eine neue itab mit allen Daten habe.
Vielleicht gibt es dazu ein Beispiel

lg Hans

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Hans,

definiere Dir doch eine Tabelle deren Zeielentyp selbst wieder eine Tabelle ist.

Code: Alles auswählen.

* z.B.
DATA
  lt_table TYPE TABLE OF string_table.
* string_table: Tabellentyp mit Zeile string
Damit baust Du dann die jeweilige 'Zeilentabelle' mit Deinen Werten auf und kannst sie so jederzeit um weitere Felder ergänzen.
Du musst dabei jedoch darauf achten, dass Du immer weisst, wieviele 'Felder' eine Zeile hat.

Alternativ kann man als 'Spaltenfeld' eine Struktur verwenden, die u.a. die Spaltennummer trägt.
Damit würden dann nur die 'Spaltenwerte' eingetragen werden müssen, die einen Wert haben.

Der Zugriff darauf geschieht dann durch einen geschachtelten LOOP.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von black_adept (Top Expert / 4158 / 136 / 959 ) »
Hallo Hans,

das was du da vorhast ist mindestens "tricky" zu nennen.
So direkt fällt mir da nur "GENERATE SUBROUTINE-POOL" ein um die neue Tabelle zu erstellen.
Aber damit solltest du weiterkommen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Gast ( / / 0 / 3 ) »
Hallo und Danke

Da ich ja neu in ABAP bin hast du mich mit 'tricky' ziemlich erschreckt.
Ich möchte ja nur von einer bestehenden itab einige spalten hinzufügen damit ich später die Ausgabe über ALV realisieren kann (REUSE_ALV_GRID_DISPLAY). Oder wie soll ich sonst die Daten über ALV auf den Bildschirm bringen.

lg Hans

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
entschuldige bitte, aber ich (wir?) haben Deine Frage falsch verstanden.

Demnach hast Du eine Datentabelle, die noch ein paar weitere Informationen beigestellt werden sollen, um dann in einem ALV-Grid angezeigt zu werden.

Das machst Du am Besten mit einer zweiten Tabelle, die u.a. die Felder aus der ersten Tabelle auch beinhaltet.

Code: Alles auswählen.

TYPES:
  BEGIN OF ts_itab1,
    feld1 TYPE ???,
* weitere Felder
  END   OF ts_itab1,
  BEGIN OF ts_itab2.
* Einbinden der Struktur von ts_itab1
    INCLUDE STRUCTURE ts_itab1.
TYPES:
*     weiteres_feld1 TYPE ???,
  END   OF ts_itab2,
  tt_itab1 TYPE TABLE OF ts_itab1,
  tt_itab2 TYPE TABLE OF ts_itab2.
DATA:
  gt_itab1 TYPE tt_itab1,
  gt_itab2 TYPE tt_itab2,
  gs_itab1 LIKE LINE OF gt_itab1,
  gs_itab2 LIKE LINE OF gt_itab2.

* füllen der gt_itab1
LOOP AT gt_itab1 INTO gs_itab1.
MOVE-CORRESPONDING gs_itab1 TO gs_itab2.
* weitere Daten ermitteln und in die Felder von gs_itab2 schreiben
  APPEND gt_itab2 FROM gs_itab2.
ENDLOOP.

* Aufbau und Aufruf der CL_GUI_ALV_GRID
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von black_adept (Top Expert / 4158 / 136 / 959 ) »
Hi Hans,

wenn dir GENERATE SUBROUTINEPOOL zu "tricky" ist erklär doch mal genauer wieviele und was für "x-beliebige" Felder das denn sein sollen.

Evtl. kannst du ja auch deine 20-spaltige Tabelle um 200 Felder erweitern (wo nachher die Daten reinsollen) und bei der Ausgabe des ALV diejenigen unterdrücken, die du nicht sehen willst. Ist zwar irgendwie genau andersherum als duvorgehen willst - aber wenns zum Ziel führt...
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Bitfummler (Specialist / 111 / 4 / 3 ) »
Hallo Hans,

ich würde es machen, wie Ereglam!

möglich waere es auch, einen eigenen type oder eine eigene ddic-struktur mit den max. benoetigten feldern zu definieren.


DATA: BEGIN OF object_tab OCCURS 0. INCLUDE STRUCTURE z_stru.
DATA: matktx LIKE rqmqmel1-matktx,
pm_selected TYPE pm_selected,
selected,
END OF object_tab.


natuerlich koennen noch zusaetzlich felder aufgenommen werden, wie hier matktx. dabei muss aber der feldkatalog zu diesem feld extra aufgebaut werden. am einfachsten: ddic-struktur mit allem definieren, was du brauchst. :idea:

gruss
bitfummler

sql-abfrage tool bauen

Beitrag von Florian ( / / 0 / 3 ) »
Hallo,

ich hab zwar Hans' problem nicht ganz verstanden, bin aber ebenfalls neuling und mein problem ist mindestens genauso tricky :-P

ich will ein tool schreiben, in das man beliebige select-anfragen eingeben kann. diese werden dann per alv dargestellt. Dazu verwende ich einen Subroutine-Pool. In diesem Pool wird die den ausgewählten feldern entsprechende struktur erstellt, davon eine itab erzeugt, das resultset in die itab gestellt und das ganze dann zur anzeige gebracht. das alles passiert im subroutine pool, so die idee.

Leider kann der Feldkatalog für ALV nicht erzeugt werden, er bleibt einfach leer.
Problem:
interne tabelle ist scheinbar nicht als quelle für den feldkatalog geeignet, zumindest wenn sie nicht von einer DDIC-struktur abstammt.

Hat da einer ne idee?

gruss,
florian

Re: sql-abfrage tool bauen

Beitrag von just ( / / 0 / 3 ) »
Florian hat geschrieben:
Leider kann der Feldkatalog für ALV nicht erzeugt werden, er bleibt einfach leer.
Problem:
interne tabelle ist scheinbar nicht als quelle für den feldkatalog geeignet, zumindest wenn sie nicht von einer DDIC-struktur abstammt.

Hat da einer ne idee?
in der regel reicht eine interne tabelle vollkommen aus.
das coding sieht dann etwa wie folgt aus:

*----------------------------------------------------------------------*
FORM get_fcat_from_table USING itab TYPE STANDARD TABLE
CHANGING fcat TYPE lvc_t_fcat.

DATA: g_ref_type TYPE REF TO cl_abap_structdescr,
g_data_ref_type TYPE REF TO cl_abap_elemdescr,
wa_comp TYPE abap_compdescr,
ls_fcat TYPE lvc_s_fcat,
lv_rollname TYPE rollname,
ls_dfies TYPE dfies.

FIELD-SYMBOLS: <line> TYPE ANY.

READ TABLE itab INDEX 1 ASSIGNING <line>.

g_ref_type ?= cl_abap_typedescr=>describe_by_data( <line> ).

LOOP AT g_ref_type->components INTO wa_comp.
ls_fcat-fieldname = wa_comp-name.
g_data_ref_type ?= g_ref_type->get_component_type( wa_comp-name ).

lv_rollname = g_data_ref_type->help_id.

CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = lv_rollname
all_types = 'X'
IMPORTING
dfies_wa = ls_dfies
EXCEPTIONS
OTHERS = 3.

ls_fcat-reptext = ls_dfies-reptext.
** notfallhandling
IF ls_fcat-reptext IS INITIAL.
ls_fcat-reptext = wa_comp-name.
ENDIF.
* ... weitere felder füllen
ls_fcat-outputlen = ls_dfies-outputlen.
ls_fcat-inttype = ls_dfies-inttype.
ls_fcat-intlen = ls_dfies-intlen.

APPEND ls_fcat TO fcat.
clear ls_fcat.
ENDLOOP.

ENDFORM. " get_fcat_from_table
*----------------------------------------------------------------------*

je nachdem, wie dein Feldkatelog aussehen soll, musst du nur die jeweilige Struktur verwenden und die gewünschten Felder füllen...

Anmerkung:
du musst lediglich sicherstellen, dass die Tabelle nicht initial ist, sonst funzt das assign nicht...

Seite 1 von 1

Vergleichbare Themen

4
Antw.
4461
Views
5
Antw.
5493
Views
Inhalt interne Tabelle an andere interne Tabelle übergeben
von L0w-RiDer » 30.01.2020 16:28 • Verfasst in ABAP® für Anfänger
5
Antw.
5183
Views
1
Antw.
4811
Views

Ü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.