Creating dynamic tables in R/3 4.6C

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->*

    Requires Free Membership to View

    When you register, you will start receiving targeted emails from my award-winning team of editorial writers. Our goal is to keep you informed on the hottest topics and biggest challenges faced by SAP professionals today.

    Hannah Smalltree, Editorial Director

    By submitting your registration information to SearchSAP.com you agree to receive email communications from TechTarget and TechTarget partners. We encourage you to read our Privacy Policy which contains important disclosures about how we collect and use your registration and other information. If you reside outside of the United States, by submitting this registration information you consent to having your personal data transferred to and processed in the United States. Your use of SearchSAP.com is governed by our Terms of Use. You may contact us at webmaster@TechTarget.com.

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>.

This was first published in June 2005

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.