*&---------------------------------------------------------------------*
*& Report ZDYNRPO
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZDYNRPO.
*-------------ALV 相关--------------------------
DATA: WA_LAYO TYPE LVC_S_LAYO.
DATA: WA_FCAT TYPE LVC_S_FCAT,
IT_FCAT TYPE LVC_T_FCAT.
DATA: IT_SCOL TYPE LVC_T_SCOL.
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID.
FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE,
<DYN_WA>,
<DYN_FIELD>.
DATA: DY_TABLE TYPE REF TO DATA,
DY_LINE TYPE REF TO DATA.
DATA: GV_COLNAME TYPE CHAR10,
GV_DESC TYPE CHAR10,
GV_INDEX TYPE CHAR02.
*屏幕绘制
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE T1.
* 可描述的列数
PARAMETERS: COL TYPE I.
SELECTION-SCREEN END OF BLOCK B1.
* 初始化 添加固定列 姓名 年龄
INITIALIZATION.
* CLEAR: IT_FCAT.
PERFORM FRM_ADD_FCAT USING:
'NAME' 'C' '姓名' '10' ''.
PERFORM FRM_ADD_FCAT USING:
'AGE' 'C' '年龄' '6' ''.
START-OF-SELECTION.
* 根据条件动态生成列
DO COL TIMES.
GV_INDEX = GV_INDEX + 1.
CONCATENATE 'COL' GV_INDEX INTO GV_COLNAME.
CONCATENATE '维护信息' GV_INDEX INTO GV_DESC.
PERFORM FRM_ADD_FCAT
USING GV_COLNAME 'C' GV_DESC '15' 'X'.
ENDDO.
* 根据it_fact生成动态表
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IT_FCAT
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>.
* 给表字段赋值
CLEAR: GV_INDEX.
DO COL TIMES.
GV_INDEX = GV_INDEX + 1.
CONCATENATE 'COL' GV_INDEX INTO GV_COLNAME.
ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = '添加信息'.
ENDDO.
GV_COLNAME = 'NAME'.
ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = 'MSC_笑明'.
GV_COLNAME = 'AGE'.
ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = '18'.
APPEND <DYN_WA> TO <DYN_TABLE>.
* 相当于给内表放入两条数据
CLEAR: GV_INDEX.
DO COL TIMES.
GV_INDEX = GV_INDEX + 1.
CONCATENATE 'COL' GV_INDEX INTO GV_COLNAME.
ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = '添加信息'.
ENDDO.
GV_COLNAME = 'NAME'.
ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = 'MSC_小迈'.
GV_COLNAME = 'AGE'.
ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = '3'.
APPEND <DYN_WA> TO <DYN_TABLE>.
END-OF-SELECTION.
CLEAR: WA_LAYO.
WA_LAYO-ZEBRA = 'X'.
* WA_LAYO-CWIDTH_OPT = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT_LVC = WA_LAYO
IT_FIELDCAT_LVC = IT_FCAT
TABLES
T_OUTTAB = <DYN_TABLE>
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.
*&---------------------------------------------------------------------*
*& Form frm_add_fcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE1 text
* -->VALUE2 text
* -->VALUE3 text
* -->VALUE4 text
*----------------------------------------------------------------------*
FORM FRM_ADD_FCAT USING VALUE1 VALUE2 VALUE3 VALUE4 VALUE5.
WA_FCAT-FIELDNAME = VALUE1.
WA_FCAT-INTTYPE = VALUE2.
WA_FCAT-REPTEXT = VALUE3.
WA_FCAT-OUTPUTLEN = VALUE4.
WA_FCAT-EDIT = VALUE5.
APPEND WA_FCAT TO IT_FCAT.
CLEAR: WA_FCAT.
ENDFORM. "frm_add_fcat