sap smartforms采购订单单据步骤.docx
《sap smartforms采购订单单据步骤.docx》由会员分享,可在线阅读,更多相关《sap smartforms采购订单单据步骤.docx(18页珍藏版)》请在冰豆网上搜索。
![sap smartforms采购订单单据步骤.docx](https://file1.bdocx.com/fileroot1/2023-2/3/5a522ab8-7b78-4f20-bb16-bb6ab2a3275c/5a522ab8-7b78-4f20-bb16-bb6ab2a3275c1.gif)
sapsmartforms采购订单单据步骤
单据要求:
实现步骤:
(1)在创建smartforms的form之前建立段落样式,字体样式等:
(2)创建smartforms的form表格
(3)在表格接口———》表中建立两个表接口(),类型为like,后面的参考打印为se11中建立的表结构,可以自行设定。
(4)定义全局变量
在初始化中
DESCRIBETABLEGTD_ITEMLINESG_TOTALLINES.//获取整个table中数据列表中总的行数
TABLES:
EKKO,EKPO,EKET,MAKT.//用于金额和数量的显示,因为他有些参考表,不能直接显示,不用这种方法可以在货币数量字段中新定义一些货币数量字段。
(5)在%page新页面上建立如图所示的结构:
三个文件夹分别表示:
单据名称,table的头部信息,还有单据头部信息,可以分别加上各自的样式
(6)在mian中建立如图的结构
1、%LOOP1表头循环
设置:
数据-〉loop循环-〉操作数:
GTD_HEADERintoGTH_HEADER
作用:
循环表头内表中的数据,每次打印一个凭证的行项目数据。
由于内表在这里不能有工作区,因此将每个表头数据放置到另外的工作区。
如图:
2、%LOOP2循环明细数据,统计单张凭证行数
设置:
作用:
由于在打印每张凭证及行项目之前,需要知道该凭证的总页数,因此需要首先计算gtd_ITEMS内表中有多少条当前凭证的行记录数。
3.统计总页数:
4.%loop3循环明细数据,
记录单张凭证数和积累行数:
5.明细模板
根据纸张要求设置它的宽度和显示高度还有根据要显示的数据列出表格数量和每格宽度高度。
在文本中写入变量:
注意:
在设置金额时,须将变量加个(c),变成字符串形式,否则显示时候会不齐。
如图:
6.计算当前页:
7.记录空行:
8.空数据条目循环:
where条件为空
作用:
循环内表GTD_BLANKS,次数为内表中的记录数,即空行数,打印输出空行。
空数据条目循环模板设置要与前面的明细模板一只
主窗口的高度必须等于你需要的高度,不要多,也不要少,在本例中,高度为10行x11mm=110mm,不一致分页效果将出现两页数据在一页而分页正常,导致错误。
9.强制分页:
一般属性——>转到新页
条件:
WINDOW1中模板设置一下行与列的值就行了,很简单,如图所示:
差点忘了一点,就是上面的清空数据一定要有:
清空数据才能保证数据经过循环后达到想要的值
最后实现效果:
本例中g_line1和g_page可以不设,设置是为了其他功能,想实现简单的单据完全可以不设置。
下面是调用程序:
*&---------------------------------------------------------------------*
*&ReportZMM_TEST04
*&
*Program:
采购订单打印
*Author:
杨路
*Date:
2011/8/4
*Description:
打印采购订单
*&---------------------------------------------------------------------*
REPORTZMM_TEST04.
TABLES:
EKKO,EKPO,EKET,MAKT.
DATA:
GTD_DATATYPESTANDARDTABLEOFZMM_TEST01,
GTH_DATATYPEZMM_TEST01.
DATA:
GWK_FORMNAMETYPESTXFTXT-FORMNAME,
GWK_FNAMETYPERS38L_FNAM.
DATA:
GTD_HEADERTYPESTANDARDTABLEOFZMM_TESTHEADER01,
GTH_HEADERTYPEZMM_TESTHEADER01.
DATA:
GTD_ITEMTYPESTANDARDTABLEOFZMM_TESTITEM01,
GTH_ITEMTYPEZMM_TESTITEM01.
DATA:
LTD_HEADERTYPESTANDARDTABLEOFZMM_TESTHEADER01,
LTH_HEADERTYPEZMM_TESTHEADER01,
LTD_ITEMTYPESTANDARDTABLEOFZMM_TESTITEM01,
LTH_ITEMTYPEZMM_TESTITEM01.
*--------------------------------------------------------------------------*
*selection-screen
*--------------------------------------------------------------------------*
SELECTION-SCREENBEGINOFBLOCKB1WITHFRAMETITLETEXT-001.
SELECT-OPTIONS:
S_BSARTFOREKKO-BSART,
S_AEDATFOREKKO-AEDAT,
S_EBELNFOREKKO-EBELN,
S_EKORGFOREKKO-EKGRP,
S_EKGRPFOREKKO-EKORG,
S_LIFNRFOREKKO-LIFNR.
SELECTION-SCREENENDOFBLOCKB1.
*----------------------------------------------------------------------*
*START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORMSUB_GET_DATA.
PERFORMSUB_PRINT.
FORMSUB_GET_DATA.
SELECT
EKKO~LIFNR
EKKO~EKORG
EKPO~WERKS
EKKO~EBELN
EKKO~AEDAT
INTOCORRESPONDINGFIELDSOFTABLEGTD_HEADER
FROMEKKO
INNERJOINEKPOONEKKO~EBELN=EKPO~EBELN
WHEREEKKO~BSARTINS_BSART
ANDEKKO~AEDATINS_AEDAT
ANDEKKO~EBELNINS_EBELN
ANDEKKO~EKORGINS_EKORG
ANDEKKO~EKGRPINS_EKGRP
ANDEKKO~LIFNRINS_LIFNR.
SELECT
EKKO~EBELN
EKPO~EBELP
MAKT~MATNR
MAKT~MAKTX
EKPO~MENGE
EKPO~MEINS
EKPO~NETPR
EKKO~WAERS
EKET~EINDT
INTOCORRESPONDINGFIELDSOFTABLEGTD_ITEM
FROMEKKO
INNERJOINEKPOONEKKO~EBELN=EKPO~EBELN
LEFTJOINEKETONEKPO~EBELN=EKET~EBELN
ANDEKPO~EBELP=EKET~EBELP
LEFTJOINMAKTONEKPO~MATNR=MAKT~MATNR
WHEREEKKO~BSARTINS_BSART
ANDEKKO~AEDATINS_AEDAT
ANDEKKO~EBELNINS_EBELN
ANDEKKO~EKORGINS_EKORG
ANDEKKO~EKGRPINS_EKGRP
ANDEKKO~LIFNRINS_LIFNR.
SELECT
EKKO~LIFNR
EKKO~EKORG
EKPO~WERKS
EKKO~EBELN
EKKO~AEDAT
EKPO~EBELP
MAKT~MATNR
MAKT~MAKTX
EKPO~MENGE
EKPO~MEINS
EKPO~NETPR
EKKO~WAERS
EKET~EINDT
intotableGTD_DATA
FROMEKKO
INNERJOINEKPOONEKKO~EBELN=EKPO~EBELN
LEFTJOINEKETONEKPO~EBELN=EKET~EBELN
ANDEKPO~EBELP=EKET~EBELP
LEFTJOINMAKTONEKPO~MATNR=MAKT~MATNR
WHEREEKKO~BSARTINS_BSART
ANDEKKO~AEDATINS_AEDAT
ANDEKKO~EBELNINS_EBELN
ANDEKKO~EKORGINS_EKORG
ANDEKKO~EKGRPINS_EKGRP
ANDEKKO~LIFNRINS_LIFNR.
ENDFORM.
FORMSUB_PRINT.
CLEAR:
LTD_HEADER,LTD_ITEM.
LOOPATGTD_DATAINTOGTH_DATA.
READTABLEGTD_HEADERINTOGTH_HEADERWITHKEYEBELN=GTH_DATA-EBELN.
IFSY-SUBRC=0.
MOVE-CORRESPONDINGGTH_HEADERTOLTH_HEADER.
COLLECTLTH_HEADERINTOLTD_HEADER.
CLEARLTH_HEADER.
ENDIF.
READTABLEGTD_ITEMINTOGTH_ITEMWITHKEYEBELN=GTH_DATA-EBELN
EBELP=GTH_DATA-EBELP.
IFSY-SUBRC=0.
MOVE-CORRESPONDINGGTH_ITEMTOLTH_ITEM.
COLLECTLTH_ITEMinTOLTD_ITEM.
CLEARLTH_ITEM.
ENDIF.
ENDLOOP.
CALLFUNCTION'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME='ZMM_TEST04'
IMPORTING
FM_NAME=GWK_FNAME.
CALLFUNCTIONGWK_FNAME
TABLES
GTD_HEADER=LTD_HEADER"headertable
GTD_ITEM=LTD_ITEM"itemtable
EXCEPTIONS
FORMATTING_ERROR=1
INTERNAL_ERROR=2
SEND_ERROR=3
USER_CANCELED=4
OTHERS=5.
IFSY-SUBRC<>0.
MESSAGEIDSY-MSGIDTYPESY-MSGTYNUMBERSY-MSGNO
WITHSY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4.
ENDIF.
ENDFORM."SUB_PRINT
新到公司用sap,开始学习sapabap,什么都不太会,做了好几天才搞出来个单据和一个报表,将过程写出来分享,希望高手指出不足,我会非常之感激。