abap实现报表还比较easy,但abap smartforms 实现单据再加上要有分页对于我来说可愁大了,什么都不会,网上有讲的挺细致的,但还是实现不来,问经理他让我慢慢研究,无奈,学吧……
下面是实现步骤,不仅不完善,而且肯定有问题,希望大鸟指正:
单据要求:
http://blog.sina.com.cn/s/blog_69f0481901015hro.html
实现步骤:(1)在创建smartforms的form之前建立段落样式,字体样式等:
(2)创建smartforms的form表格
(3)在表格接口———》表
(4)定义全局变量
在初始化中
DESCRIBE TABLE GTD_ITEM LINES G_TOTALLINES.//获取整个table中数据列表中总的行数
TABLES:EKKO,EKPO,EKET,MAKT.//用于金额和数量的显示,因为他有些参考表,不能直接显示,不用这种方法可以在货币数量字段中新定义一些货币数量字段。
(5)在%page新页面上建立如图所示的结构:
三个文件夹分别表示:单据名称,table的头部信息,还有单据头部信息,可以分别加上各自的样式
(6)在mian中建立如图的结构
1、%LOOP1表头循环
设置:数据-〉loop循环-〉操作数:GTD_HEADER into GTH_HEADER
作用:循环表头内表中的数据,每次打印一个凭证的行项目数据。由于内表在这里不能有工作区,因此将每个表头数据放置到另外的工作区。如图:
2、%LOOP2循环明细数据,统计单张凭证行数
设置:
作用:由于在打印每张凭证及行项目之前,需要知道该凭证的总页数,因此需要首先计算gtd_ITEMS内表中有多少条当前凭证的行记录数。
3.统计总页数:
4.%loop3循环明细数据,
记录单张凭证数和积累行数:
5.明细模板
根据纸张要求设置它的宽度和显示高度还有根据要显示的数据列出表格数量和每格宽度高度。
在文本中写入变量:
注意:在设置金额时,须将变量加个(c),变成字符串形式,否则显示时候会不齐。
如图:
6.计算当前页:
7.记录空行:
8.空数据条目循环:where条件为空
作用:循环内表GTD_BLANKS,次数为内表中的记录数,即空行数,打印输出空行。
空数据条目循环模板设置要与前面的明细模板一只
主窗口的高度必须等于你需要的高度,不要多,也不要少,在本例中,高度为10行
9.强制分页:
一般属性——>转到新页
条件:
WINDOW1中模板设置一下行与列的值就行了,很简单,如图所示:
差点忘了一点,就是上面的清空数据一定要有:
清空数据才能保证数据经过循环后达到想要的值
最后实现效果:
本例中g_line1和g_page可以不设,设置是为了其他功能,想实现简单的单据完全可以不设置。
下面是调用程序:
*&---------------------------------------------------------------------*
*& Report
*&
*
*
*
*
*&---------------------------------------------------------------------*
REPORT
TABLES:EKKO,EKPO,EKET,MAKT.
DATA: GTD_DATA TYPE STANDARD TABLE OF ZMM_TEST01,
DATA: GWK_FORMNAME TYPE STXFTXT-FORMNAME,
DATA:GTD_HEADER TYPE STANDARD TABLE OF ZMM_TESTHEADER01,
DATA:GTD_ITEM TYPE STANDARD TABLE OF ZMM_TESTITEM01,
DATA:LTD_HEADER TYPE STANDARD TABLE OF ZMM_TESTHEADER01,
*--------------------------------------------------------------------------*
*
*--------------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
START-OF-SELECTION.
FORM SUB_GET_DATA .
SELECT
SELECT
SELECT
ENDFORM.
FORM SUB_PRINT.
ENDFORM.
http://blog.csdn.net/yuqinying112/article/details/8448319