SAP SMARTFORMS技术之我见(一):
2010-04-09 09:24
501 查看
SMARTFORMS和SAPSCRIPT FORM都是SAP中设计打印报表的工具,但是SAPScript需要手工一条一条的根据坐标
和长、高画表格线,这样极为不方便,而SmartForms有一个GUI来直接画界面,因此,总的来说,使用SmartForms
来设计报表打印要简单很多。而且SAPSrcipt在不同的Client中需要传输,测试起来也不方便。传输SAPScript的事务
代码为:SCC1,对应程序名为 RSTXSCRP。
事务代码:SMARTFORMS
1.在SAP的ABAP编程中,一般开发过程都是在Report程序中取出所有需要的数据,将数据进行相应的处理以后保存
到输出内表中,再打印内表中的数据,但是SmartForms是一个独立的外部Function Module,对于程序内部定义的内
表数据不能直接传递,需要se11定义外部的数据结构Structure或者使用标准的表结构,如果程序变更,需要传递的
数据发生变化,那么该Sturcture也需要修改,这是SmartForms中不方便的地方。
2.当然我们也可以在SmartForms内部写取数据的逻辑,但是在SmartForms中编程总不是很方便,而且有时我们的数
据需要首先以List或者ALV List的方式显示,然后再打印,所以在smartforms中书写取数据逻辑只能对一些要求非常
简单的场合适用。
3.我们决定还是在Report程序中进行取数逻辑,然后想办法将数据传递到SMARTFORMS中。我们知道在SAP中可
以将一个对象Export到内存或者数据库中,我们就可以根据一个类似于句柄的字符串再次取出该数据,传送一个
字符串到SmartForms中是没有任何问题的,所以我们只需要Export内表到内存或者数据库中,将句柄传递到
SmartForms中,在SmartForms中首先定义完全相同类型的内表,再将数据Impor到内表中即可完全恢复数据,这样
就完成的数据的传递工作。
下面就对export内表到内存和数据库分别进行说明。
1)在程序调用smartforms之前,将处理好的要显示的内表itab抛出到内存:
EXPORT TABLE = itab TO MEMORY ID 'Z_TEST'.
在smartforms的 global settings全局设置->global definitions全局定义 里有个 types类型 我们可以在这里定义一个和程序里内表一样的结构。在global settings->global definitions 里 global data中定义要接收数据的内表it_tab和工作区。
在smartforms输出表格内容时将抛出的表格接收进来:
IMPORT TABLE = it_tab MEMORY ID 'Z_TEST'.
释放 MEMORY ID :FREE MEMORY ID 'Z_TEST'.
2) 在程序调用smartforms之前,将处理好的要显示的内表itab抛出到数据库:
*将内表数据存入ABAP内存
EXPORT table = itab TO DATABASE indx(hk) ID 'Z_TEST'.
FREE itab.
在smartforms的 global settings全局设置->global definitions全局定义 里有个 types类型 我们可以在这里定义一个和程序里内表一样的结构。在global settings->global definitions 里 global data中定义要接收数据的内表it_tab和工作区。然后在global settings->global definitions->initialization中调用格式化中的子例程将数据库中的内表数据取出。
*将数据恢复到内表
perform Restor_buffer using in_mtab changing it_tab.
"此处的in_mtab需要在form interface表格接口中定义为c类型
格式化中编写如下子例程:
form Restor_buffer using typeid type c changing t type table.
import table = t from database indx(hk) id typeid.
endform.
当然,也可以不用这么麻烦,直接在global settings->global definitions->initialization中:
import table = it_tab from database indx(hk) id in_mtab.这样也是可以的。
如图1、2所示:
图1
图2
4.对于不建立结构调用SMARTFORMS打印输出还有另外一种方法 ,就是 在smartforms的 global settings->global definitions 里有个 types 我们可以在这里定义一个和程序里内表一样的结构.但是,在form interface 里定义参数的时候不能使用刚才定义的那个结构,激活的时候会报错。表格接口(form interface)的table里面不需要传输report 中的内表,所以我们不需要在这里定义参数,内表内容不通过该接口传过来,而是动态读取过来。我们在 smartforms里直接读程序里的内表。全局设置global settings->global definitions全局设置 里有个 initialization初始化 可以在这里定义一个指针如下:
DATA: field(50).
FIELD-SYMBOLS: <fs> type any.
field = '(Z_TEST)ITAB[]'."Z_TEST为report名称,itab[]为report中的内表名称
ASSIGN (field) TO <fs>."定义的指针指向report中的内表
it_tab[] = <fs>."将程序中的内表数据copy到smartforms中的相同结构的内表中。
这样就可以把程序里的内表的值取出来了,并赋给了smartforms里的内表,然后就当it_tab[] 就是你通过参数传进来
的一样用就行了。如图1.
下一篇将会对smartforms的详细用法进行说明。
Reference: 1) http://hi.baidu.com/yj35506629/blog/item/a5f4b40136281a071d9583eb.html
2) http://renyanli215.blog.163.com/blog/static/2936610320090655136406/
和长、高画表格线,这样极为不方便,而SmartForms有一个GUI来直接画界面,因此,总的来说,使用SmartForms
来设计报表打印要简单很多。而且SAPSrcipt在不同的Client中需要传输,测试起来也不方便。传输SAPScript的事务
代码为:SCC1,对应程序名为 RSTXSCRP。
事务代码:SMARTFORMS
1.在SAP的ABAP编程中,一般开发过程都是在Report程序中取出所有需要的数据,将数据进行相应的处理以后保存
到输出内表中,再打印内表中的数据,但是SmartForms是一个独立的外部Function Module,对于程序内部定义的内
表数据不能直接传递,需要se11定义外部的数据结构Structure或者使用标准的表结构,如果程序变更,需要传递的
数据发生变化,那么该Sturcture也需要修改,这是SmartForms中不方便的地方。
2.当然我们也可以在SmartForms内部写取数据的逻辑,但是在SmartForms中编程总不是很方便,而且有时我们的数
据需要首先以List或者ALV List的方式显示,然后再打印,所以在smartforms中书写取数据逻辑只能对一些要求非常
简单的场合适用。
3.我们决定还是在Report程序中进行取数逻辑,然后想办法将数据传递到SMARTFORMS中。我们知道在SAP中可
以将一个对象Export到内存或者数据库中,我们就可以根据一个类似于句柄的字符串再次取出该数据,传送一个
字符串到SmartForms中是没有任何问题的,所以我们只需要Export内表到内存或者数据库中,将句柄传递到
SmartForms中,在SmartForms中首先定义完全相同类型的内表,再将数据Impor到内表中即可完全恢复数据,这样
就完成的数据的传递工作。
下面就对export内表到内存和数据库分别进行说明。
1)在程序调用smartforms之前,将处理好的要显示的内表itab抛出到内存:
EXPORT TABLE = itab TO MEMORY ID 'Z_TEST'.
在smartforms的 global settings全局设置->global definitions全局定义 里有个 types类型 我们可以在这里定义一个和程序里内表一样的结构。在global settings->global definitions 里 global data中定义要接收数据的内表it_tab和工作区。
在smartforms输出表格内容时将抛出的表格接收进来:
IMPORT TABLE = it_tab MEMORY ID 'Z_TEST'.
释放 MEMORY ID :FREE MEMORY ID 'Z_TEST'.
2) 在程序调用smartforms之前,将处理好的要显示的内表itab抛出到数据库:
*将内表数据存入ABAP内存
EXPORT table = itab TO DATABASE indx(hk) ID 'Z_TEST'.
FREE itab.
在smartforms的 global settings全局设置->global definitions全局定义 里有个 types类型 我们可以在这里定义一个和程序里内表一样的结构。在global settings->global definitions 里 global data中定义要接收数据的内表it_tab和工作区。然后在global settings->global definitions->initialization中调用格式化中的子例程将数据库中的内表数据取出。
*将数据恢复到内表
perform Restor_buffer using in_mtab changing it_tab.
"此处的in_mtab需要在form interface表格接口中定义为c类型
格式化中编写如下子例程:
form Restor_buffer using typeid type c changing t type table.
import table = t from database indx(hk) id typeid.
endform.
当然,也可以不用这么麻烦,直接在global settings->global definitions->initialization中:
import table = it_tab from database indx(hk) id in_mtab.这样也是可以的。
如图1、2所示:
图1
图2
4.对于不建立结构调用SMARTFORMS打印输出还有另外一种方法 ,就是 在smartforms的 global settings->global definitions 里有个 types 我们可以在这里定义一个和程序里内表一样的结构.但是,在form interface 里定义参数的时候不能使用刚才定义的那个结构,激活的时候会报错。表格接口(form interface)的table里面不需要传输report 中的内表,所以我们不需要在这里定义参数,内表内容不通过该接口传过来,而是动态读取过来。我们在 smartforms里直接读程序里的内表。全局设置global settings->global definitions全局设置 里有个 initialization初始化 可以在这里定义一个指针如下:
DATA: field(50).
FIELD-SYMBOLS: <fs> type any.
field = '(Z_TEST)ITAB[]'."Z_TEST为report名称,itab[]为report中的内表名称
ASSIGN (field) TO <fs>."定义的指针指向report中的内表
it_tab[] = <fs>."将程序中的内表数据copy到smartforms中的相同结构的内表中。
这样就可以把程序里的内表的值取出来了,并赋给了smartforms里的内表,然后就当it_tab[] 就是你通过参数传进来
的一样用就行了。如图1.
下一篇将会对smartforms的详细用法进行说明。
Reference: 1) http://hi.baidu.com/yj35506629/blog/item/a5f4b40136281a071d9583eb.html
2) http://renyanli215.blog.163.com/blog/static/2936610320090655136406/
相关文章推荐
- SAP SMARTFORMS 技术之我见--总结
- SAP SMARTFORMS技术之我见(二):
- Conversion of SAPSCRIPT to SMARTFORMS
- SAP SMARTFORMS 打印 CNSAPWIN 不支持页格式
- SAP Smart forms中文字体重叠的解决方法
- SAP SMARTFORMS 之由竖打向横打的转换
- SAP SMARTFORMS 打印 CNSAPWIN 不支持页格式
- ABAP--New Barcode Printing in SAP using Smartforms
- SAP SMARTFORMS 打印 CNSAPWIN 不支持页格式
- ABAP--New Barcode Printing in SAP using Smartforms
- SAP SMARTFORMS 之由竖打向横打的转换
- SAP Smartforms 条码打印
- SAP 条码打印 --> SAP Smartforms 条码打印(转)
- ABAP--New Barcode Printing in SAP using Smartforms
- sap smartforms没有权限访问图片(无法打印图片)
- ABAP--New Barcode Printing in SAP using Smartforms
- SAP smartforms之Zebra print control language
- SAP SMARTFORMS 常用的一些系统变量
- SAP SMARTFORMS 基本操作 处理流程
- SAP SMARTFORMS 之由竖打向横打的转换