Creating dynamic tables in R/3 4.6C
Looking for a way to create a dynamic internal table? In release WAS 620, you can, by using :
CREATE DATA new_line TYPE table of (p_tab).
This syntax was not allowed in earlier releases. The FM Y_CREATE_DYNAMIC_TABLE can help you to achieve this goal.
FUNCTION y_create_dynamic_table. *"---------------------------------------------------------------------- *"*"Local interface: *" IMPORTING *" REFERENCE(I_STRUCT_NAME) TYPE DD02L-TABNAME *" REFERENCE(I_ALV_CLEAR_KEY) TYPE FLAG OPTIONAL *" EXPORTING *" REFERENCE(E_TOTAL_LENGTH) TYPE I *" TABLES *" CTBL_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV OPTIONAL *" CTBL_DYN_CATALOG STRUCTURE LVC_S_FCAT OPTIONAL *" CHANGING *" REFERENCE(DYN_WA) TYPE REF TO DATA *" REFERENCE(DYN_TABLE) TYPE REF TO DATA *"---------------------------------------------------------------------- FIELD-SYMBOLS : <tbl_output> TYPE STANDARD TABLE, <wa_output> TYPE ANY. DATA: new_line TYPE REF TO data, " dereference <fs> new_table TYPE REF TO data. * Dynamic field description of a structure DATA: ref_descr TYPE REF TO cl_abap_structdescr, wa_comp TYPE abap_compdescr. * cl_alv_table_create=>create_dynamic_table METHOD DATA: it_fieldcat TYPE lvc_t_fcat, is_fieldcat LIKE LINE OF it_fieldcat. * REUSE_ALV FM DATA: ct_fieldcat TYPE slis_t_fieldcat_alv, wa_fc LIKE LINE OF ct_fieldcat. ** create working area according to selection CREATE DATA new_line TYPE (i_struct_name). ASSIGN new_line->* TO <wa_output>. * create table-> fill catalog ref_descr ?= cl_abap_typedescr=>describe_by_data( <wa_output> ). LOOP AT ref_descr->components INTO wa_comp. MOVE: wa_comp-name TO is_fieldcat-fieldname, wa_comp-name TO is_fieldcat-ref_field, i_struct_name TO is_fieldcat-ref_table. APPEND is_fieldcat TO it_fieldcat. ADD wa_comp-length TO e_total_length. * Catalog for REUSE_ALV_GRID_DISPLAY MOVE-CORRESPONDING is_fieldcat TO wa_fc. wa_fc-fieldname = is_fieldcat-fieldname. wa_fc-fieldname = is_fieldcat-ref_field. wa_fc-ref_tabname = is_fieldcat-ref_table. * If the key is cleared, the order of columns are not changed IF NOT i_alv_clear_key IS INITIAL. CLEAR wa_fc-key. ENDIF. APPEND wa_fc TO ct_fieldcat. ENDLOOP. CALL METHOD cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = it_fieldcat IMPORTING ep_table = new_table. ASSIGN new_table->* TO <tbl_output>. * Return ctbl_alv_fieldcat[] = ct_fieldcat[]. " ALV use ctbl_dyn_catalog[] = it_fieldcat[]. " create_dynamic_table reuse * dyn_table[] = <tbl_output>. " generates a dump, <fs> not assigned * dyn_wa = <wa_output>. " when calling the FM dyn_table = new_table. dyn_wa = new_line. ENDFUNCTION. In the calling program: *------------ * F I E L D – S Y M B O L S *------------ FIELD-SYMBOLS : <tbl> TYPE STANDARD TABLE, <wa> TYPE ANY. *-------------- * D A T A *-------------- DATA: new_line TYPE REF TO data, " dereference <fs> new_table TYPE REF TO data. CALL FUNCTION 'Y_CREATE_DYNAMIC_TABLE' EXPORTING i_struct_name = p_tab i_alv_clear_key = 'X' TABLES ctbl_alv_fieldcat = ct_fieldcat CHANGING dyn_wa = new_line dyn_table = new_table. * Dereference to field symbol ASSIGN new_table->* TO <tb>. ASSIGN new_line->* TO <wa>.
Article source:
http://searchsap.techtarget.com/tip/Creating-dynamic-tables-in-R-3-46C