gelöst Zwei interne Tabellen mit einem ALV ausgeben


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst Zwei interne Tabellen mit einem ALV ausgeben

Beitragvon ABAP_DEV » 29.11.2016, 10:37

Hallo zusammen,
ich habe ein Problem mit einem Report und komme nicht mehr weiter. Daher hätte ich gern ein paar Tipps.
Ich habe ein ALV-Tree mit 2 Tabellen als Knoten implementiert und will beim Klicken den Inhalte der Tabellen mit einem ALV anzeigen lassen. Da die Tabellen unterschiedlich sind, habe die Struktur der Tabellen dynamisch erzeugt. Aber jetzt weiß ich nicht, wie ich das Feldsymbol <lt_data> weiter verarbeiten kann , damit ich am Ende nur einen ALV für die Ausgabe der beiden Tabellen benutzen kann.

DATA: lt_user TYPE TABLE OF usr02,
lt_agr_users TYPE TABLE OF agr_users,
lt_dyn_fcat TYPE lvc_t_fcat,
ls_dyn_fcat TYPE lvc_s_fcat,
lt_field TYPE TABLE OF dfies,
lv_pos TYPE I,
lo_data TYPE REF TO DATA,
ls_line TYPE REF TO DATA.

FIELD-symbols: <lt_data> TYPE STANDARD TABLE,
<ls_data> TYPE ANY.

SELECT * FROM usr02 INTO TABLE lt_user.
SELECT * FROM agr_users INTO TABLE lt_agr_users.

IF <ls_node>-text = 'USR02'.

CALL FUNCTION 'DDIF_NAMETAB_GET'
EXPORTING
tabname = 'USR02'
TABLES
dfies_tab = lt_field .

LOOP AT lt_field ASSIGNING FIELD-SYMBOL(<ls_field_cat>).
lv_pos = lv_pos + 1.
ls_dyn_fcat-fieldname = <ls_field_cat>-fieldname.
ls_dyn_fcat-coltext = <ls_field_cat>-fieldtext.
ls_dyn_fcat-col_pos = lv_pos.
APPEND ls_dyn_fcat TO lt_dyn_fcat.
CLEAR ls_dyn_fcat.
ENDLOOP.

CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_dyn_fcat
IMPORTING
ep_table = lo_data.

ASSIGN lo_data->* TO <lt_data>.

LOOP AT lt_user INTO DATA(ls_user).
APPEND INITIAL LINE TO <lt_data> ASSIGNING FIELD-SYMBOL(<ls_new>).
MOVE-corresponding ls_user TO <ls_new>.
ENDLOOP.

******* Verarbeitung von <lt_data> für die Ausgabe ******

ELSEIF <ls_node>-text = 'AGR_USERS'.

ENDIF.

cl_salv_table=>factory( EXPORTING
r_container = lo_tab_right
IMPORTING
r_salv_table = lo_salv
CHANGING
t_table = <lt_data> ).

Vielen Dank

Viele Grüße
ABAP_DEV
ForumUser
 
Beiträge: 5
Registriert: 29.11.2016, 10:16
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Zwei interne Tabellen mit einem ALV ausgeben

Beitragvon a-dead-trousers » 29.11.2016, 11:16

Ich würde dir empfehlen, wenn du mit dyn. Strukturen/Tabellen arbeiten möchtest, dich gleich mit RTTI bzw. RTTC vertraut zu machen. Das ist einfach flexibler und zukunftssicherer.
Die Methode CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE verwendet die "alte" Subroutinen-Technik und kann nur max. 36 Datenobjekte verwalten (siehe GENERATE SUBROUTINE POOL).

Für den dyn. Zugriff auf einzelne Komponenten einer Struktur gibt es ASSIGN COMPONENT ... OF STRUCTURE ... TO ...
Im Falle einer Tabelle kannst du "unstrukturiert" mit Datentyp ANY in einem LOOP AT ... oder READ TABLE ... INDEX ... auf die Zeilen zugreifen und dann eben mit obigem Befehl die einzelnen Felder ansprechen.

Warum du für deine Darstellung nun eine dyn. Tabelle brauchts erschließt sich mir aber nicht ganz.
Wenn du eh weist von welchem Typ deine Zeilen sind, kannst du ja dein SALV ein Mal mit der einen Struktur und ein anderes Mal mit der anderen aufrufen.

lg ADT

P.S.: SALV verwendet intern RTTI um den Feldkatalog für das ALV-Grid dyn. aufzubauen.
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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 2688
Registriert: 07.02.2011, 13:40
Dank erhalten: 618 mal
Ich bin: Entwickler/in

Re: Zwei interne Tabellen mit einem ALV ausgeben

Beitragvon ABAP_DEV » 29.11.2016, 11:56

Hi ADT,
Danke dir für deine Antwort.
Das Problem ist dass jede interne Tabellen seine eigene Struktur hat. Ich habe versucht, das Problem mit 2 AVL, leider hat das nicht geklappt.

Unbenannt.PNG
ABAP_DEV
ForumUser
 
Beiträge: 5
Registriert: 29.11.2016, 10:16
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Zwei interne Tabellen mit einem ALV ausgeben

Beitragvon black_adept » 29.11.2016, 12:20

Du brauchst doch nur die Tabelle austauschen.
Beispielprogramm - musst nur einen PF-STatus anlegen mit FCode XXX
Code: Alles auswählen
REPORT.
DATA: mo_salv TYPE REF TO cl_salv_table.

END-OF-SELECTION.
  SELECT *
    FROM t000
  INTO TABLE @DATA(gt_t000).
  SELECT *
    FROM t001
  INTO TABLE @DATA(gt_t001).

  cl_salv_table=>factory( EXPORTING
                            r_container    = cl_gui_container=>screen0
                          IMPORTING
                            r_salv_table   = mo_salv
                          CHANGING
                            t_table        = gt_t000 ).

  mo_salv->display( ).
  WRITE :/ '.'.
  SET PF-STATUS 'XXX'.

AT USER-COMMAND.
  mo_salv->set_data( CHANGING t_table =  gt_t001 ).
  mo_salv->refresh( ).
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de
black_adept
Top Expert
 
Beiträge: 2710
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 388 mal
Ich bin: Freiberufler/in

Re: Zwei interne Tabellen mit einem ALV ausgeben

Beitragvon ABAP_DEV » 29.11.2016, 16:09

Hi Black_adept,
danke für deine Antwort. Dein Programm sieht viel versprechend. Aber wie würde das aussehen, wenn man anstatt SET PF-STATUS, Handler (zB. Anzeige durch doppelklick) benutzen würde. Beispiel: SET HANDLER lcl_events=>on_double_click FOR o_tree, um von einer Tabelle auf die andere zu springen..

Viele Grüße
ABAP_DEV
ForumUser
 
Beiträge: 5
Registriert: 29.11.2016, 10:16
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Zwei interne Tabellen mit einem ALV ausgeben

Beitragvon black_adept » 30.11.2016, 10:24

Sollte genau so funktionieren - PF-Status habe ich nur genommen weil man so schnell ein Demoprogramm zusammenbekommt.
Es gibt ein Problem wenn man auf einen Doppelklick im Grid den Event nicht vollständig abarbeitet und im Eventhandling noch mal groß was am Grid rumfummeln möchte ohne den Event vollständig durchlaufen zu haben. Aber da dein Eventhandler am Tree und nicht am Grid registriert zu sein scheint sollte das ohne Weiteres funktionieren.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de
black_adept
Top Expert
 
Beiträge: 2710
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 388 mal
Ich bin: Freiberufler/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
gelöst Protokoll vergangener RFC Aufrufe
vor 16 Stunden von Dele 3 Antw.
BREAK-POINT-IDs verwenden
vor 15 Stunden von ralf.wenzel 2 Antw.
MEREQ001 Zusatzfelder ausblenden
vor 3 Tagen von SAP4Echo 0 Antw.
gelöst Z Tabelle Key Feld ändern
vor 3 Tagen von DeathAndPain 3 Antw.
gelöst Funktionsbaustein EXIT_SAPLCORF_404 in Transaktion COR6N
vor 20 Stunden von SAP_ENTWICKLER 2 Antw.

  Ähnliche Beiträge beta
Zwei interne Tabellen zusammenführen
28.04.2005, 13:11 von Gast 2 Antw.
Zwei interne Tabellen verarbeiten
20.11.2007, 14:04 von gogi 6 Antw.
zwei interne Tabellen zusammenführen => ALV
22.08.2012, 22:42 von black_adept 10 Antw.
Mehre Tabellen auf einem Report formatiert ausgeben
27.03.2011, 18:47 von Diesel83 0 Antw.
Zwei (FOR ALL ENTRIES) in einem Select?
17.12.2013, 13:37 von black_adept 18 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

Feedback ...?

Was können wir verbessern? Hinterlasse deine Kontaktdaten, wenn du eine direkte Antwort möchtest.

... Absenden!