Create internal table structure dynamically









The following ABAP code demonstrates how to create an internal table structure dynamically from within your SAP code. The program takes a table name as its input and then builds an internal table dynamically from this information, it then populates it with data and displays it using an ALV grid control.


*Code to demonstrate how to create a structure dynamically
*  The varying comand works on the position within the row, therfore
*  each field must be the same number of fields apart.
*&-------------------------------------------------------------*
*& Report  CREATE_DYNAMIC_ITAB                                 *
*&                                                             *
*&-------------------------------------------------------------*
*& Example of creating an ABAP itab dynamically                *
*& Then populate dynamic table and display using ALV           *
*&-------------------------------------------------------------*
*&-Created By details------------------------------------------*
*&                                                             *
*& Author : www.SAP Development                                   *
*&  SAP ABAP development *
*&-------------------------------------------------------------*
REPORT  CREATE_DYNAMIC_ITAB.

type-pools : abap, slis.
field-symbols: <fs_table> type standard table,
               <fs_wa>,
               <fs_field>.
data: dyn_table    type ref to data,
      dyn_line     type ref to data,
      wa_fieldcat type lvc_s_fcat,
      it_fieldcat type lvc_t_fcat.

*ALV data declarations
data: fieldcatalog type slis_t_fieldcat_alv with header line,
      gd_tab_group type slis_t_sp_group_alv,
      gd_layout    TYPE slis_layout_alv,
      gd_repid     like sy-repid.

selection-screen begin of block block1 with frame.
parameters: p_table(30) type c default 'SFLIGHT'.
selection-screen end of block block1.

***********************************************************************
*start-of-selection.
start-of-selection.
  perform get_table_structure.
  perform create_itab_dynamically.
  perform get_data.
  perform display_data.

*&---------------------------------------------------------------------*

*& Form get table structure

*&---------------------------------------------------------------------* * Get structure of an SAP table *---------------------------------------------------------------------------------* form get_table_structure. data : it_tabdescr type abap_compdescr_tab, wa_tabdescr type abap_compdescr. data : ref_table_descr type ref to cl_abap_structdescr. * Return structure of the table. ref_table_descr ?= cl_abap_typedescr=>describe_by_name( p_table ). it_tabdescr[] = ref_table_descr->components[]. loop at it_tabdescr into wa_tabdescr. clear wa_fieldcat. wa_fieldcat-fieldname = wa_tabdescr-name . wa_fieldcat-datatype = wa_tabdescr-type_kind. wa_fieldcat-inttype = wa_tabdescr-type_kind. wa_fieldcat-intlen = wa_tabdescr-length. wa_fieldcat-decimals = wa_tabdescr-decimals. append wa_fieldcat to it_fieldcat. endloop. endform. "get_table_structure *&---------------------------------------------------------------------*

*& Form create itab dynamically

*&---------------------------------------------------------------------* * Create internal table dynamically *---------------------------------------------------------------------------------* form create_itab_dynamically. * Create dynamic internal table and assign to Field-Symbol call method cl_alv_table_create=>create_dynamic_table EXPORTING it_fieldcatalog = it_fieldcat IMPORTING ep_table = dyn_table. assign dyn_table->* to <fs_table>. * Create dynamic work area and assign to Field Symbol create data dyn_line like line of <fs_table>. assign dyn_line->* to <fs_wa>. endform. "create_itab_dynamically *&---------------------------------------------------------------------*

*& Form get data

*&---------------------------------------------------------------------* * Populate dynamic itab *---------------------------------------------------------------------------------* form get_data. * Select Data from table using field symbol which points to dynamic itab select * into CORRESPONDING FIELDS OF TABLE <fs_table> from (p_table). endform. "get_data *&---------------------------------------------------------------------*

*& Form display data

*&---------------------------------------------------------------------* * display data using ALV *---------------------------------------------------------------------------------* FORM display_data. perform build_fieldcatalog. perform build_layout. perform display_alv_report. ENDFORM. " display_data *&---------------------------------------------------------------------*

*& Form BUILD FIELDCATALOG

*&---------------------------------------------------------------------* * Build Fieldcatalog for ALV Report, using SAP table structure *---------------------------------------------------------------------------------* form build_fieldcatalog. * ALV Function module to build field catalog from SAP table structure DATA: it_fcat TYPE slis_t_fieldcat_alv. CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_structure_name = p_table CHANGING ct_fieldcat = it_fcat EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. fieldcatalog[] = it_fcat[]. endform. " BUILD_FIELDCATALOG *&---------------------------------------------------------------------*

*& Form BUILD LAYOUT

*&---------------------------------------------------------------------* * Build layout for ALV grid report *---------------------------------------------------------------------------------* form build_layout. gd_layout-colwidth_optimize = 'X'. endform. " BUILD_LAYOUT *&---------------------------------------------------------------------*

*& Form DISPLAY ALV REPORT

*&---------------------------------------------------------------------* * Display report using ALV grid *---------------------------------------------------------------------------------* form display_alv_report. gd_repid = sy-repid. call function 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid is_layout = gd_layout it_fieldcat = fieldcatalog[] i_save = 'X' TABLES t_outtab = <fs_table> EXCEPTIONS program_error = 1 others = 2. endform. " DISPLAY_ALV_REPORT