动态内表

*&---------------------------------------------------------------------*
*& Report  ZDYNIT                                                      *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ZDYNIT                                  .
DATA: d_ref TYPE REF TO data,
      d_ref2 TYPE REF TO data,
      i_alv_cat TYPE TABLE OF lvc_s_fcat,
      ls_alv_cat LIKE LINE OF i_alv_cat.

TYPES tabname TYPE dcobjdef-name.
PARAMETER p_tablen TYPE tabname.
DATA BEGIN OF itab OCCURS 0.
  INCLUDE STRUCTURE dntab.
DATA END OF itab.

FIELD-SYMBOLS: <f_fs> TYPE TABLE,
               <f_fs1> TYPE TABLE,
               <f_fs2> TYPE ANY,
               <f_fs3> TYPE TABLE.
REFRESH itab.

CALL FUNCTION 'NAMETAB_GET'
  EXPORTING
    LANGU                     = SY-LANGU
    ONLY                      = ' '
    TABNAME                   = p_tablen
  TABLES
    NAMETAB                   = itab
  EXCEPTIONS
    INTERNAL_ERROR            = 1
    TABLE_HAS_NO_FIELDS       = 2
    TABLE_NOT_ACTIV           = 3
    NO_TEXTS_FOUND            = 4
    OTHERS                    = 5
          .
IF SY-SUBRC <> 0.
ENDIF.
LOOP AT itab .
  ls_alv_cat-fieldname = itab-fieldname.
  ls_alv_cat-ref_table = p_tablen.
  ls_alv_cat-ref_field = itab-fieldname.
  APPEND ls_alv_cat TO i_alv_cat.
ENDLOOP.
* internal table build
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
  EXPORTING
*    I_STYLE_TABLE             =
    IT_FIELDCATALOG           = i_alv_cat
*    I_LENGTH_IN_BYTE          =
   IMPORTING
     EP_TABLE                  = d_ref
*E_STYLE_FNAME             =
   EXCEPTIONS
     GENERATE_SUBPOOL_DIR_FULL = 1
     others                    = 2
        .
IF SY-SUBRC <> 0.

ENDIF.
ASSIGN d_ref->* TO <f_fs>.
SELECT * FROM (p_tablen) INTO CORRESPONDING FIELDS OF TABLE <f_fs>.
LOOP AT <f_fs> ASSIGNING <f_fs2> .
  WRITE / <f_fs2>.
ENDLOOP.

原文地址:https://www.cnblogs.com/cnlmjer/p/4099839.html