TOP

TYPE-POOLS slis.
FORM frm_get_fields USING pt_data type any table
                    CHANGING pt_fields TYPE ddfields.
  DATA: lr_tabdescr TYPE REF TO cl_abap_structdescr,
        lr_data TYPE REF TO data,
        lt_fields TYPE ddfields.
  CREATE DATA lr_data LIKE LINE OF pt_data.
  lr_tabdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ).
  lt_fields = cl_salv_data_descr=>read_structdescr( lr_tabdescr ).
  pt_fields = lt_fields.
ENDFORM.

Z_FALV_FIELD_CATALOG

IMPORT:IT_ALV TYPE ANY TABLE.

TABLES:FIELD_CATALOG TYPE SLIS_T_FIELDCAT_ALV.

DATA: lt_ddfields TYPE ddfields,
      ls_fields TYPE dfies.
DATA: ls_fieldcat TYPE slis_fieldcat_alv,
      lt_fieldcat TYPE slis_t_fieldcat_alv.

PERFORM frm_get_fields USING it_alv[] CHANGING lt_ddfields[].
LOOP AT lt_ddfields into ls_fields.
  MOVE-CORRESPONDING ls_fields TO ls_fieldcat.
  APPEND ls_fieldcat TO lt_fieldcat.
  CLEAR ls_fieldcat.
ENDLOOP.
APPEND LINES OF lt_fieldcat TO field_catalog.