SAP 创建动态内表

REPORT  zg_dynamic_ex LINE-SIZE 300.
TYPE-POOLS:   abap.
FIELD-SYMBOLS:<dyn_table> TYPE STANDARD TABLE,
              <dyn_wa>,
              <dyn_field>.
DATA: dy_table TYPE REF TO data,
      dy_line  TYPE REF TO data,
      xfc      TYPE        lvc_s_fcat,
      ifc      TYPE        lvc_t_fcat.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_table(30)  TYPE c DEFAULT 'T001'.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
  PERFORM get_structure.
  PERFORM create_dynamic_itab.
  PERFORM get_data.
  PERFORM write_out.
*&--------------------------------------------------------------------*
*&      Form  get_structure
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM get_structure.
  DATA: idetails      TYPE        abap_compdescr_tab,
        xdetails      TYPE        abap_compdescr.
  DATA: ref_table_des TYPE REF TO cl_abap_structdescr.
  ref_table_des ?=
   cl_abap_typedescr=>describe_by_name( p_table ).

  idetails[] = ref_table_des->components[].
  LOOP AT idetails INTO xdetails.
    CLEAR xfc.
    xfc-fieldname = xdetails-name.
    xfc-datatype  = xdetails-type_kind.
    xfc-inttype   = xdetails-type_kind.
    xfc-intlen    = xdetails-length.
    xfc-decimals  = xdetails-decimals.
    APPEND xfc TO ifc.
  ENDLOOP.
ENDFORM.                    "get_structure
*&--------------------------------------------------------------------*
*&      Form  create_dynamic_itab
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM create_dynamic_itab.
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = ifc
    IMPORTING
      ep_table        = dy_table.
  ASSIGN dy_table->* TO <dyn_table>.
  CREATE DATA dy_line LIKE LINE OF <dyn_table>.
  ASSIGN dy_line->* TO <dyn_wa>.
ENDFORM.                    "create_dynamic_itab
*&--------------------------------------------------------------------*
*&      Form  get_data
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM get_data.
  SELECT * INTO TABLE <dyn_table> FROM (p_table).
ENDFORM.                    "get_data
*&--------------------------------------------------------------------*
*&      Form  write_out
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM write_out.
  LOOP AT <dyn_table> INTO <dyn_wa>.
    DO.
      ASSIGN COMPONENT sy-index OF STRUCTURE <dyn_wa> TO <dyn_field>.
      IF sy-subrc <> 0.
        EXIT.
      ENDIF.
      IF sy-index = 1.
        WRITE:/ <dyn_field>.
      ELSE.
        WRITE: <dyn_field>.
      ENDIF.
    ENDDO.
  ENDLOOP.
ENDFORM.                    "write_out

原文地址:https://www.cnblogs.com/qlp1982/p/2322713.html