Tip

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

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

There are Comments. Add yours.

 
TIP: Want to include a code block in your comment? Use <pre> or <code> tags around the desired text. Ex: <code>insert code</code>

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
Sort by: OldestNewest

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

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.