- SAP GUI标准状态栏功能功能固然强大,可仍然有些用户功能的无法满足吗,比如根据采购订单的数据进行调拨,这样就需要用到自定义按钮了。
- Function ALV实现自定义按钮步骤:1.在GUI状态下添加新按钮->2.增加Function ALV传入参数以及按钮参数功能实现.
- 1.在GUI状态下添加新按钮.一般Function ALV程序的状态采用复制的方式来建立,复制状态使用SE41事务码安装下图步骤建立,一直复制下去即可。
- 回到主程序可以看到GUI 状态已经复制过来了
- 接下来是添加自定义按钮
- 程序激活运行,可以看到自定义按钮已经有了
- 2.增加Function ALV传入参数,只要在调用Function ALV把传入参数( i_callback_user_command )打开并作相应处理
- 显示效果
完整代码
** Layout 变量定义
DATA gs_layout TYPE lvc_s_layo.
** Fieldcat 变量定义
DATA:gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat LIKE LINE OF gt_fieldcat.
** FieldCat的宏
DATA gv_pos TYPE i.
DEFINE %%add_fieldcat.
gv_pos = gv_pos + 1.
gs_fieldcat-col_pos = gv_pos.
gs_fieldcat-fieldname = &1.
gs_fieldcat-scrtext_m = &2.
APPEND gs_fieldcat TO gt_fieldcat.CLEAR gs_fieldcat.
END-OF-DEFINITION.
START-OF-SELECTION.
SELECT ekko~ebeln, "采购订单抬头数据- 采购单号
ekko~bukrs, "采购订单抬头数据- 公司代码
ekko~ekorg, "采购订单抬头数据- 采购组织
ekko~aedat, "采购订单抬头数据- 订单创建日期
ekko~ernam, "采购订单抬头数据- 订单创建者
ekpo~ebelp, "采购订单明细数据- 采购订单行号
ekpo~matnr, "采购订单明细数据- 采购订单物料编码
ekpo~menge, "采购订单明细数据- 采购数量
ekpo~meins, "采购订单明细数据- 采购数量的计量单位
ekpo~werks, "采购订单明细数据- 收货工厂
ekpo~lgort "采购订单明细数据- 收货库存地点
INTO TABLE @DATA(gt_po)
FROM ekko
INNER JOIN ekpo ON ekko~ebeln = ekpo~ebeln
WHERE ekko~aedat BETWEEN '20220301' AND '20220331'.
** Fieldcat字段映射处理
%%add_fieldcat:'EBELN' '采购单号', "( 前面字段值不可变 后面字段描述可变 每一行都是)
'EBELP' '采购订单行号',
'EKORG' '采购组织',
'BUKRS' '公司代码',
'AEDAT' '订单创建日期',
'ERNAM' '订单创建者',
'MATNR' '物料编码',
'MENGE' '采购数量',
'MEINS' '单位',
'WERKS' '收货工厂',
'LGORT' '收货库存地点'.
** Layout布局处理
gs_layout-cwidth_opt = 'X'. "自动优化列宽 (可以使用**在一行代码面前注释掉 看看ALV会有什么效果)
gs_layout-zebra = 'X'. "斑马纹输出
** 调用FunctionALV需要传入的参数:展示数据,FieldCat,Layout,Status
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_SET_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
TABLES
t_outtab = gt_PO[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
FORM frm_set_status USING p_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD'.
ENDFORM.
FORM frm_user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN 'BUTTON'.
MESSAGE '自定的按钮功能呢' TYPE 'I'.
ENDCASE.
ENDFORM.