说明:REUSE_ALV_GRID_DISPLAY_LVC 的用法
REPORT XXXX.
TYPE-POOLS: slis.
INCLUDE <icon>.
DATA: u_command TYPE slis_formname VALUE 'USER_COMMAND'.
DATA: ok_code LIKE sy-ucomm.
*ALV data declarations
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: it_fieldcat TYPE lvc_t_fcat, "slis_t_fieldcat_alv WITH HEADER LINE,
wa_fieldcat TYPE lvc_s_fcat,
gd_tab_group TYPE slis_t_sp_group_alv,
gd_layout TYPE lvc_s_layo, "slis_layout_alv,
gd_repid LIKE sy-repid.
* itab definition
TYPES: BEGIN OF t_display.
INCLUDE STRUCTURE ZTFICO_PPS.
TYPES: SEL,
ZNUM TYPE ZNUM,
field_style TYPE LVC_T_STYL, "FOR DISABLE
END OF t_display.
DATA: it_display TYPE STANDARD TABLE OF t_display WITH HEADER LINE,
wa_display TYPE t_display.
* 屏幕设计略。
* 主程序。
Start-OF-SELCTION.
SORT it_display by ZNUM EBELN EBELP. " it_display 为结果输出内表
PERFORM set_specific_field_attributes. " 特性设置
PERFORM build_fieldcatalog CHANGING it_fieldcat. " 字段列举
PERFORM frm_alv_output_data. " ALV输出
* 子程序————————————————————————————————
*&根据条件设置字段是否可编辑
form set_specific_field_attributes .
DATA ls_stylerow TYPE lvc_s_styl .
DATA lt_styletab TYPE lvc_t_styl .
LOOP AT it_display .
IF it_display-ZFLAG_ZF NE ''.
ls_stylerow-fieldname = 'ZFLAG_ZF' .
ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled.
"set field to disabled
APPEND ls_stylerow TO it_display-field_style.
*可以按上面的代码添加多个字段的是否可修改
MODIFY it_display .
ENDIF.
ENDLOOP.
endform.
* 字段列举
FORM frm_alv_output_data.
GD_LAYOUT-box_fname = 'SEL'.
GD_LAYOUT-stylefname = 'FIELD_STYLE'.
* GD_LAYOUT-zebra = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_SET_STATUS' " 激活标准ALV的GUI状态
i_callback_user_command = 'USER_COMMAND'
i_grid_title = 'PO采购付款计划表'
it_fieldcat_LVC = IT_FIELDCAT
IS_LAYOUT_LVC = GD_LAYOUT
i_save = 'X'
* i_structure_name = 'ZTFICO_PPS' " 如果允许,则不用再列举字段,直接显示全部表内容
TABLES
t_outtab = it_display
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "frm_alv_output_data
*激活自定义状态栏
FORM frm_set_status USING rt_extab TYPE slis_t_extab.
CLEAR: rt_extab.
REFRESH: rt_extab.
SET PF-STATUS '9001' EXCLUDING rt_extab.
ENDFORM. "FRM_SET_STATUS
* 用户自定义事件
FORM user_command USING ucomm TYPE sy-ucomm
selfield TYPE slis_selfield.
data: lo_guid type ref to cl_gui_alv_grid.
DATA: lr_grid type ref to cl_gui_alv_grid.
DATA : lt_index_rows TYPE lvc_t_row.
DATA : flag_save TYPE i.
DATA : lv_index TYPE I.
CASE ucomm.
WHEN '&F03' OR 'EXIT' OR 'CANCLE'.
LEAVE TO SCREEN 0.
WHEN '&DATA_SAVE'." 保存按钮
* 取得当前alv的grid
call function 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lo_guid.
* 更新数据到内表 (checkbox打钩)
call method lo_guid->check_changed_data.
* selfield-refresh = 'X'.
flag_save = 0.
LOOP AT it_display WHERE ZFLAG_ZF = 'X' .
READ TABLE it_display_save with key EBELN = it_display-EBELN
EBELP = it_display-EBELP
BLDAT = it_display-BLDAT
ZNUM = it_display-ZNUM
ZFLAG_ZF = ''.
if sy-subrc = 0 .
UPDATE ZTFICO_PPS SET ZFLAG_ZF = 'X'
WHERE EBELN = it_display-EBELN
AND EBELP = it_display-EBELP
AND BLDAT = it_display-BLDAT.
flag_save = flag_save + 1.
ENDIF.
ENDLOOP.
if flag_save > 0 .
COMMIT WORK.
MESSAGE '设置支付标识成功!' TYPE 'S'.
ELSE.
ROLLBACK WORK.
MESSAGE '没有修改支付标识或者数据保存失败!' TYPE 'E'.
ENDIF.
WHEN '&IC1'. " 双击显示PO ME23N
* 取得当前alv的grid
call function 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->get_current_cell
IMPORTING
e_row = lv_index.
* PERFORM frm_click2 USING selfield-fieldname selfield-value.. "根据选择的行字段进行输出
PERFORM frm_click2 USING lv_index. "根据选择的行进行输出
ENDCASE.
ENDFORM.
* 双击行中指定字段,读取到指定的Parameter ID 中。
*FORM frm_click2 USING p_selfield_fieldname
* p_selfield_value.
* IF p_selfield_fieldname CS 'EBELN'."双击的字段 采购订单号
* SET PARAMETER ID 'BES' FIELD p_selfield_value."字段的参数ID
* CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN. "要调用的T_code.
* ENDIF.
*ENDFORM. " FRM_CLICK
* 双击行中任意位置,根据行号读取内表指段到指定的Parameter ID 中。
FORM frm_click2 USING lv_index_c.
READ TABLE it_display index lv_index_c.
if sy-subrc = 0.
SET PARAMETER ID 'BES' FIELD it_display-EBELN."字段的参数ID
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN. "要调用的T_code.
ENDIF.
ENDFORM.
FORM build_fieldcatalog CHANGING it_fieldcat TYPE lvc_t_fcat.
PERFORM frm_fieldcat_init TABLES it_fieldcat
USING 'ZNUM' '序号' '0' '6' 'X' '' '' '' 'X'.
PERFORM frm_fieldcat_init TABLES it_fieldcat
USING 'ZNAME' '供应商名称' '1' '30' 'X' '' '' '' 'X'.
PERFORM frm_fieldcat_init TABLES it_fieldcat
USING 'EBELN' '采购订单号' '2' '10' 'X' '' '' '' 'X'.
PERFORM frm_fieldcat_init TABLES it_fieldcat
USING 'EBELP' '行项目' '3' '5' 'X' '' '' '' 'X'.
*……
PERFORM frm_fieldcat_init TABLES it_fieldcat
USING 'ZFLAG_ZF' '支付标识' '19' '1' '' '' 'X' 'X' ''.
ENDFORM. "build_fieldcatalog
* 字段属性设置
FORM frm_fieldcat_init TABLES t_fieldcat TYPE lvc_t_fcat
USING fieldname TYPE C " 字段名
scrtext_m TYPE C " 标题
col_pos TYPE I " 所在列
outputlen TYPE I " 输出长度
emphasize TYPE C " 高亮显示
key TYPE C " 主键
checkbox TYPE C
edit TYPE C
fix_column TYPE C " 固定列
.
DATA: ls_fieldcat TYPE lvc_s_fcat.
ls_fieldcat-fieldname = fieldname.
ls_fieldcat-scrtext_m = scrtext_m.
ls_fieldcat-col_pos = col_pos.
ls_fieldcat-outputlen = outputlen.
ls_fieldcat-emphasize = emphasize.
ls_fieldcat-key = key.
ls_fieldcat-checkbox = checkbox.
ls_fieldcat-edit = edit.
ls_fieldcat-fix_column = fix_column.
APPEND ls_fieldcat TO t_fieldcat.
CLEAR ls_fieldcat.
ENDFORM. "frm_fieldcat_init
* ALV输出