天天看點

動态内表的倆栗子_SAP劉夢_新浪部落格

貨鋪QQ群号:834508274

群内禁止發廣告及其他一切無關連結,小程式等,進群看公告,謝謝配合 

不修改昵稱會被不定期踢除,謝謝配合

昨天提到建立動态内表,今天舉兩個栗子

*&---------------------------------------------------------------------*
 *& Report ZLM_DY01
 *&---------------------------------------------------------------------*
 *&
 *&---------------------------------------------------------------------*
 REPORT ZLM_DY01.

 PARAMETERS P_NAME TYPE RSRD1-TBMA_VAL.

 DATA: LR_STRUC  TYPE REF TO CL_ABAP_STRUCTDESCR,
       LR_DATA   TYPE REF TO CL_ABAP_DATADESCR,
       LR_TABLE  TYPE REF TO CL_ABAP_TABLEDESCR,
       DYN_TABLE TYPE REF TO DATA,
       DYN_WA    TYPE REF TO DATA.
 DATA:L_TABNAME TYPE TABNAME.
 FIELD-SYMBOLS:  TYPE STANDARD TABLE,
                    TYPE ANY.

 L_TABNAME = P_NAME.
 LR_STRUC ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( L_TABNAME ).

 LR_TABLE ?= CL_ABAP_TABLEDESCR=>CREATE( P_LINE_TYPE = LR_STRUC ).

 CREATE DATA DYN_WA    TYPE HANDLE LR_STRUC.
 CREATE DATA DYN_TABLE TYPE HANDLE LR_TABLE.
 ASSIGN DYN_WA->*    TO .
 ASSIGN DYN_TABLE->* TO .

 SELECT * INTO CORRESPONDING FIELDS OF TABLE 
        UP TO 100 ROWS
      FROM (L_TABNAME).

 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_STRUCTURE_NAME = L_TABNAME
   TABLES
     T_OUTTAB         = 
   EXCEPTIONS
     PROGRAM_ERROR    = 1
     OTHERS           = 2.
 IF SY-SUBRC <> 0.
   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
 ENDIF. 
  
 *&---------------------------------------------------------------------*
 *& Report ZLM_DY02
 *&---------------------------------------------------------------------*
 *&
 *&---------------------------------------------------------------------*
 REPORT ZLM_DY02.

 DATA:  GT_FIELDCAT     TYPE LVC_T_FCAT.
 DATA: GT_FILEDS       TYPE STANDARD TABLE OF DFIES.
 DATA: GS_FILEDS       TYPE DFIES.
 DATA:    GS_FIELDCAT     TYPE LVC_S_FCAT.
 FIELD-SYMBOLS:  TYPE STANDARD TABLE.  " 内表指針
 DATA: DY_TABLE TYPE REF TO DATA.

 PARAMETERS P_NAME TYPE DDOBJNAME.

 CALL FUNCTION 'DDIF_FIELDINFO_GET' "利用結構名取結構
   EXPORTING
     TABNAME        = P_NAME
   TABLES
     DFIES_TAB      = GT_FILEDS
   EXCEPTIONS
     NOT_FOUND      = 1
     INTERNAL_ERROR = 2
     OTHERS         = 3.

 LOOP AT GT_FILEDS INTO GS_FILEDS."動态結構filecat
   CLEAR:GS_FIELDCAT.
   MOVE-CORRESPONDING GS_FILEDS TO GS_FIELDCAT.
   GS_FIELDCAT-REF_TABLE = P_NAME.
   GS_FIELDCAT-REF_FIELD = GS_FILEDS-FIELDNAME.
   GS_FIELDCAT-FIELDNAME = GS_FILEDS-FIELDNAME.
   APPEND GS_FIELDCAT TO GT_FIELDCAT.
 ENDLOOP.

 CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE "動态内表結構填充
   EXPORTING
     IT_FIELDCATALOG           = GT_FIELDCAT
   IMPORTING
     EP_TABLE                  = DY_TABLE
   EXCEPTIONS
     GENERATE_SUBPOOL_DIR_FULL = 1
     OTHERS                    = 2.


 ASSIGN DY_TABLE->* TO .

 SELECT * INTO CORRESPONDING FIELDS OF TABLE 
        UP TO