[SAP ABAP] ALV报表练习5

货源清单批量查询报表

批量查询货源清单(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
相关推荐
Harrison Ben8 小时前
(原创)SAP FI自动入账奥义:FBKP FBKA FBKF
运维·sap·sap fico·sap运维·sap 实施
xiao贱贱11 小时前
SAP ABAP OPEN SQL(应用实战大全)
sap·abap·opensql
爱喝水的鱼丶4 天前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
snpgroupcn5 天前
SAP ECC → S/4HANA 迁移的工程化路径:范围建模、规则复用与短停机窗口切换
sap·sap实施商
yang982268 天前
S4 CLOUD
sap
爱喝水的鱼丶11 天前
SAP-ABAP:S/4 HANA ABAP 新特性入门:与 ECC ABAP 的核心差异、架构优势与学习路径规划
运维·数据库·性能优化·sap·abap·hana·开发交流
山茶花开时。15 天前
[SAP ABAP] SAP设置定时执行任务Job
sap·sap abap
SAP_LO15 天前
对检验批次做决策后物料状态并没有改变的处理方法
sap·aq11·bs02·检验批
SAP_奥维奥科技15 天前
云栖大会|奥维奥履约计划智能体获SAP行业AI共创优选方案
sap·云栖大会
slacker-kian17 天前
SAP On-Premise 部署环境下 ABAP 开发对接 AI Agent 方案探讨
人工智能·ai·sap·agent·abap·mcp·odata