SAP-ABAP-创建的第一个ALV报表——采购订单查询

一 最终界面

输入字段定义:

字段名

字段描述

参考字段

备注

 

工厂

EKKO-WERKS

必输项

 

供应商

EKKO-LIFNR

 

 

物料号

EKPO-MATNR

 

二 用到的表和字段

Table:

TABLE NAME

EKKO

EKPO

Field:

输出字段名

参考DB

参考字段

类型

长度

备注

公司代码

EKKO

BUKRS

 

 

 

工厂

EKPO

WERKS

 

 

 

供应商

EKKO

LIFNR

 

 

 

采购订单类型

EKKO

BSART

 

 

 

采购组织

EKKO

EKORG

 

 

 

采购组

EKKO

EKGRP

 

 

 

币别

EKKO

WAERS

 

 

 

采购订单号

EKPO

EBELN

 

 

 

采购项次

EKPO

EBELP

 

 

 

物料号

EKPO

MATNR

 

 

 

库存地点

EKPO

LGORT

 

 

 

采购数量

EKPO

MENGE

 

 

 

采购单价

EKPO

NETPR

 

 

 

三 步骤

(一)写代码的前期工作

1.通过T-CODE SE38 进入ABAP编辑器,创建程序。如图1 所示 ,

  • “程序”的后边填写要创建的程序名称(注意名字的命名要有意义,遵守命名规则);
  • “子对象”中选择“源程序”,之后选择“创建”;
  • 进入 ABAP:程序属性 ,设置刚刚新增程序的属性。在"Title"的位置填写程序的介绍,或者说是一个程序的说明;
  • “Attributes”中的 "Type "选择 “可执行程序”,“Status” 类型选择“测试程序”(type、Status 的其他类型另行介绍);
  • 最后点击“ 保存 ”
图1-ABAP编辑器创建程序

2. 创建程序的时候会让选择一个开发类,这里因为我要传到测试系统,所以选了一个事先已经存在的开发类(自己事先创建的Package)而非本地对象,如图 2 所示。                      

图2-选择程序的开发类

3.要传输到测试系统还需要一个CTS (传输号),如图 3 所示,创建一个CTS,

图3-创建CTS

4.注意,创建请求的“短描述”一定要有意义,最好 写上功能 版本 和 日期 时间。如图4所示。维护好短描述,点击保存按钮,返回到传输号请求,如图 5,这样 CTS(传输号)就建好了,之后我们的操作保存时都要保存到这个传输号中。

图4 5-创建请求(CTS描述)
图5 - 保存CTS号

5.经过以上操作后,会直接跳到编写程序代码界面,如图 6 所示。在这里我们可以打开左边的导航,如图7所示,此时,只有一个名为ZMMZRPOLIST_B1的空程序,我们还可以切换到 package,查看我们创建的程序是否包含在之前指定的开发类,如图 8 所示。

图7 - 显示导航
图8 - 查看是否程序包含在开发类

现在要真正的编写程序了!!

(二)代码实现

1.这里我将程序分成了3个包含(块)来实现:ZMMZRPOLIST_B1_top(存放全局)、ZMMZRPOLIST_B1_e01(存放事件)、ZMMZRPOLIST_B1_f01(存放子程序),如图9,所示。

注意

  • top 一般放全局数据,eo1定义事件、f01定义我们编写的子程序(如,处理数据的程序、显示数据的程序等)
  • 书写顺序(最好)top → e01→f01
图9 - 定义包含

2.双击 TOP,因为现在系统中不存在对应TOP对象,所以会有个提示框询问是否创建,此时选择 “是” ,如图10 所示;

  选择是之后,会先让我们设置TOP属性,只需要维护Title和Status就好(有没有注意到type自动选择了INCLUDE程序),如图11所示。

图10 创建 TOP 对象
图11 - 设置TOP属性

看,当我们保存时,这里又要我们选择开发类了,选择的还是和之前一样就行。具体如图12所示。

图12-选择开发类

同样的还要选择传输号,如图12所示,因为之前就创建了此传输号并且没有被释放发布,所以默认的还是这个号,我们这里点击就好。

图 13 -选择传输号

好吧,现在才是开始叙写第一个包含

3.1首先写上主程序名

 REPORT  zmmzrpolist_bln .

3.2 引入表并从表中获取我们要的字段存放到我们新建的临时表中。这里类型为标准表中的数据,最好用“LIKE”声明,如果用type得到的数据可能不全,从而导致之后的数据显示有误。

************************************************************************
* Trables 标准表
************************************************************************
TABLES: ekko,ekpo.

************************************************************************
* Business Data Define
************************************************************************
DATA:BEGIN OF gs_list ,
  bukrs LIKE ekko-bukrs, "公司代码
  werks LIKE ekpo-werks, "工厂
  lifnr LIKE ekko-lifnr, "供应商
  bsart LIKE ekko-bsart, "采购订单类型
  ekorg LIKE ekko-ekorg, "采购组织
  ekgrp LIKE ekko-ekgrp, "采购组
  waers LIKE ekko-waers, "币别
  ebeln LIKE ekpo-ebeln, "采购订单号
  ebelp LIKE ekpo-ebelp, "采购项次
  matnr LIKE ekpo-matnr, "物料号
  lgort LIKE ekpo-lgort, "库存地点
  menge LIKE ekpo-menge, "采购数量
  netpr LIKE ekpo-netpr, "采购单价
  END OF gs_list.

 DATA gt_list LIKE STANDARD TABLE OF gs_list.

详细代码:

*&---------------------------------------------------------------------*
*& Report  ZMMZRPOLIST_B1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*


INCLUDE ZMMZRPOLIST_B1_top.   "全局数据
INCLUDE ZMMZRPOLIST_B1_e01.   "事件
INCLUDE ZMMZRPOLIST_B1_f01.   "子例程
*&---------------------------------------------------------------------*
*&  包括                ZMMZRPOLIST_B1_TOP
*&---------------------------------------------------------------------*

REPORT  zmmzrpolist_b1
       MESSAGE-ID    ZMMZRPOLIST_B1_MES.


************************************************************************
* Trables
************************************************************************
TABLES: ekko,ekpo.

************************************************************************
* Business Data Define
************************************************************************
DATA:BEGIN OF gs_list ,
  bukrs LIKE ekko-bukrs, "公司代码
  werks LIKE ekpo-werks, "工厂
  lifnr LIKE ekko-lifnr, "供应商
  bsart LIKE ekko-bsart, "采购订单类型
  ekorg LIKE ekko-ekorg, "采购组织
  ekgrp LIKE ekko-ekgrp, "采购组
  waers LIKE ekko-waers, "币别
  ebeln LIKE ekpo-ebeln, "采购订单号
  ebelp LIKE ekpo-ebelp, "采购项次
  matnr LIKE ekpo-matnr, "物料号
  lgort LIKE ekpo-lgort, "库存地点
  menge LIKE ekpo-menge, "采购数量
  netpr LIKE ekpo-netpr, "采购单价
  END OF gs_list.

 DATA gt_list LIKE STANDARD TABLE OF gs_list.

DATA: g_data_found TYPE c.

************************************************************************
* ALV Define 定义ALV变量
************************************************************************
TYPE-POOLS:slis."制定alv类型组

DATA:
      gt_fieldcat  TYPE slis_t_fieldcat_alv,  "用于定义ALV列字段相关类型数据,是表字段的整体
      gs_layout     TYPE slis_layout_alv.     "用于定义布局类型数据对象

************************************************************************
* SELECTION-SELECTION 定义选择屏幕输入条件
************************************************************************
SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.

PARAMETERS:   pa_werks  LIKE ekpo-werks  OBLIGATORY MEMORY ID wer . "工厂

SELECT-OPTIONS: so_lifnr FOR ekko-lifnr , "供应商
                so_matnr FOR ekpo-matnr. "物料

SELECTION-SCREEN:END OF BLOCK b1.
*&---------------------------------------------------------------------*
*&  包括                ZMMZRPOLIST_B1_E01
*&---------------------------------------------------------------------*

AT SELECTION-SCREEN.


START-OF-SELECTION.
  PERFORM frm_build_fieldcat.  "处理数据
  PERFORM frm_build_layout.    "布局
  PERFORM frm_get_data.

END-OF-SELECTION.
  PERFORM frm_dispaly_alv.   "alv显示
*&---------------------------------------------------------------------*
*&  包括                ZMMZRPOLIST_B1_F01
*&---------------------------------------------------------------------*



FORM frm_build_fieldcat .

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name     = sy-repid
      i_internal_tabname = 'GS_LIST'
      i_inclname         = 'ZMMZRPOLIST_B1_TOP'
    CHANGING
      ct_fieldcat        = gt_fieldcat
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


ENDFORM.                   "frm_build_fieldcat


*&---------------------------------------------------------------------*
*&      Form  frm_build_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_build_layout.
  gs_layout-colwidth_optimize = 'X'.
ENDFORM.                    "frm_build_layout

*&---------------------------------------------------------------------*
*&      Form  frm_get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_get_data.
  SELECT
       ekko~bukrs ekpo~werks ekko~lifnr ekko~bsart ekko~ekorg
       ekko~ekgrp ekko~waers ekpo~ebeln ekpo~ebelp ekpo~matnr
       ekpo~lgort ekpo~menge ekpo~netpr
       INTO CORRESPONDING FIELDS OF TABLE gt_list
       FROM ekko JOIN ekpo
                  ON ekko~ebeln = ekpo~ebeln
       WHERE werks = pa_werks AND
             lifnr  IN so_lifnr AND
             matnr IN so_matnr.



    IF sy-subrc NE 0.
          "无数据
         g_data_found = ''.
         MESSAGE S001 DISPLAY LIKE 'E'.
         LEAVE LIST-PROCESSING.
         RETURN.
     ELSE.
       g_data_found = 'X'.
    ENDIF.

ENDFORM.                    "frm_get_datas


*&---------------------------------------------------------------------*
*&      Form  frm_dispaly_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_dispaly_alv .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid
      i_grid_title       = text-s02
      it_fieldcat        = gt_fieldcat
      is_layout          = gs_layout
      i_save             = 'A'
    TABLES
      t_outtab           = gt_list
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    " FRM_ALV_DISP

猜你喜欢

转载自blog.csdn.net/Rena_B/article/details/82011531