1、动态内表相关定义
DATA: gt_dyntb TYPE REF TO data,
gs_dynwa TYPE REF TO data.
FIELD-SYMBOLS: <dyn_table> TYPE table, "指向动态内表 "是一个标志,可以理解为一个指针,将来创建的内表就要通过它们来访问
<dyn_wa> TYPE any, "指向动态工作区
<fs> TYPE any. "指向值
2、先确定好ALV列
"以上确定好列之后,给动态alv列名称赋值
CLEAR gs_fieldcat1.
gs_fieldcat1-fieldname = 'ZXM'. "项目
gs_fieldcat1-colddictxt = 'L'.
gs_fieldcat1-intlen = 20.
gs_fieldcat1-scrtext_l = '项目'.
APPEND gs_fieldcat1 TO gt_fieldcat1.
LOOP AT gt_zz002 INTO gs_zz002.
CLEAR gs_fieldcat1.
gs_fieldcat1-fieldname = 'ZBM' && sy-tabix. "部门
gs_fieldcat1-colddictxt = 'L'.
gs_fieldcat1-intlen = 20.
gs_fieldcat1-scrtext_l = gs_zz002-zz002.
APPEND gs_fieldcat1 TO gt_fieldcat1.
ENDLOOP.
3、根据确定好的列去创建动态内表
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fieldcat1
IMPORTING
ep_table = gt_dyntb.
ASSIGN gt_dyntb->* TO <dyn_table>.
CHECK <dyn_table> IS ASSIGNED.
CREATE DATA gs_dynwa LIKE LINE OF <dyn_table>.
ASSIGN gs_dynwa->* TO <dyn_wa>.
* ASSIGN gs_dynwa->* TO <dyn_wa1>.
4、根据字段名,通过动态指针给列赋值
FORM frm_process1_data TABLES p_tab STRUCTURE gs_bm
USING VALUE(p_txt1).
CLEAR lv_index.
LOOP AT p_tab INTO DATA(ls_tab).
AT NEW racct.
ASSIGN COMPONENT 'ZXM' OF STRUCTURE <dyn_wa> TO <fs>.
<fs> = p_txt1.
ENDAT.
READ TABLE gt_zz002 INTO gs_zz002 WITH KEY zz002 = ls_tab-zz002.
IF sy-subrc = 0.
ASSIGN COMPONENT 'ZBM' && sy-tabix OF STRUCTURE <dyn_wa> TO <fs>.
<fs> = ls_tab-hsl.
ENDIF.
AT END OF racct.
APPEND <dyn_wa> TO <dyn_table>.
CLEAR <dyn_wa>.
ENDAT.
ENDLOOP.
ENDFORM.
5、最后调用Function ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-cprog
i_callback_pf_status_set = 'FRM_PF_STATUS'
* i_callback_user_command = 'FRM_USER_COMMAND'
* i_grid_title = i_grid_title
* i_grid_settings = gs_grid
is_layout_lvc = gs_layo
it_fieldcat_lvc = gt_fieldcat1
* it_events = ltd_event "必须!
i_save = 'A'
TABLES
t_outtab = <dyn_table>
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.