[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
相关推荐
Henry-SAP19 小时前
SAP MMBE跨工厂库存层级展示解析
人工智能·云原生·sap·erp
Henry-SAP1 天前
SAP PP核心引擎计划策略业务解析
人工智能·云原生·sap·erp
snpgroupcn4 天前
跨国企业SAP升级解决方案(上篇):难点在哪,推广策略怎么定
sap
slacker-kian13 天前
[实践]-让 SAP 工程 Skill 脱离 opencode跑在自定义Agent 上
ai·llm·sap·agent·abap·adt·opencode
爱喝水的鱼丶13 天前
SAP-ABAP:MM 模块供应商主数据开发:字段扩展、分级管控与同步接口开发
开发语言·性能优化·接口·sap·abap·增强·经验交流
slacker-kian14 天前
本地大模型 + 自建 MCP Server + SAP OData:让 LLM 代理 SAP 业务操作
大模型·llm·sap·agent·mcp·odata
爱喝水的鱼丶15 天前
SAP-ABAP:SAP 权限控制深度解析:自定义程序与标准事务码的边界与协同
性能优化·sap·abap·权限·开发交流·交流学习
爱喝水的鱼丶17 天前
SAP-ABAP:MM 模块库存管理开发:出入库增强、批次管理与库存盘点功能开发
性能优化·sap·abap·增强·开发运维·经验交流·mm模块
goyeer17 天前
20.[SAP ABAP] DATA与TYPES异同
sap·abap·fico·fi·co·mm
爱喝水的鱼丶18 天前
SAP-ABAP:SAP MM 模块物料主数据批量导入与增强开发:字段扩展、校验逻辑与批量导入工具开发
开发语言·性能优化·sap·abap·增强·经验交流·mm