[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
相关推荐
SAP_奥维奥科技18 小时前
化工企业SAP ERP怎么选?从第一次没做成,到连续做到第八期
sap
Henry-SAP4 天前
具身智能新突破:开源生态与IPO热潮
人工智能·云原生·sap·erp
Henry-SAP6 天前
SAP引领ERP智能化转型
人工智能·云原生·sap·erp
爱喝水的鱼丶8 天前
SAP-ABAP:BAPI 基础认知:SAP 标准业务对象接口的核心逻辑与调用入门
信息可视化·性能优化·sap·abap·bapi·开发交流·交流学习
Henry-SAP8 天前
SAP S/4HANA引领物流ERP新生态
人工智能·云原生·sap·erp
rm -rf * && haha.sh9 天前
【ABAP】SUBMIT 用法详解
sap·abap·abap开发
爱喝水的鱼丶10 天前
SAP-ABAP:性能优化效果验证与回归测试:优化前后性能对比、业务逻辑兼容性校验方案
性能优化·sap·abap·回归测试·开发交流·交流学习
Henry-SAP10 天前
SAP MRP类型如何影响计划订单生成
人工智能·云原生·sap·erp
爱喝水的鱼丶11 天前
SAP-ABAP:接口与报表场景专项优化:RFC/ODATA 接口、ALV 报表的性能提升方案
运维·性能优化·接口·sap·abap·rfc·经验交流