ABAP学习之-SMARTFORM.ppt

上传人:小飞机 文档编号:6501034 上传时间:2023-11-07 格式:PPT 页数:36 大小:332KB
返回 下载 相关 举报
ABAP学习之-SMARTFORM.ppt_第1页
第1页 / 共36页
ABAP学习之-SMARTFORM.ppt_第2页
第2页 / 共36页
ABAP学习之-SMARTFORM.ppt_第3页
第3页 / 共36页
ABAP学习之-SMARTFORM.ppt_第4页
第4页 / 共36页
ABAP学习之-SMARTFORM.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《ABAP学习之-SMARTFORM.ppt》由会员分享,可在线阅读,更多相关《ABAP学习之-SMARTFORM.ppt(36页珍藏版)》请在三一办公上搜索。

1、1,ABAP学习之SMARTFORM,2008年7月28号V1.0,2,前言,总结了一下SmartForm的知识,和大家一起共享,也希望以后大家能够共同丰富这个PPT的内容。本次讲解建立在大家都掌握SmartForm开发的基本知识的基础之上。,3,目录,我们主要通过SmartForm的开发流程逐次讲解:1.如何通过表单打印类型来判断SmartForm的设计方式 2.如何选择SmartForm与程序的接口方式 3.Report中编程和SmartForm中编程的区别 4.SmartForm中常用的小技巧,4,1.如何通过表单类型来判断SmartForm的设计方式,常见的几种表单打印类型分为套打 例

2、如:发票的打印非套打 1)有固定的格式,对其中的字数和行数都有严格的规定。例如:发票凭证的打印 2)只用按照一定的格式即可。例如:工资单信息的打印 在这里,我们主要判断是使用模板,还是表来实现主数据的循环显示。,5,2.如何选择SmartForm与程序的接口方式,在SAP的ABAP编程中,一般开发过程都是在Report程序中取出所有需要的数据,将数据进行相应的处理以后保存到输出内表中,再打印内表中的数据,但是SmartForms是一个独立的外部Function Module,对于程序内部定义的内表数据不能直接传递,需要定义外部的数据结构Structure或者使用标准的表结构,如果程序变更,需要

3、传递的数据发生变化,那么该Sturcture也需要修改,这是SmartForms中不方便的地方。,6,2.如何选择SmartForm与程序的接口方式,2.1通过读取数据库数据 用SE11创建结构,通过设置SmartForm中的全局设置=表格借口=表,来使用。2.2通过指针 不用在SE11中创建结构,需要在SmartForm中的全局设置=全局定义=类型 中定义。必须与Report中传输的内表结构一致。2.3通过读取内存数据 1)在全局设置=表格借口=导入 中定义内表数据句柄。2)不用在SE11中创建结构,需要在SmartForm中的全局设置=全局定义=类型 中定义。必须与Report中传输的内表

4、结构一致。,7,2.1通过读取数据库数据,结构:ZSDSM0001表单:ZSDSM0002 程序:ZSDSM0001,8,2.1通过读取数据库数据,9,2.1通过读取数据库数据,10,2.1通过读取数据库数据,11,2.1通过读取数据库数据,12,2.1通过读取数据库数据,行格式固定。,13,2.1通过读取数据库数据,系统:KF1参考Smartform:ZSDSM0001参考程序:YFIF0007_1,14,2.2通过指针,这种方法是通过在Smartform中建立指针,让其指向程序中的内表或工作区,从而实现不需要建立结构、不需要导入导出参数或内表,Smartform即可展示程序中数据的效果。,

5、15,2.2通过指针,我们通常根据业务需求,会在程序中使用TYPE构建用于Smartform展示的内表或工作区,然后通过 CALLFUNCTIONFNAMEEXPORTING TABLES 向Smartform传入参数,在Smartform中通过全局设置表格接口定义接收参数。使用指针,我们仍然需要在Smartform中定义参数,不过是在全局设置全局定义中进行设置。,16,2.2通过指针,步骤一:我们需要在全局定义的类型选项卡中进项设置,这里把我们程序中定义的TYPE直接复制过来就行了,如图:,直接复制程序中的type定义,17,2.2通过指针,步骤二:在全局定义的全局数据选项卡中定义Smart

6、form中使用的内表和工作区变量,参考的类型就是步骤一中定义的类型。定义内表使用TYPE TABLE OF 定义 工作区使用TYPE 如图:,18,2.2通过指针,步骤三:在全局定义的初始化选项卡中定义指针指向程序中的内表或工作区。首先:在输入参数填入步骤二中定义的内表和工作区变量名称。如图:,19,2.2通过指针,然后在下面的文本框中加入如下代码:*定义变量 DATA:HEADER(50),BODY(50).*定义指针 FIELD-SYMBOLS:TYPEANY,TYPEANY.*将程序中的工作区和内表赋值给变量 HEADER=(YFIF0007_1)GWA_HEADER.BODY=(YFI

7、F0007_1)GIT_BODY.*将变量赋给指针 ASSIGN(HEADER)TO.ASSIGN(BODY)TO.*将指针赋给在全局数据中定义的内表和工作区变量 GW_HEADER=.GT_BODY=.,20,2.2通过指针,那程序中需要做何事情吗?看这个调用Smartform的FUNCTION:CALLFUNCTIONFNAME*EXPORTING*TABLES EXCEPTIONS FORMATTING_ERROR=1 INTERNAL_ERROR=2 SEND_ERROR=3 USER_CANCELED=4 OTHERS=5.答案是:什么都不用做,注释掉EXPORTING和TABLES

8、,我们不需要他们了。,21,2.2通过指针,系统:KF1参考Smartform:YFISM0001_1参考程序:YFIF0007_1,22,2.3通过读取内存数据,我们是在Report程序中进行取数逻辑,然后想办法将数据传递到SMARTFORMS中。我们知道在SAP中可以将一个对象Export到内存中的,我们就可以根据一个类似于句柄的字符串再次取出该数据,传送一个字符串到SmartForms中是没有任何问题的,所以我们只需要Export内表到内存中,将句柄传递到SmartForms中,在SmartForms中首先定义完全相同类型的内表,再将数据Import到内表中即可完全恢复数据,这样就完成的

9、数据的传递工作。,23,2.3通过读取内存数据,事例程序:*&-*&ReportZFS_TEST001*&*&-*创建日期:2008/07/29*创建人:DuanYulan*功能说明:通过调用内存才实现参数的传递*-*变更履历*变更日期变更者管理序号变更内容*YYYY/MM/DDCGX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*-*REPORTZFS_TEST001.INCLUDEZINC_SF_HELPER.“创建内表在内存中的句柄的程序 DATA:GIT_OUTPUT_HTYPETABLEOFSCARR,传入SmartForm的头数据

10、GWA_OUTPUT_HLIKELINEOFGIT_OUTPUT_H,GIT_OUTPUT_DTYPETABLEOFSFLIGHT,传入SmartForm的明细数据GWA_OUTPUT_DLIKELINEOFGIT_OUTPUT_D.,24,2.3通过读取内存数据,DATA:HEADERNAMETYPECHAR18,头内表句柄ITEMSNAMETYPECHAR18,明细内表句柄GC_CARRIDTYPES_CARR_ID.查询条件SELECT-OPTIONS:S_CARRIDFORGC_CARRID.START-OF-SELECTION.PERFORMFRM_GETDATA.输出数据的查询在句

11、柄中加上服务器当前时间作为句柄名称,防止多人同时使用该程序,导致句柄名称相同CONCATENATEZFSTEST001HDSY-UZEITINTOHEADERNAME.CONCATENATEZFSTEST001ITSY-UZEITINTOITEMSNAME.存输出表单表头数据的内表SAVEBUFFERGIT_OUTPUT_HHEADERNAME.保存输出数据明细的内表,与表头数据有关联字段SAVEBUFFERGIT_OUTPUT_DITEMSNAME.PERFORMFRM_OUTPUT_TO_SMARTFORM.调用完毕以后,删除数据CLEARBUFFERHEADERNAME.CLEARBUF

12、FERITEMSNAME.END-OF-SELECTION.,25,2.3通过读取内存数据,*&-*&FormFRM_OUTPUT_TO_SMARTFORM*&-*输出到smartform打印*-*FORMFRM_OUTPUT_TO_SMARTFORM.SMARTFORMSDATA:OPTIONSTYPESSFCOMPOP.DATA:FM_NAMETYPERS38L_FNAM,S_OUTPUT_OPTIONSTYPESSFCOMPOP,CONTROLTYPESSFCTRLOP.S_OUTPUT_OPTIONS-TDDEST=LP01.SMARTFORMS初始化定义CONTROL-NO_DIAL

13、OG=.CONTROL-PREVIEW=.CONTROL-NO_OPEN=X.CONTROL-NO_CLOSE=X.CALLFUNCTIONSSF_FUNCTION_MODULE_NAMEEXPORTINGFORMNAME=ZSF_TEST003IMPORTINGFM_NAME=FM_NAMEEXCEPTIONSNO_FORM=1NO_FUNCTION_MODULE=2OTHERS=3.,26,2.3通过读取内存数据,CALLFUNCTIONSSF_OPENEXPORTINGCONTROL_PARAMETERS=CONTROLEXCEPTIONSFORMATTING_ERROR=1INTERN

14、AL_ERROR=2SEND_ERROR=3USER_CANCELED=4OTHERS=5.CALLFUNCTIONFM_NAME打印会计凭证EXPORTINGPTR_HEADER=HEADERNAMEPTR_ITEMS=ITEMSNAMECONTROL_PARAMETERS=CONTROLOUTPUT_OPTIONS=S_OUTPUT_OPTIONSUSER_SETTINGS=EXCEPTIONSFORMATTING_ERROR=1INTERNAL_ERROR=2SEND_ERROR=3USER_CANCELED=4OTHERS=5.,27,2.3通过读取内存数据,CALLFUNCTIONS

15、SF_CLOSEEXCEPTIONSFORMATTING_ERROR=1INTERNAL_ERROR=2SEND_ERROR=3OTHERS=4.ENDFORM.FRM_OUTPUT_TO_SMARTFO*&-*&FormFRM_GETDATA*&-*通过查询条件得到查询信息*-*FORMFRM_GETDATA.获取数据SELECT*FROMSCARRINTOCORRESPONDINGFIELDSOFTABLEGIT_OUTPUT_HWHERECARRIDINS_CARRID.SELECT*FROMSFLIGHTINTOCORRESPONDINGFIELDSOFTABLEGIT_OUTPUT_

16、DWHERECARRIDINS_CARRID.ENDFORM.FRM_GETDATA,28,2.3通过读取内存数据,以下是在Report程序中Import和Export的Include的程序:*&-*&包括ZINC_SF_HELPER*&-*创建日期:2008/07/29*创建人:DuanYulan*功能说明:通过调用内存才实现参数的传递*-*变更履历*变更日期变更者管理序号变更内容*YYYY/MM/DDCGX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*-*TYPESBUFFER_ID(80)TYPEC.DATAWA_INDXTYPEIN

17、DX.DEFINESAVEBUFFER.定义存入内存的句柄PERFORMSAVE_TO_BUFFERUSING&1&2.END-OF-DEFINITION.DEFINECLEARBUFFER.清空内存PERFORMCLEAR_BUFFERUSING&1.END-OF-DEFINITION.,29,2.3通过读取内存数据,*&-*&Formsave_to_buffer*&-*定义存入内存的句柄*-*FORMSAVE_TO_BUFFERUSINGTTYPETABLETYPEIDTYPEC.WA_INDX-AEDAT=SY-DATUM.WA_INDX-USERA=SY-UNAME.WA_INDX-P

18、GMID=SY-REPID.EXPORTTTODATABASEINDX(HK)IDTYPEIDFROMWA_INDX.ENDFORM.Save_To_Buffer*&-*&Formclear_buffer*&-*清空内存*-*FORMCLEAR_BUFFERUSINGBUFFIDTYPEC.DELETEFROMDATABASEINDX(HK)IDBUFFID.ENDFORM.Clear_Buffer,30,2.3通过读取内存数据,创建SmartForm:步骤一:在“全局设置”-“表格接口”-“导入”设置两个参数:ptr_header,ptr_items 这两个参数用来传入我们在Report中E

19、xport内表数据的句柄(ID key)。,31,2.3通过读取内存数据,步骤二:在“全局设置”-“全局定义”中进行多项设定 2.1)类型”设定,在这里需要定义4个类型,一个用来保存表头数据的工作区和内表,一个用来保存明细数据的工作区和内表,它们的结构必须与Report中Export到数据库中的内表的结构完全对应一致,否则,我们将不能从传入的句柄(ID key)中恢复内表数据。,32,2.3通过读取内存数据,2.2)全局数据”中,定义全局的变量,我们需要定义如下几个变量,33,2.3通过读取内存数据,2.3)在“初始化”中,将数据句柄中的内表恢复到刚设定的全局变量中,输入参数:PTR_HEADER,PTR_ITEMS,IT_HEADER,IT_ITEMS,G_TOTALLINES,34,2.3通过读取内存数据,2.4)在Freecode“格式化程序”中,定义Form Restor_buffer函数 至此,我们已经得到了表头和明细这2个内表的数据,下面就可以准备画报并输出数据了。,35,2.3通过读取内存数据,系统:KF1参考SmartForm:ZSF_TEST003参考程序:ZSF_TEST001,36,学习SmartForm,谢谢观看!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号