1、sap smartforms采购订单单据步骤单据要求:实现步骤:(1)在创建smartforms的form之前建立段落样式,字体样式等:(2)创建smartforms的form表格(3)在表格接口表 中建立两个表接口(),类型为like,后面的参考打印为se11中建立的表结构,可以自行设定。(4)定义全局变量在初始化中DESCRIBE TABLE GTD_ITEM LINES G_TOTALLINES./获取整个table中数据列表中总的行数TABLES:EKKO,EKPO,EKET,MAKT./用于金额和数量的显示,因为他有些参考表,不能直接显示,不用这种方法可以在货币数量字段中新定义一些货
2、币数量字段。(5)在%page新页面上建立如图所示的结构:三个文件夹分别表示:单据名称,table的头部信息,还有单据头部信息,可以分别加上各自的样式(6)在mian中建立如图的结构1、%LOOP1表头循环 设置:数据-loop循环-操作数:GTD_HEADER into GTH_HEADER 作用:循环表头内表中的数据,每次打印一个凭证的行项目数据。由于内表在这里不能有工作区,因此将每个表头数据放置到另外的工作区。如图:2、%LOOP2循环明细数据,统计单张凭证行数 设置:作用:由于在打印每张凭证及行项目之前,需要知道该凭证的总页数,因此需要首先计算gtd_ITEMS内表中有多少条当前凭证的
3、行记录数。3.统计总页数:4.%loop3循环明细数据,记录单张凭证数和积累行数:5.明细模板根据纸张要求设置它的宽度和显示高度还有根据要显示的数据列出表格数量和每格宽度高度。在文本中写入变量:注意:在设置金额时,须将变量加个(c),变成字符串形式,否则显示时候会不齐。如图:6.计算当前页:7.记录空行:8.空数据条目循环:where条件为空作用:循环内表GTD_BLANKS,次数为内表中的记录数,即空行数,打印输出空行。空数据条目循环模板设置要与前面的明细模板一只主窗口的高度必须等于你需要的高度,不要多,也不要少,在本例中,高度为10行 x 11mm = 110mm,不一致分页效果将出现两页
4、数据在一页而分页正常,导致错误。9.强制分页:一般属性转到新页条件:WINDOW1中模板设置一下行与列的值就行了,很简单,如图所示:差点忘了一点,就是上面的清空数据一定要有:清空数据才能保证数据经过循环后达到想要的值最后实现效果:本例中g_line1和g_page可以不设,设置是为了其他功能,想实现简单的单据完全可以不设置。下面是调用程序:*&-*& Report ZMM_TEST04*&* Program : 采购订单打印* Author : 杨路* Date : 2011/8/4* Description : 打印采购订单*&-*REPORT ZMM_TEST04.TABLES:EKKO,
5、EKPO,EKET,MAKT.DATA: GTD_DATA TYPE STANDARD TABLE OF ZMM_TEST01, GTH_DATA TYPE ZMM_TEST01.DATA: GWK_FORMNAME TYPE STXFTXT-FORMNAME, GWK_FNAME TYPE RS38L_FNAM.DATA:GTD_HEADER TYPE STANDARD TABLE OF ZMM_TESTHEADER01, GTH_HEADER TYPE ZMM_TESTHEADER01.DATA:GTD_ITEM TYPE STANDARD TABLE OF ZMM_TESTITEM01,
6、 GTH_ITEM TYPE ZMM_TESTITEM01.DATA:LTD_HEADER TYPE STANDARD TABLE OF ZMM_TESTHEADER01, LTH_HEADER TYPE ZMM_TESTHEADER01, LTD_ITEM TYPE STANDARD TABLE OF ZMM_TESTITEM01, LTH_ITEM TYPE ZMM_TESTITEM01.*-* selection-screen*-*SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.SELECT-OPTIONS: S_
7、BSART FOR EKKO-BSART, S_AEDAT FOR EKKO-AEDAT, S_EBELN FOR EKKO-EBELN, S_EKORG FOR EKKO-EKGRP, S_EKGRP FOR EKKO-EKORG, S_LIFNR FOR EKKO-LIFNR. SELECTION-SCREEN END OF BLOCK B1.*-* START-OF-SELECTION*-*START-OF-SELECTION. PERFORM SUB_GET_DATA. PERFORM SUB_PRINT.FORM SUB_GET_DATA .SELECT EKKOLIFNR EKKO
8、EKORG EKPOWERKS EKKOEBELN EKKOAEDAT INTO CORRESPONDING FIELDS OF TABLE GTD_HEADER FROM EKKO INNER JOIN EKPO ON EKKOEBELN = EKPOEBELN WHERE EKKOBSART IN S_BSART AND EKKOAEDAT IN S_AEDAT AND EKKOEBELN IN S_EBELN AND EKKOEKORG IN S_EKORG AND EKKOEKGRP IN S_EKGRP AND EKKOLIFNR IN S_LIFNR.SELECT EKKOEBEL
9、N EKPOEBELP MAKTMATNR MAKTMAKTX EKPOMENGE EKPOMEINS EKPONETPR EKKOWAERS EKETEINDT INTO CORRESPONDING FIELDS OF TABLE GTD_ITEM FROM EKKO INNER JOIN EKPO ON EKKOEBELN = EKPOEBELN LEFT JOIN EKET ON EKPOEBELN = EKETEBELN AND EKPOEBELP = EKETEBELP LEFT JOIN MAKT ON EKPOMATNR = MAKTMATNR WHERE EKKOBSART I
10、N S_BSART AND EKKOAEDAT IN S_AEDAT AND EKKOEBELN IN S_EBELN AND EKKOEKORG IN S_EKORG AND EKKOEKGRP IN S_EKGRP AND EKKOLIFNR IN S_LIFNR.SELECT EKKOLIFNR EKKOEKORG EKPOWERKS EKKOEBELN EKKOAEDAT EKPOEBELP MAKTMATNR MAKTMAKTX EKPOMENGE EKPOMEINS EKPONETPR EKKOWAERS EKETEINDT into table GTD_DATA FROM EKK
11、O INNER JOIN EKPO ON EKKOEBELN = EKPOEBELN LEFT JOIN EKET ON EKPOEBELN = EKETEBELN AND EKPOEBELP = EKETEBELP LEFT JOIN MAKT ON EKPOMATNR = MAKTMATNR WHERE EKKOBSART IN S_BSART AND EKKOAEDAT IN S_AEDAT AND EKKOEBELN IN S_EBELN AND EKKOEKORG IN S_EKORG AND EKKOEKGRP IN S_EKGRP AND EKKOLIFNR IN S_LIFNR
12、.ENDFORM.FORM SUB_PRINT. CLEAR: LTD_HEADER, LTD_ITEM. LOOP AT GTD_DATA INTO GTH_DATA . READ TABLE GTD_HEADER INTO GTH_HEADER WITH KEY EBELN = GTH_DATA-EBELN. IF SY-SUBRC = 0. MOVE-CORRESPONDING GTH_HEADER TO LTH_HEADER. COLLECT LTH_HEADER INTO LTD_HEADER. CLEAR LTH_HEADER. ENDIF. READ TABLE GTD_ITEM
13、 INTO GTH_ITEM WITH KEY EBELN = GTH_DATA-EBELN EBELP = GTH_DATA-EBELP. IF SY-SUBRC = 0. MOVE-CORRESPONDING GTH_ITEM TO LTH_ITEM. COLLECT LTH_ITEM inTO LTD_ITEM. CLEAR LTH_ITEM. ENDIF. ENDLOOP. CALL FUNCTION SSF_FUNCTION_MODULE_NAME EXPORTING FORMNAME = ZMM_TEST04 IMPORTING FM_NAME = GWK_FNAME. CALL
14、FUNCTION GWK_FNAME TABLES GTD_HEADER = LTD_HEADER header table GTD_ITEM = LTD_ITEM item table EXCEPTIONS FORMATTING_ERROR = 1 INTERNAL_ERROR = 2 SEND_ERROR = 3 USER_CANCELED = 4 OTHERS = 5. 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. SUB_PRINT新到公司用sap,开始学习sap abap,什么都不太会,做了好几天才搞出来个单据和一个报表,将过程写出来分享,希望高手指出不足,我会非常之感激。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1