[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
相关推荐
ChampaignWolf13 小时前
在 SAP S/4HANA 内部基于 ICF Handler 从零实现 ABAP MCP Server:架构、代码与踩坑实录
c++·架构·sap·abap·mcp
slacker-kian14 小时前
[实践]-本地大模型 + MCP + Agent 对接 SAP OData API 实现Web Chart APP
ai·llm·sap·agent·mcp·odata·chart bot
爱喝水的鱼丶19 小时前
SAP-ABAP:隐式/显式增强开发规范与避坑指南:10 类典型错误与运维方案
运维·性能优化·sap·abap·增强·经验交流
ChampaignWolf1 天前
Joule Unit Test 深度集成:ABAP 单元测试的 AI 六件套全解析
人工智能·单元测试·sap·abap·joule·单元测试ai
slacker-kian2 天前
[实践]-本地大模型Agent使用自定义MCP服务实现与SAP系统集成(二)
ai·llm·sap·agent·mcp·odata·qwen-agent
ChampaignWolf2 天前
SAP 官方 ABAP MCP Server 正式落地:ABAP 开发进入 Agentic AI 时代
人工智能·sap·abap·人工智能ai·mcp
Henry-SAP3 天前
SAP PP 反冲机制业务解析
人工智能·云原生·sap·erp
荀彧原名苟或3 天前
SAP 执行 CMD命令(GUI_EXEC 执行电脑本机命令、SXPG_COMMAND_EXECUTE函数执行服务器上的外部程序)<转载>
运维·服务器·sap·abap
爱喝水的鱼丶4 天前
SAP-ABAP: BAdI 开发规范与避坑指南:10 类典型错误与运维方案
运维·性能优化·sap·abap·增强·经验交流·开发交流
Henry-SAP6 天前
GPT-6Astra开启AI自主执行新时代
人工智能·云原生·sap·erp