可编辑ALV代码(例子)
FORM frm_output .
*ALV输出
g_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_pf_status_set = 'SET_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
i_callback_program = g_repid
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
i_save = 'A'
is_variant = v_stru_disvar
it_events = git_events[]
it_sort = it_sort[]
is_print = gs_print
TABLES
t_outtab = it_tab
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.
ENDFORM. " FRM_OUTPUT
*&---------------------------------------------------------------------*
*& Form set_status
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RT_EXTAB text
*----------------------------------------------------------------------*
FORM frm_user_command USING l_ucomm TYPE sy-ucomm
liw_selfield TYPE slis_selfield.
DATA: l_tabix LIKE sy-tabix,
p_tabix LIKE sy-tabix,
w_tab1 LIKE LINE OF it_tab,
l_vbeln LIKE lips-vbeln,
l_msgv1 LIKE bdcmsgcoll-msgv1.
CASE l_ucomm.
WHEN 'TAKE'.
PERFORM frm_get_alv_data.
LOOP AT it_tab INTO w_tab WHERE flag = 'X'.
l_tabix = sy-tabix.
IF w_tab-fkdat = ''.
CONCATENATE '交货单' w_tab-vbeln '创建发票不成功,因为未填写出具发票日期' INTO
w_tab-msgv1.
w_tab-flag = ''.
MODIFY it_tab FROM w_tab INDEX l_tabix.
CLEAR: w_tab.
CALL METHOD ref_grid->refresh_table_display. "刷新ALV报表
CONTINUE.
ENDIF.
IF ( w_tab-wbsta = 'C' AND ( w_tab-fksta = 'A' OR w_tab-fksta =
'B' ) ) OR w_tab-faksk <> space.
READ TABLE it_vbeln INTO w_vbeln WITH KEY vbeln = w_tab-vbeln.
IF sy-subrc = 0.
CONCATENATE '交货单' w_tab-vbeln '已创建发票' INTO w_tab-msgv1.
w_tab-flag = ''.
MODIFY it_tab FROM w_tab INDEX l_tabix.
CLEAR: w_tab,
w_vbeln.
CALL METHOD ref_grid->refresh_table_display. "刷新ALV报表
CONTINUE.
ENDIF.
REFRESH bdcdata.
PERFORM frm_bdc_dynpro USING 'SAPMV60A' '0102'.
PERFORM frm_bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM frm_bdc_field USING 'RV60A-FKDAT' sy-datum.
PERFORM frm_bdc_field USING 'KOMFK-VBELN(01)' w_tab-vbeln.
PERFORM frm_bdc_dynpro USING 'SAPMV60A' '0104'.
PERFORM frm_bdc_field USING 'BDC_OKCODE' '=SICH'.
CALL TRANSACTION 'VF01' USING bdcdata MODE 'E'
UPDATE 'S' MESSAGES INTO messtab.
w_vbeln-vbeln = w_tab-vbeln.
APPEND w_vbeln TO it_vbeln.
READ TABLE messtab WITH KEY msgtyp = 'S'.
IF sy-subrc = 0.
CONCATENATE '发票凭证' messtab-msgv1 messtab-msgv2 '创建成功' INTO
l_msgv1.
ENDIF.
CLEAR: messtab[],
w_vbeln.
ELSE.
CONCATENATE '交货单' w_tab-vbeln '不能创建发票' INTO l_msgv1.
ENDIF.
l_vbeln = w_tab-vbeln.
LOOP AT it_tab INTO w_tab WHERE vbeln = w_tab-vbeln.
p_tabix = sy-tabix.
READ TABLE it_tab INTO w_tab1 WITH KEY vbeln = w_tab-vbeln.
w_tab1-flag = ''.
w_tab1-msgv1 = l_msgv1.
MODIFY it_tab FROM w_tab1 INDEX p_tabix.
CLEAR w_tab1.
ENDLOOP.
CLEAR: w_tab.
ENDLOOP.
CALL METHOD ref_grid->refresh_table_display.
* PERFORM frm_process_message.
ENDCASE.
ENDFORM. "frm_user_command
*&---------------------------------------------------------------------*
*& Form set_status
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RT_EXTAB text
*----------------------------------------------------------------------*
FORM set_status USING rt_extab TYPE slis_t_extab..
SET PF-STATUS '1100'.
ENDFORM. "set_status
*&---------------------------------------------------------------------*
*& Form frm_get_alv_data
*&---------------------------------------------------------------------*
* 使用方法:放在
*----------------------------------------------------------------------*
FORM frm_get_alv_data.
"声明一个ALV实例
" 取得当前的ALV传给声明的实例,其目的就是取当ALV的对象。
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
* 从ALV实例出来的数据更新ALV对应的内表
CALL METHOD ref_grid->check_changed_data.
ENDFORM. "frm_get_alv_data