设为首页 收藏本站
查看: 2026|回复: 0

[经验分享] SAP SMARTFORMS技术之我见(一):

[复制链接]

尚未签到

发表于 2015-9-18 13:03:58 | 显示全部楼层 |阅读模式
  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所示:
DSC0000.jpg
  图1
DSC0001.jpg
  图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/
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115430-1-1.html 上篇帖子: SAP MESSAGE 下篇帖子: SAP R/3 Often Used T-Code
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表