一 最终界面
输入字段定义:
字段名 |
字段描述 |
参考字段 |
备注 |
|
工厂 |
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 的其他类型另行介绍);
- 最后点击“ 保存 ”
2. 创建程序的时候会让选择一个开发类,这里因为我要传到测试系统,所以选了一个事先已经存在的开发类(自己事先创建的Package)而非本地对象,如图 2 所示。
3.要传输到测试系统还需要一个CTS (传输号),如图 3 所示,创建一个CTS,
4.注意,创建请求的“短描述”一定要有意义,最好 写上功能 版本 和 日期 时间。如图4所示。维护好短描述,点击保存按钮,返回到传输号请求,如图 5,这样 CTS(传输号)就建好了,之后我们的操作保存时都要保存到这个传输号中。
5.经过以上操作后,会直接跳到编写程序代码界面,如图 6 所示。在这里我们可以打开左边的导航,如图7所示,此时,只有一个名为ZMMZRPOLIST_B1的空程序,我们还可以切换到 package,查看我们创建的程序是否包含在之前指定的开发类,如图 8 所示。
现在要真正的编写程序了!!
(二)代码实现
1.这里我将程序分成了3个包含(块)来实现:ZMMZRPOLIST_B1_top(存放全局)、ZMMZRPOLIST_B1_e01(存放事件)、ZMMZRPOLIST_B1_f01(存放子程序),如图9,所示。
注意,
- top 一般放全局数据,eo1定义事件、f01定义我们编写的子程序(如,处理数据的程序、显示数据的程序等)
- 书写顺序(最好)top → e01→f01
2.双击 TOP,因为现在系统中不存在对应TOP对象,所以会有个提示框询问是否创建,此时选择 “是” ,如图10 所示;
选择是之后,会先让我们设置TOP属性,只需要维护Title和Status就好(有没有注意到type自动选择了INCLUDE程序),如图11所示。
看,当我们保存时,这里又要我们选择开发类了,选择的还是和之前一样就行。具体如图12所示。
同样的还要选择传输号,如图12所示,因为之前就创建了此传输号并且没有被释放发布,所以默认的还是这个号,我们这里点击就好。
好吧,现在才是开始叙写第一个包含
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