Вы находитесь на странице: 1из 2

TYPE-POOLS: abap.

DATA:
celltab TYPE lvc_t_styl.
DATA:
go_table TYPE REF TO cl_salv_table,
go_sdescr TYPE REF TO cl_abap_structdescr,
go_tdescr TYPE REF TO cl_abap_tabledescr,
gdo_data TYPE REF TO data,
gdo_handle TYPE REF TO data,
gs_comp TYPE abap_componentdescr,
gt_components TYPE abap_component_tab.
*
* name TYPE string,
* type TYPE REF TO cl_abap_datadescr,
* as_include TYPE abap_bool,
* suffix TYPE string,
FIELD-SYMBOLS:
<gd_fld> TYPE ANY,
<gs_struc> TYPE ANY,
<gt_itab> TYPE table.
PARAMETER:
p_tabnam TYPE tabname DEFAULT 'KNB1'.
START-OF-SELECTION.
* Create dynamically structure
CREATE DATA gdo_data TYPE (p_tabnam).
ASSIGN gdo_data->* TO <gs_struc>.
CHECK ( <gs_struc> IS ASSIGNED ).
* Simulate dynamic addition of columns to ALV list
DO 1 TIMES.
ASSIGN COMPONENT 'MATNR' OF STRUCTURE <gs_struc> TO <gd_fld>.
CLEAR: gs_comp.
gs_comp-type ?= cl_abap_datadescr=>describe_by_data( <gd_fld> ).
gs_comp-name = gs_comp-type->get_relative_name( ).
APPEND gs_comp TO gt_components.
go_sdescr = cl_abap_structdescr=>create( gt_components ).
go_tdescr = cl_abap_tabledescr=>create( go_sdescr ).
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_itab>.
* Dynamic select
SELECT * FROM (p_tabnam)
INTO CORRESPONDING FIELDS OF TABLE <gt_itab>
WHERE MATKL = '01'.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_table
CHANGING
t_table = <gt_itab>.
go_table->display( ).
CATCH cx_salv_msg .
ENDTRY.
ENDDO.
" Add table type as field to structure
CLEAR: gs_comp.
gs_comp-type ?= cl_abap_typedescr=>describe_by_data( celltab ).
gs_comp-name = 'CELLTAB'.
APPEND gs_comp TO gt_components.
go_sdescr = cl_abap_structdescr=>create( gt_components ).
go_tdescr = cl_abap_tabledescr=>create( go_sdescr ).
CREATE DATA gdo_handle TYPE HANDLE go_tdescr.
ASSIGN gdo_handle->* TO <gt_itab>.
* Dynamic select
SELECT * FROM (p_tabnam)
INTO CORRESPONDING FIELDS OF TABLE <gt_itab>
WHERE MATKL = '01'.
END-OF-SELECTION.

Вам также может понравиться