货源清单批量查询报表
批量查询货源清单(Source List)是企业采购和物料管理中的常见需求,标准事务代码 ME03 和 ME0M 虽然可以用,但往往不满足用户的字段筛选和导出需求,所以我们可以自定义事务码开发一个批量查询货源清单报表
业务目的:根据选择屏幕的筛选条件,使用ALV报表显示SAP系统已维护的货源清单信息
效果展示

输入指定筛选条件,点击
执行按钮,效果如下所示:

完整代码如下所示
主程序(zrm_source_list)
*&---------------------------------------------------------------------*
*& Report ZRM_SOURCE_LIST
*&---------------------------------------------------------------------*
REPORT zrm_source_list.
INCLUDE zrm_source_list_top. " 数据定义
INCLUDE zrm_source_list_f01. " 子例程
*----------------------------------------------------------------------*
* DESC: INITIALIZATION 事件
*----------------------------------------------------------------------*
INITIALIZATION.
*----------------------------------------------------------------------*
* DESC: AT SELECTION-SCREEN OUTPUT 事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*----------------------------------------------------------------------*
* DESC: AT SELECTION-SCREEN 事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
*----------------------------------------------------------------------*
* DESC: START-OF-SELECTION 事件
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM frm_get_data. " 获取数据
" 检查数据是否为空
IF gt_item IS INITIAL.
MESSAGE '不存在滿足條件的數据,請确認選擇條件' TYPE 'I'.
ENDIF.
*---------------------------------------------------------------------*
* END-OF-SELECTION 事件
*---------------------------------------------------------------------*
END-OF-SELECTION.
PERFORM frm_display_data. " ALV呈现数据
INCLUDE程序(zrm_source_list_top)
*&---------------------------------------------------------------------*
*& 包含 ZRM_SOURCE_LIST_TOP
*&---------------------------------------------------------------------*
TABLES: eord.
* 選擇屏幕
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_matnr FOR eord-matnr, " Material
s_werks FOR eord-werks, " Plant
s_lifnr FOR eord-lifnr, " Vendor
s_ekorg FOR eord-ekorg, " Purchasing Org
s_vdatu FOR eord-vdatu, " Valid from
s_bdatu FOR eord-bdatu. " Valid to
SELECTION-SCREEN END OF BLOCK b01.
* 自定義數据類型
TYPES: BEGIN OF ty_item,
matnr TYPE eord-matnr, " Material
werks TYPE eord-werks, " Plant
lifnr TYPE eord-lifnr, " Vendor
ekorg TYPE eord-ekorg, " Purchasing Org
vdatu TYPE eord-vdatu, " Valid from
bdatu TYPE eord-bdatu, " Valid to
flifn TYPE eord-flifn, " 是否固定供應商
notkz TYPE eord-notkz, " 是否凍結供應商
ernam TYPE eord-ernam, " 創建人
erdat TYPE eord-erdat, " 維護時間
END OF ty_item.
* 定義內表和結構體變量
DATA: gs_item TYPE ty_item, " 結构体變量(工作區)
gt_item TYPE STANDARD TABLE OF ty_item. " 內表
* ALV參數定義
DATA: gs_layout TYPE lvc_s_layo, " 用于定義ALV表單的相關格式、屬性
gs_fcat TYPE lvc_s_fcat, " 字段目錄工作區
gt_fcat LIKE TABLE OF gs_fcat. " 字段目錄內表
INCLUDE程序(zrm_source_list_f01)
*&---------------------------------------------------------------------*
*& 包含 ZRM_SOURCE_LIST_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
* 獲取數據
*----------------------------------------------------------------------*
FORM frm_get_data.
SELECT matnr
werks
lifnr
ekorg
vdatu
bdatu
flifn
notkz
ernam
erdat
FROM eord
INTO CORRESPONDING FIELDS OF TABLE gt_item
WHERE matnr IN s_matnr
AND werks IN s_werks
AND lifnr IN s_lifnr
AND ekorg IN s_ekorg
AND vdatu IN s_vdatu
AND bdatu IN s_bdatu.
ENDFORM. " frm_get_data
*&---------------------------------------------------------------------*
*& Form frm_display_data
*&---------------------------------------------------------------------*
* ALV報表呈現
*----------------------------------------------------------------------*
FORM frm_display_data.
PERFORM frm_alv_set_fields.
" 調用函數展示ALV數据
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
it_fieldcat_lvc = gt_fcat " 設置ALV列屬性
is_layout_lvc = gs_layout " 設置ALV布局
TABLES
t_outtab = gt_item " 內表數据
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " frm_display_data
*&---------------------------------------------------------------------*
*& Form frm_alv_set_fields
*&---------------------------------------------------------------------*
* ALV設置字段
*----------------------------------------------------------------------*
FORM frm_alv_set_fields.
CLEAR: gs_fcat,
gt_fcat,
gs_layout.
* 設置行的屬性(ALV界面格式)
gs_layout-zebra = 'X'. " 斑馬條紋顯示
gs_layout-cwidth_opt = 'X'. " 优化列寬設置
* ALV字段處理宏
DEFINE catalog.
gs_fcat-fieldname = &1. " 設置要輸出的表格列的值,在內表中定義的字段名(必須大寫)
gs_fcat-fix_column = &2. " 固定列
gs_fcat-ref_table = &3.
gs_fcat-edit = &4.
gs_fcat-colddictxt = 'L'.
gs_fcat-scrtext_l = &5. " 設置要輸出的表格列的列名,即ALV報表顯示的列名
gs_fcat-ref_field = &6.
gs_fcat-outputlen = &7.
gs_fcat-emphasize = &8. " 列顏色
gs_fcat-hotspot = &9. " 熱點
append gs_fcat to gt_fcat.
END-OF-DEFINITION.
* &1 &2 &3 &4 &5 &6 &7 &8 &9
catalog:
'MATNR' 'X' '' '' 'Material' '' '' '' '',
'WERKS' 'X' '' '' 'Plant' '' '' '' '',
'LIFNR' 'X' '' '' 'Vendor' '' '' '' '',
'EKORG' '' '' '' 'Purchasing Org' '' '' '' '',
'VDATU' '' '' '' 'Valid from' '' '' '' '',
'BDATU' '' '' '' 'Valid to' '' '' '' '',
'FLIFN' '' '' '' '是否固定供應商' '' '' '' '',
'NOTKZ' '' '' '' '是否凍結供應商' '' '' '' '',
'ERNAM' '' '' '' '創建人' '' '' '' '',
'ERDAT' '' '' '' '維護時間' '' '' '' ''.
ENDFORM. " frm_alv_set_fields