需求分析:
1、具体需求
本《使用Include输出订单列表》有如下需求:
- 从订单表中获得订单信息并按图示输出;
- 订单列表按订单编号升序输出,同时输出订单编号时不保留前导0。
其中列表输出效果如图。
2、开发分析
要达成本实践目标,分析有如下:
- 此实践也可以通过一般的方式在一个程序中实现页眉和数据的输出;
- 在本实践中,将页眉输出通过Include(包含)程序进行定义,如此此页眉可在不同的程序中重复使用。
实践步骤:
本实践将会需要建立2个程序,一个是要在其他程序中包含的Include程序,另一个是输出列表数据的程序;2个程序都可以通过程序编辑器(SE38)即可完成,编写的代码将有如下几部分组成,按开发人员风格不同,其组成部分并非强制一致。
1、建立Include
在程序编辑器的初始界面,输入程序名称(本实例为ZU0504_PAGE_HEADER)后,点击创建,将会出现设定程序属性的界面,从界面中输入标题,并选择类型为“I INCLUDE程序”程序,如图,完成后点击保存。
然后将进入源代码编辑界面,详细代码如下:
*&---------------------------------------------------------------------*
*& INCLUDE ZU0504_PAGE_HEADER
*&---------------------------------------------------------------------*
TOP-OF-PAGE.
WRITE:/5 '订单列表', 60 '页码:', (3) sy-pagno.
WRITE:/5(70) sy-uline.
WRITE:/5(4) '序号', (8) '订单编号',
(8) '订单日期', (6) '客户',
(20) '客户名称', (8) '城市', (8) '所在地区'.
WRITE:/5(70) sy-uline.
如上代码相当于把主程序中页眉输出部分的内容,放到此Include中;在Include的源代码中也可以使用主程序中的变量。
完成后激活,则建立了一个子程序。
2、程序声明
新建一程序zu0504_order_list_include以完成本实践需求,程序声明部分的代码如下:
REPORT zu0504_order_list_include NO STANDARD PAGE HEADING
LINE-SIZE 100 LINE-COUNT 80.
通过如上代码,设定了此程序输出不使用标准页眉,页面宽度100个字符,页面高度为80行。
3、对象定义
对象定义部分的代码如下:
*****对象定义
DATA:BEGIN OF order_list_stru,
orderid TYPE ztorders_h-orderid,
orderdate TYPE ztorders_h-orderdate,
customerid TYPE ztcustomer-customerid,
customername TYPE ztcustomer-customername,
city TYPE ztcustomer-city,
region TYPE ztcustomer-region,
END OF order_list_stru.
通过如上代码定义了一个名称为order_list_stru的结构,以在后续获取和输出数据部分中,存储和输出记录的值。
4、输出页眉
输出页眉部分的代码如下:
*&----------------------------------------------------------------------*
*& 输出页眉
*&----------------------------------------------------------------------*
INCLUDE zu0504_page_header.
通过INCLUDE关键字,将INCLUDE程序zu0504_page_header包含到此程序中,由此实现页眉的输出。
5、获得和输出数据
获得和输出数据部分的代码如下:
*&----------------------------------------------------------------------*
*& START-OF-SELECTION
*&----------------------------------------------------------------------*
START-OF-SELECTION.
*****获取和输出订单数据
SELECT oh~orderid oh~orderdate ct~customerid ct~customername ct~city ct~region
INTO order_list_stru
FROM ( ztorders_h AS oh
INNER JOIN ztcustomer AS ct ON ct~customerid = oh~customerid )
ORDER BY orderid.
SHIFT order_list_stru-orderid LEFT DELETING LEADING '0'.
WRITE:/5(4) sy-dbcnt, (8) order_list_stru-orderid,
(8) order_list_stru-orderdate, (6) order_list_stru-customerid,
(20) order_list_stru-customername, (8) order_list_stru-city,
(8) order_list_stru-region.
ENDSELECT.
如上代码,通过SELECT关键字将数据从ztorders_h和ztcustomer中逐条获取数据并存储到结构order_list_stru中,然后通过SHIFT关键字对订单编号的前导0去除后,按需求通过WRITE输出。
将如上2~5部分的代码顺序合并后,则得到本需求本程序的实现代码。
本实践小结:包含程序
包含(Include)程序也是一种ABAP程序,是类型为I的不可执行的程序,作为代码复用技术在SAP的应用也是非常广泛。主要应用于:1)将大型程序分为不同的部分进行维护,2)多个程序中相同的代码段;由此实现代码的协同开发和提高代码的质量和效率。