记录了一个简单的demo,方便使用,更多复杂功能在此基础上添加即可。
一个查询报表,上半屏幕输入查询条件,下半屏幕输出结果报表。
发布日期:2025.03.05
- 主程序代码:

REPORT zmm_rpt_wu_dmeo.
*全局变量
INCLUDE zmm_rpt_wu_demo_top.
START-OF-SELECTION.
end-of-selection.
PERFORM frm_display_alv.
INCLUDE zmm_rpt_wu_demo_f01.
INCLUDE zmm_rpt_wu_demo_o01.
INCLUDE zmm_rpt_wu_demo_i01.
- INCLUDE zmm_rpt_wu_demo_top.
TABLES:ekko.
CLASS lcl_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid.
PUBLIC SECTION.
METHODS: m_optimize_all_cols.
ENDCLASS.
* 类的定义
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
handle_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id,
* 自定义工具栏按钮
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object,
after_user_command FOR EVENT after_user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
* 类的实现
CLASS lcl_event_handler IMPLEMENTATION.
METHOD handle_user_command.
ENDMETHOD.
METHOD handle_hotspot_click.
PERFORM frm_handle_hotspot_click USING e_row_id e_column_id.
ENDMETHOD.
METHOD handle_toolbar.
PERFORM frm_event_toolbar USING e_object.
ENDMETHOD.
METHOD after_user_command.
CASE e_ucomm.
WHEN '&ALL'.
PERFORM frm_select_all.
WHEN '&DLL'.
PERFORM frm_deselect_all.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
ENDCLASS.
CLASS lcl_alv_grid IMPLEMENTATION.
METHOD m_optimize_all_cols.
CALL METHOD me->optimize_all_cols.
ENDMETHOD.
ENDCLASS.
TYPES: BEGIN OF ts_item,
zbox TYPE c, "复选框
ebeln TYPE ebeln,
ebelp TYPE ebelp,
lifnr TYPE ekko-lifnr, "供应商代码
name1 TYPE lfa1-name1, "供应商名称
bukrs TYPE bukrs, "公司代码
butxt TYPE t001-butxt, "公司代码描述
werks TYPE werks_d, "工厂
matnr TYPE matnr, "物料编号
maktx TYPE maktx, "物料描述
menge TYPE mseg-menge,
meins TYPE mseg-meins,
discount(20) TYPE c, "折扣金额
END OF ts_item.
TYPES: BEGIN OF ts_extab,
fcode TYPE sy-ucomm,
END OF ts_extab.
DATA: gr_lifnr TYPE RANGE OF lifnr,
gr_bukrs TYPE RANGE OF bukrs,
gv_code TYPE sy-ucomm,
gt_item TYPE STANDARD TABLE OF ts_item,
go_alv TYPE REF TO cl_gui_alv_grid,
gs_layout TYPE lvc_s_layo,
gt_fieldcat TYPE lvc_t_fcat,
go_event_handler TYPE REF TO lcl_event_handler,
go_container TYPE REF TO cl_gui_custom_container.
*创建子屏幕9102
SELECTION-SCREEN:BEGIN OF SCREEN 9102 AS SUBSCREEN.
SELECT-OPTIONS: s_ebeln FOR EKkO-ebeln.
PARAMETERS:p_lifnr TYPE lifnr,
p_bukrs TYPE bukrs.
SELECTION-SCREEN:END OF SCREEN 9102 .
- ZMM_RPT_WU_DEMO_F01
*&---------------------------------------------------------------------*
*& Form frm_display_alv
*&---------------------------------------------------------------------*
FORM frm_display_alv .
PERFORM frm_build_layout.
PERFORM frm_build_fieldcat.
CALL SCREEN 9100.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_LAYOUT
*&---------------------------------------------------------------------*
FORM frm_build_layout.
CLEAR gs_layout.
gs_layout-sel_mode = 'A'.
gs_layout-box_fname = 'ZBOX'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
FORM frm_build_fieldcat.
CLEAR: gt_fieldcat[].
gt_fieldcat = VALUE #( ( fieldname = 'ZBOX' outputlen = '5' coltext = '选择框' hotspot = 'X' checkbox = 'X' ) ).
gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'EBELN' coltext = '采购订单号' just = 'C' ) ).
gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'EBELP' coltext = '采购订单行项目' just = 'C' ) ).
gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'LIFNR' coltext = '供应商' just = 'C' ) ).
gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'NAME1' coltext = '供应商名称' just = 'C' ) ).
gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'BUKRS' coltext = '公司代码' just = 'C' ) ).
gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'BUTXT' coltext = '公司代码名称' just = 'C' ) ).
gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'WERKS' coltext = '工厂' just = 'C' ) ).
gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'MATNR' coltext = '物料编码' just = 'C' ) ).
gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'MAKTX' coltext = '物料描述' just = 'C') ).
gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'MENGE' coltext = '数量' just = 'C' ) ). "
gt_fieldcat = VALUE #( BASE gt_fieldcat ( fieldname = 'MEINS' coltext = '单位' just = 'C' ) ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_handle_hotspot_click
*&---------------------------------------------------------------------*
FORM frm_handle_hotspot_click USING p_row_id
p_column_id.
IF p_column_id = 'ZBOX'.
READ TABLE gt_item ASSIGNING FIELD-SYMBOL(<lfs_item>) INDEX p_row_id.
IF <lfs_item>-zbox = abap_true.
CLEAR <lfs_item>-zbox .
ELSE.
<lfs_item>-zbox = abap_true.
ENDIF.
ENDIF.
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'RELOAD'.
CALL METHOD go_alv->check_changed_data.
DATA: ls_stable TYPE lvc_s_stbl.
CLEAR ls_stable.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
CALL METHOD go_alv->refresh_table_display
EXPORTING
i_soft_refresh = 'X'
is_stable = ls_stable.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_event_toolbar
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_OBJECT
*&---------------------------------------------------------------------*
FORM frm_event_toolbar USING pv_object TYPE REF TO cl_alv_event_toolbar_set..
DATA: lv_quickinfo TYPE stb_button-quickinfo, "Toolbar quickinfo
lv_icon TYPE stb_button-icon. "Toolbar icon
PERFORM frm_set_toolbar USING '&ALL' '@4B@' ''
lv_quickinfo '' '' 0 pv_object.
PERFORM frm_set_toolbar USING '&DLL' '@4D@' ''
lv_quickinfo '' '' 0 pv_object.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_toolbar
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_
*& --> P_
*& --> P_
*& --> LV_QUICKINFO
*& --> TEXT_B01
*& --> P_
*& --> P_0
*& --> PV_OBJECT
*&---------------------------------------------------------------------*
FORM frm_set_toolbar USING iv_function TYPE stb_button-function
iv_icon TYPE stb_button-icon
iv_disabled TYPE stb_button-disabled
iv_quickinfo TYPE stb_button-quickinfo
iv_text TYPE stb_button-text
iv_type TYPE stb_button-butn_type
iv_pos TYPE i
iv_object TYPE REF TO cl_alv_event_toolbar_set.
DATA: ls_toolbar TYPE stb_button.
CLEAR ls_toolbar.
MOVE iv_function TO ls_toolbar-function.
MOVE iv_icon TO ls_toolbar-icon.
MOVE iv_disabled TO ls_toolbar-disabled.
MOVE iv_quickinfo TO ls_toolbar-quickinfo.
MOVE iv_type TO ls_toolbar-butn_type.
MOVE iv_text TO ls_toolbar-text.
IF iv_pos EQ 0.
APPEND ls_toolbar TO iv_object->mt_toolbar.
ELSE.
INSERT ls_toolbar INTO iv_object->mt_toolbar INDEX iv_pos.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_select_all
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_select_all .
DATA: ls_stable TYPE lvc_s_stbl.
LOOP AT gt_item ASSIGNING FIELD-SYMBOL(<lfs_item>).
<lfs_item>-zbox = 'X'.
ENDLOOP.
CALL METHOD go_alv->check_changed_data.
CLEAR ls_stable.
ls_stable-row = 'X'.
CALL METHOD go_alv->refresh_table_display
EXPORTING
i_soft_refresh = 'X'
is_stable = ls_stable.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_deselect_all
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_deselect_all .
DATA: ls_stable TYPE lvc_s_stbl.
LOOP AT gt_item ASSIGNING FIELD-SYMBOL(<lfs_item>).
<lfs_item>-zbox = ''.
ENDLOOP.
CALL METHOD go_alv->check_changed_data.
CLEAR ls_stable.
ls_stable-row = 'X'.
CALL METHOD go_alv->refresh_table_display
EXPORTING
i_soft_refresh = 'X'
is_stable = ls_stable.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
FORM frm_get_data .
IF p_lifnr IS NOT INITIAL.
gr_lifnr = VALUE #( ( sign = 'I' option = 'EQ' low = p_lifnr ) ).
ENDIF.
IF p_bukrs IS NOT INITIAL.
gr_bukrs = VALUE #( ( sign = 'I' option = 'EQ' low = p_bukrs ) ).
ENDIF.
SELECT a~ebeln,e~ebelp,a~lifnr,b~name1,a~bukrs,c~butxt,e~werks,e~matnr,d~maktx,e~menge,e~meins
FROM ekko AS a
INNER JOIN ekpo AS e
ON a~ebeln = e~ebeln
LEFT JOIN lfa1 AS b
ON a~lifnr = b~lifnr
LEFT JOIN t001 AS c
ON a~bukrs = c~bukrs
LEFT JOIN makt AS d
ON e~matnr = d~matnr
AND d~spras = @sy-langu
WHERE a~ebeln IN @s_ebeln
AND a~lifnr IN @gr_lifnr
AND a~bukrs IN @gr_bukrs
INTO CORRESPONDING FIELDS OF TABLE @gt_item.
ENDFORM.
- ZMM_RPT_WU_DEMO_O01
*----------------------------------------------------------------------*
***INCLUDE ZMM_RPT_WU_DEMO_O01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_9100 OUTPUT.
SET PF-STATUS 'ZST01'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SET_INITIAL_SCREEN OUTPUT
*&---------------------------------------------------------------------*
MODULE set_initial_screen OUTPUT.
DATA: lt_exclude TYPE ui_functions,
ls_exclude TYPE ui_func.
DATA: ls_stable TYPE lvc_s_stbl.
CLEAR ls_stable.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
*排除打印按钮
ls_exclude = cl_gui_alv_grid=>mc_fc_print .
APPEND ls_exclude TO lt_exclude.
*排除添加、删除、插入、复制按钮
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row .
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row .
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy .
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut .
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row .
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row .
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row .
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste .
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row .
APPEND ls_exclude TO lt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo .
APPEND ls_exclude TO lt_exclude.
IF go_container IS INITIAL.
CREATE OBJECT go_container
EXPORTING
container_name = 'CONTAINER1'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CREATE OBJECT go_alv
EXPORTING
i_parent = go_container.
IF go_event_handler IS INITIAL.
CREATE OBJECT go_event_handler.
SET HANDLER go_event_handler->handle_hotspot_click FOR go_alv.
SET HANDLER go_event_handler->handle_toolbar FOR go_alv.
SET HANDLER go_event_handler->after_user_command FOR go_alv.
ENDIF.
CALL METHOD go_alv->set_table_for_first_display
EXPORTING
i_buffer_active = space
i_bypassing_buffer = space
is_layout = gs_layout
it_toolbar_excluding = lt_exclude
i_default = 'X'
i_save = 'A'
CHANGING
it_outtab = gt_item
it_fieldcatalog = gt_fieldcat.
ELSE.
CLEAR ls_stable.
ls_stable-row = 'X'.
CALL METHOD go_alv->refresh_table_display
EXPORTING
i_soft_refresh = 'X'
is_stable = ls_stable.
ENDIF.
CALL METHOD go_alv->set_ready_for_input( EXPORTING i_ready_for_input = 1 ).
ENDMODULE.
- ZMM_RPT_WU_DEMO_I01
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9100 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_9100 INPUT.
CALL METHOD go_alv->check_changed_data.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'SAVE'.
PERFORM frm_save_data.
WHEN 'RELOAD' OR space."回车
PERFORM frm_get_data.
ENDCASE.
CALL METHOD go_alv->check_changed_data.
CLEAR ls_stable.
ls_stable-row = 'X'.
CALL METHOD go_alv->refresh_table_display
EXPORTING
is_stable = ls_stable.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form frm_save_data
*&---------------------------------------------------------------------*
FORM frm_save_data .
MESSAGE '数据保存成功' TYPE 'I'.
ENDFORM.
- 自定义状态栏

- 9100屏幕为手动创建绘制,9102子屏幕由程序代码自动生成。

- 最后看一下效果
点击执行。

选择画面输入参数后回车。

全选后点击保存


4251

被折叠的 条评论
为什么被折叠?



