Code: Alles auswählen.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'I_DATA1'
* I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
i_inclname = 'ZRFT_FEHLTEILE_GESAMT_DATA'
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = t_fieldcat_slis
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3
.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Pinguincommander
Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Pinguincommander
Folgende Benutzer bedankten sich beim Autor jensschladitz für den Beitrag:
Pinguincommander
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Pinguincommander
Folgende Benutzer bedankten sich beim Autor Dele für den Beitrag:
Pinguincommander
Folgende Benutzer bedankten sich beim Autor Alexander D. für den Beitrag:
Pinguincommander
Ein firmeneigenes Repository...! Respekt!! (und das meine ich nicht ironisch!!)Dele hat geschrieben:wir haben uns dafür bereits vor vielen Jahren einen eigenen Funktionsbaustein geschrieben, der aus beliebigen in programmen definierte Strukuren einen ALV Feldkatalog aufbaut. Das hat den Vorteil, dass man nicht für jedes kleine Programm immer wieder DDIC-Strukturen anlegen muss.
Ausserdem verwenden wir diesen Baustein, um die Feldlisten für Selects aufzubauen.
gruß dele
Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Pinguincommander
Folgende Benutzer bedankten sich beim Autor Dele für den Beitrag:
Pinguincommander
Code: Alles auswählen.
FORM create_fieldcat USING ls_structure
CHANGING ls_fieldcat TYPE lvc_s_fcat
lt_fieldcat TYPE lvc_t_fcat.
DATA: ref_structdescr TYPE REF TO cl_abap_structdescr,
lt_fields TYPE ddfields.
DATA: lv_col_i TYPE i VALUE 0.
FIELD-SYMBOLS: <fs_fields> TYPE line of ddfields.
ref_structdescr ?= cl_abap_structdescr=>describe_by_data(
p_data = ls_structure
).
CALL METHOD cl_salv_data_descr=>read_structdescr
EXPORTING
r_structdescr = ref_structdescr
RECEIVING
t_dfies = lt_fields.
LOOP AT lt_fields ASSIGNING <fs_fields>.
ls_fieldcat-fieldname = <fs_fields>-fieldname. "Feldname
ls_fieldcat-tabname = <fs_fields>-tabname. "LVC-Tabname ?
ls_fieldcat-scrtext_l = <fs_fields>-scrtext_l. "feldbezeichner L
ls_fieldcat-scrtext_m = <fs_fields>-scrtext_m. "feldbezeichner M
ls_fieldcat-scrtext_s = <fs_fields>-scrtext_s. "feldbezeichner s
ls_fieldcat-ref_field = <fs_fields>-reffield. "referenzfeld
ls_fieldcat-ref_table = <fs_fields>-reftable. "referenztabelle
ENDLOOP.
ENDFORM.
danke für das Beispiel! Für 4.7 ist das Beispiel leider nicht zu verwenden, cl_salv_data_descr ist dort nicht vorhandenPinguincommander hat geschrieben:Hallo Leute erstmal fettes Danke an alle abschliesend auch nochmal den Quellcode damit mann dei Lösung auch mal sieht
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report ZDEBUG2 *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT zdebug2 .
DATA tgfld TYPE rfieldlist OCCURS 0 WITH HEADER LINE.
DATA tgstr TYPE rstrucinfo OCCURS 0 WITH HEADER LINE.
DATA ls_fcat TYPE lvc_s_fcat .
DATA lt_fcat TYPE TABLE OF lvc_s_fcat.
DATA :
t0 TYPE TABLE OF sflight WITH HEADER LINE,
t1 TYPE TABLE OF sflight ,
t3 TYPE sflight.
* gesuchte Tabellen Namen
DATA s1(10) VALUE 'T1'.
DATA s2(10) VALUE 'T1[]'.
FIELD-SYMBOLS: <li> TYPE ANY.
DATA dref TYPE REF TO data.
FIELD-SYMBOLS: <itab> TYPE ANY TABLE.
ASSIGN t1 TO <itab>.
* Read all used Var-names of the CALLER
CALL FUNCTION 'GET_GLOBAL_SYMBOLS'
EXPORTING
program = sy-repid
* NAME_PATTERN = '*'
* NAME_PATTERN = %VAR
TABLES
fieldlist = tgfld.
* Check Object is a Structure or Table
CHECK NOT tgfld[] IS INITIAL.
LOOP AT tgfld WHERE type = 'h' AND ( name = s1 OR name = s2 ).
* Workaround für Headerlose ITABs
CREATE DATA dref LIKE LINE OF <itab>.
ASSIGN dref->* TO <li>.
CALL FUNCTION 'GET_COMPONENT_LIST'
EXPORTING
program = sy-repid
fieldname = '<LI>'
TABLES
components = tgstr.
EXIT.
ENDLOOP.
LOOP AT tgstr.
CLEAR ls_fcat.
ls_fcat-row_pos = sy-tabix.
ls_fcat-tabname = tgfld-name.
ls_fcat-fieldname = tgstr-compname.
* ls_fcat-inttype = 'C'.
ls_fcat-inttype = tgstr-type.
ls_fcat-intlen = tgstr-leng.
ls_fcat-coltext = tgstr-compname.
* ls_fcat-scrtext_s = ls_fcat-fieldname.
* ls_fcat-scrtext_m = ls_fcat-fieldname.
* ls_fcat-scrtext_l = ls_fcat-fieldname.
APPEND ls_fcat TO lt_fcat.
ENDLOOP.
break sapuser.
Ein ähnliches Problem hat der FUBA 'GET_COMPONENT_LIST' auch, aber siehe workaround im coding !Der Baustein hatte einen saublöden Fehler. Eine über TYPE STANDARD TABLE OF definierte Tabelle wird nicht "erkannt". Sie muss mit "WITH HEADER LINE OCCURS 0" definiert sein. Oder so ähnlich...
Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
Alexander D.
Code: Alles auswählen.
NAME C 30 T0
TYPE C 1 u
LENG N 5 00080
OLEN N 3 000
DECS N 3 000
FLITL C 1
REFTYPELOC C 4 DDIC
REFTYPENAM C 61 SFLIGHT
Code: Alles auswählen.
data mat type mara-matnr
Code: Alles auswählen.
data mat(18)
Code: Alles auswählen.
NAME C 30 MAT
TYPE C 1 C
LENG N 5 00018
OLEN N 3 018
DECS N 3 000
FLITL C 1
REFTYPELOC C 4 DDIC
REFTYPENAM C 61 MARA-MATNR
Code: Alles auswählen.
TYPES: BEGIN OF t_mara,
matnr LIKE mara-matnr,
ersda TYPE ersda,
ernam LIKE mara-ernam,
maktx TYPE maktx,
END OF t_mara.
DATA: t1 TYPE STANDARD TABLE OF t_mara WITH DEFAULT KEY.