【转载】ABAP实战Smart Forms设计

作者参考书籍:实战SAP程序开发

Smart Forms是ABAP设计单据打印的工具,设计过程由两部分组成:
(1)在Smart Forms设计单据的样式、输入输出数据接口;
(2)编程调用设计单据、输出数据,实现打印输出。
本博文先以一个简单的例子,将Form与程序联调,快速了解整个设计过程,再详细介绍Smart forms相关设计及较复杂的例子。

1、一个简单的例子

本例完成有图标(公司LOGO)、表头(公司名称)、文字说明(表身)、含当前时间的表尾的单据。打印预览界面如图


1.1、Form的制作

输入TCODE:SMARTFORMS,输入要建立的Form名称后单击“创建”按钮,如图


输入描述,单击“表格绘制器(Form Painter)”按钮,如图


右屏显示设计图形界面,如图


左屏显示Form所有对象树,当双击对象时,中间屏幕显示对象的属性,右屏显示Form图形设计界面。系统默认建立一个页面 ,一个主窗口 ,一个Form可以有多个页面,一个页面可以有多个窗口,但主窗口只能有一个,右屏显示该页及MAIN主窗口。

1.1.1、加入公司的LOGO

选中主窗口,单击右键菜单中的“Create”-->“Graphics”菜单,如图


右屏显示一个图片图标,双击它,中屏显示属性,单击选择图片按钮,如图


选择包含彩色选项,如图


选择图片,如图


选择图片后,右屏图形对象显示出选择图片,调整好图片的位置,如图


1.1.2、加入公司名称

选择页面,单击右键菜单中的“Create”-->“Window”菜单,如图


将新建的WINDOWS调整到合适的位置,请注意,该窗口的对象是黄色的,表示不是主窗口,选中该窗口,单击右键菜单中的“Create”-->“Text”菜单添加文本,如图


在生成的文本属性输入公司名称,如图


1.1.3、加入主表内容

和建立表头一样,在主窗口建立一个Text对象,并输入相关内容,如图


1.1.4、加入表尾

添加新的窗口和文本,再添加一个系统日期文本,单击上图中的工具条的字段列表按钮,屏幕左下角会显示系统字段,在右下屏字段中,选中System fields的“DATE”节点,并把它拖到文本“当前时间:”后面,完成后保存,如图


1.1.5、生成和预览

保存后,单击主菜单中的“Form”-->“Check”菜单,检查Form是否正确。然后单击工具栏上的激活按钮激活Form,再单击工具栏上的测试按钮,输出如图


“/1BCDWB/SF00000125”是系统生成程序。单击测试按钮,输出如图


单击执行按钮,输入或选择打印机,单击“Print preview”按钮预览,如图


预览界面如图



2、设计程序调用Form

程序代码如下:
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. REPORT  Z_SMARTFORMSTEST_20160701001.  
  2. DATA: fm_name TYPE rs38l_fnam.  
  3. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'  
  4.   EXPORTING  
  5.     formname = 'ZTEST20160701001'  
  6.     variant = ''  
  7.     direct_call = ''  
  8.   IMPORTING  
  9.     fm_name = fm_name  
  10.   EXCEPTIONS  
  11.     no_form = 1  
  12.     no_function_module = 2  
  13.     OTHERS = 3.  
  14. IF sy-subrc <> 0.  
  15. ENDIF.  
  16. CALL FUNCTION fm_name  
  17.   EXCEPTIONS  
  18.     formatting_error = 1  
  19.     internal_error = 2  
  20.     send_error = 3  
  21.     user_canceled = 4  
  22.     OTHERS = 5.  
  23. IF sy-subrc <> 0.  
  24. ENDIF.  

3、Smart Forms相关技术

3.1、Style样式制作

Style定义文字类型、大小样式等属性,可在Text对象内使用不同的样式。

输入TCODE:SmartForms,选择“Style”选项,输入Style名称,单击创建按钮,如图


进入设计界面,如图


Header data:表头数据,定义默认段落属性等参数。
Paragraph formats:段落格式,字体类型等,在设定对象时可以选择需要的段落。
Character formats:字符格式,定义是否粗体、倾斜、大小等,在一段文字内设置不同的字体、颜色等。

选择Paragraph formats,右键选择“Create node”菜单,如图


输入字体、大小等信息,如图


选择Character formats,右键选择“Create node”菜单,如图


如图所示,设定三种不同颜色的段落,两种不同大小的字符格式。


在定义完成后,需要将表头数据选择一种段落作为该样式的默认段落,如图


在Form设计时,选择样式界面如图


单击主菜单“Form”-->“Check”检查是否正确,没有问题则激活它。


通过样式设定,可以达到以下效果,如图


运行效果如图


3.2、Text Moudle文本制作

ABAP编程中很多对象、文本、消息、提示内容都可以预先设定。
Form中Text对象数据来源有以下几种:
变量,通过程序产生;
Include text,它是Sapscript text,可以通过TCODE:SE75查阅;
Include element,直接输入文本;
Text Module,是下面将要介绍的。

输入TCODE:SMARTFORMS,选择“Text Module”选项,输入Text Module名称,单击“创建”按钮,如图


输入完成后,直接保存,如图


然后在设计Form时选择Text属性为Text Module时就可以选择定义的文本,如图


4、图片的上传 

之前我们用过SWM0上传图片,该命令也可以上传其他一些二进制文件(如上传一些Excel模块,供用户下载到PC端,再通过OLE来操作此文档)。

这里我们用SE78命令上传图片,那是为Smart/Script Form设计使用的。

在基础例子中,使用了一个图片,是系统内部的,在制作公司内部的各类单据时需要公司的LOGO,这就需要上传图片。

输入TCODE:SE78,系统显示如图


选择“Stored on Document Server”-->“GRAPHICS General Graphics”-->“BMAP Bitmap Images”,单击工具栏标出的按钮导入图片,选择屏幕界面如图

注意:上传的图片一定要是BMP或DIB格式的单色位图或16位色图



确定后,图片被导入,如图


在设计Form就可以选择上传图片,如图

执行效果如图


5、变量加载

设计文本可以包含动态变量,在程序中再加载实际数据。如在全局设定的接口输入参数中定义一个字符串型的变量,如图


单击按钮显示所有已定义的字段,将它拖入文本描述内,如图


将Form保存后激活。调整程序,加入输入参数。

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. REPORT  Z_SMARTFORMSTEST_20160714001.  
  2. DATA: fm_name TYPE rs38l_fnam.  
  3. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'  
  4. EXPORTING  
  5.   formname = 'ZTEST20160701001'  
  6.   variant = ''  
  7.   direct_call = ''  
  8. IMPORTING  
  9.   fm_name = fm_name  
  10. EXCEPTIONS  
  11.   no_form = 1  
  12.   no_function_module = 2  
  13.   OTHERS = 3.  
  14. IF sy-subrc <> 0.  
  15. ENDIF.  
  16. CALL FUNCTION fm_name  
  17. exporting  
  18.   ytestv = '东方天空'  
  19. EXCEPTIONS  
  20.   formatting_error = 1  
  21.   internal_error = 2  
  22.   send_error = 3  
  23.   user_canceled = 4  
  24.   OTHERS = 5.  
  25. IF sy-subrc <> 0.  
  26. ENDIF.  
运行后,效果如图


6、通过Table对象打印表格

表格的打印是一张单据必不可少的,比如一张送货单,商品明细就是表格的内容。设计过程:选择一个窗口,选右键菜单中的“Create”-->“Table”,如图


先点击如下“细节”按钮,如图


行格式是Table编出时每行的格式,定义表头和表身两种格式,表头与表身略有不同,表宽一定要等于定义列宽之和


定义完后单击“表绘制器”按钮预览定义的行列格式,如图


单击“选择模式”按钮定义表格的线条样式,如图


选择Table下面的Header,创建Table line,如图


在Line Type选择中选择之前定义的LINE_CON,如图


依次在CELL下面建立Text对象,如图


以同样的方法,在Table对象下面的Main中创建Table line对象和Text对象如图


这样整个Table设定完成,接着定义数据和导入参数。

回到Form接口,在“Table”页中定义I_SFLIGHT,如图


选择表格,再选择数据页,如图


输入内部表格I_SFLIGHT,然后将Table内的各个字段赋值操作如下:

打开字段列表,在Table内双击Text字段,在左下角的“Table interfance”-->“I_SFLIGHT”节点中将CARRID、CONNID、FLDATE、PRICE字段拖到相关的文本对象内的描述信息中,如图


保存后激活,单击测试按钮,如图


到此,Form的制作已完成。

调用程序:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. REPORT  Z_SMARTFORMSTEST_20160714002.  
  2. DATA: fm_name TYPE rs38l_fnam.  
  3. DATA: wa_sflight LIKE sflight OCCURS 0 WITH HEADER LINE.  
  4. *将数据放入内表  
  5. SELECT * INTO TABLE wa_sflight FROM sflight.  
  6.   
  7. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'  
  8. EXPORTING  
  9.   formname = 'ZTEST20160701001'  
  10.   variant = ''  
  11.   direct_call = ''  
  12. IMPORTING  
  13.   fm_name = fm_name  
  14. EXCEPTIONS  
  15.   no_form = 1  
  16.   no_function_module = 2  
  17.   OTHERS = 3.  
  18. IF sy-subrc <> 0.  
  19. ENDIF.  
  20. CALL FUNCTION fm_name  
  21. EXPORTING  
  22.   ytestv = '东方天空'  
  23. TABLES  
  24.   i_sflight = wa_sflight  
  25. EXCEPTIONS  
  26.   formatting_error = 1  
  27.   internal_error = 2  
  28.   send_error = 3  
  29.   user_canceled = 4  
  30.   OTHERS = 5.  
  31. IF sy-subrc <> 0.  
  32. ENDIF.  
运行后输出如图



Smart Forms是ABAP设计单据打印的工具,设计过程由两部分组成:

(1)在Smart Forms设计单据的样式、输入输出数据接口;
(2)编程调用设计单据、输出数据,实现打印输出。
本博文先以一个简单的例子,将Form与程序联调,快速了解整个设计过程,再详细介绍Smart forms相关设计及较复杂的例子。

1、一个简单的例子

本例完成有图标(公司LOGO)、表头(公司名称)、文字说明(表身)、含当前时间的表尾的单据。打印预览界面如图


1.1、Form的制作

输入TCODE:SMARTFORMS,输入要建立的Form名称后单击“创建”按钮,如图


输入描述,单击“表格绘制器(Form Painter)”按钮,如图


右屏显示设计图形界面,如图


左屏显示Form所有对象树,当双击对象时,中间屏幕显示对象的属性,右屏显示Form图形设计界面。系统默认建立一个页面 ,一个主窗口 ,一个Form可以有多个页面,一个页面可以有多个窗口,但主窗口只能有一个,右屏显示该页及MAIN主窗口。

1.1.1、加入公司的LOGO

选中主窗口,单击右键菜单中的“Create”-->“Graphics”菜单,如图


右屏显示一个图片图标,双击它,中屏显示属性,单击选择图片按钮,如图


选择包含彩色选项,如图


选择图片,如图


选择图片后,右屏图形对象显示出选择图片,调整好图片的位置,如图


1.1.2、加入公司名称

选择页面,单击右键菜单中的“Create”-->“Window”菜单,如图


将新建的WINDOWS调整到合适的位置,请注意,该窗口的对象是黄色的,表示不是主窗口,选中该窗口,单击右键菜单中的“Create”-->“Text”菜单添加文本,如图


在生成的文本属性输入公司名称,如图


1.1.3、加入主表内容

和建立表头一样,在主窗口建立一个Text对象,并输入相关内容,如图


1.1.4、加入表尾

添加新的窗口和文本,再添加一个系统日期文本,单击上图中的工具条的字段列表按钮,屏幕左下角会显示系统字段,在右下屏字段中,选中System fields的“DATE”节点,并把它拖到文本“当前时间:”后面,完成后保存,如图


1.1.5、生成和预览

保存后,单击主菜单中的“Form”-->“Check”菜单,检查Form是否正确。然后单击工具栏上的激活按钮激活Form,再单击工具栏上的测试按钮,输出如图


“/1BCDWB/SF00000125”是系统生成程序。单击测试按钮,输出如图


单击执行按钮,输入或选择打印机,单击“Print preview”按钮预览,如图


预览界面如图



2、设计程序调用Form

程序代码如下:
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. REPORT  Z_SMARTFORMSTEST_20160701001.  
  2. DATA: fm_name TYPE rs38l_fnam.  
  3. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'  
  4.   EXPORTING  
  5.     formname = 'ZTEST20160701001'  
  6.     variant = ''  
  7.     direct_call = ''  
  8.   IMPORTING  
  9.     fm_name = fm_name  
  10.   EXCEPTIONS  
  11.     no_form = 1  
  12.     no_function_module = 2  
  13.     OTHERS = 3.  
  14. IF sy-subrc <> 0.  
  15. ENDIF.  
  16. CALL FUNCTION fm_name  
  17.   EXCEPTIONS  
  18.     formatting_error = 1  
  19.     internal_error = 2  
  20.     send_error = 3  
  21.     user_canceled = 4  
  22.     OTHERS = 5.  
  23. IF sy-subrc <> 0.  
  24. ENDIF.  

3、Smart Forms相关技术

3.1、Style样式制作

Style定义文字类型、大小样式等属性,可在Text对象内使用不同的样式。

输入TCODE:SmartForms,选择“Style”选项,输入Style名称,单击创建按钮,如图


进入设计界面,如图


Header data:表头数据,定义默认段落属性等参数。
Paragraph formats:段落格式,字体类型等,在设定对象时可以选择需要的段落。
Character formats:字符格式,定义是否粗体、倾斜、大小等,在一段文字内设置不同的字体、颜色等。

选择Paragraph formats,右键选择“Create node”菜单,如图


输入字体、大小等信息,如图


选择Character formats,右键选择“Create node”菜单,如图


如图所示,设定三种不同颜色的段落,两种不同大小的字符格式。


在定义完成后,需要将表头数据选择一种段落作为该样式的默认段落,如图


在Form设计时,选择样式界面如图


单击主菜单“Form”-->“Check”检查是否正确,没有问题则激活它。


通过样式设定,可以达到以下效果,如图


运行效果如图


3.2、Text Moudle文本制作

ABAP编程中很多对象、文本、消息、提示内容都可以预先设定。
Form中Text对象数据来源有以下几种:
变量,通过程序产生;
Include text,它是Sapscript text,可以通过TCODE:SE75查阅;
Include element,直接输入文本;
Text Module,是下面将要介绍的。

输入TCODE:SMARTFORMS,选择“Text Module”选项,输入Text Module名称,单击“创建”按钮,如图


输入完成后,直接保存,如图


然后在设计Form时选择Text属性为Text Module时就可以选择定义的文本,如图


4、图片的上传 

之前我们用过SWM0上传图片,该命令也可以上传其他一些二进制文件(如上传一些Excel模块,供用户下载到PC端,再通过OLE来操作此文档)。

这里我们用SE78命令上传图片,那是为Smart/Script Form设计使用的。

在基础例子中,使用了一个图片,是系统内部的,在制作公司内部的各类单据时需要公司的LOGO,这就需要上传图片。

输入TCODE:SE78,系统显示如图


选择“Stored on Document Server”-->“GRAPHICS General Graphics”-->“BMAP Bitmap Images”,单击工具栏标出的按钮导入图片,选择屏幕界面如图

注意:上传的图片一定要是BMP或DIB格式的单色位图或16位色图



确定后,图片被导入,如图


在设计Form就可以选择上传图片,如图

执行效果如图


5、变量加载

设计文本可以包含动态变量,在程序中再加载实际数据。如在全局设定的接口输入参数中定义一个字符串型的变量,如图


单击按钮显示所有已定义的字段,将它拖入文本描述内,如图


将Form保存后激活。调整程序,加入输入参数。

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. REPORT  Z_SMARTFORMSTEST_20160714001.  
  2. DATA: fm_name TYPE rs38l_fnam.  
  3. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'  
  4. EXPORTING  
  5.   formname = 'ZTEST20160701001'  
  6.   variant = ''  
  7.   direct_call = ''  
  8. IMPORTING  
  9.   fm_name = fm_name  
  10. EXCEPTIONS  
  11.   no_form = 1  
  12.   no_function_module = 2  
  13.   OTHERS = 3.  
  14. IF sy-subrc <> 0.  
  15. ENDIF.  
  16. CALL FUNCTION fm_name  
  17. exporting  
  18.   ytestv = '东方天空'  
  19. EXCEPTIONS  
  20.   formatting_error = 1  
  21.   internal_error = 2  
  22.   send_error = 3  
  23.   user_canceled = 4  
  24.   OTHERS = 5.  
  25. IF sy-subrc <> 0.  
  26. ENDIF.  
运行后,效果如图


6、通过Table对象打印表格

表格的打印是一张单据必不可少的,比如一张送货单,商品明细就是表格的内容。设计过程:选择一个窗口,选右键菜单中的“Create”-->“Table”,如图


先点击如下“细节”按钮,如图


行格式是Table编出时每行的格式,定义表头和表身两种格式,表头与表身略有不同,表宽一定要等于定义列宽之和


定义完后单击“表绘制器”按钮预览定义的行列格式,如图


单击“选择模式”按钮定义表格的线条样式,如图


选择Table下面的Header,创建Table line,如图


在Line Type选择中选择之前定义的LINE_CON,如图


依次在CELL下面建立Text对象,如图


以同样的方法,在Table对象下面的Main中创建Table line对象和Text对象如图


这样整个Table设定完成,接着定义数据和导入参数。

回到Form接口,在“Table”页中定义I_SFLIGHT,如图


选择表格,再选择数据页,如图


输入内部表格I_SFLIGHT,然后将Table内的各个字段赋值操作如下:

打开字段列表,在Table内双击Text字段,在左下角的“Table interfance”-->“I_SFLIGHT”节点中将CARRID、CONNID、FLDATE、PRICE字段拖到相关的文本对象内的描述信息中,如图


保存后激活,单击测试按钮,如图


到此,Form的制作已完成。

调用程序:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. REPORT  Z_SMARTFORMSTEST_20160714002.  
  2. DATA: fm_name TYPE rs38l_fnam.  
  3. DATA: wa_sflight LIKE sflight OCCURS 0 WITH HEADER LINE.  
  4. *将数据放入内表  
  5. SELECT * INTO TABLE wa_sflight FROM sflight.  
  6.   
  7. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'  
  8. EXPORTING  
  9.   formname = 'ZTEST20160701001'  
  10.   variant = ''  
  11.   direct_call = ''  
  12. IMPORTING  
  13.   fm_name = fm_name  
  14. EXCEPTIONS  
  15.   no_form = 1  
  16.   no_function_module = 2  
  17.   OTHERS = 3.  
  18. IF sy-subrc <> 0.  
  19. ENDIF.  
  20. CALL FUNCTION fm_name  
  21. EXPORTING  
  22.   ytestv = '东方天空'  
  23. TABLES  
  24.   i_sflight = wa_sflight  
  25. EXCEPTIONS  
  26.   formatting_error = 1  
  27.   internal_error = 2  
  28.   send_error = 3  
  29.   user_canceled = 4  
  30.   OTHERS = 5.  
  31. IF sy-subrc <> 0.  
  32. ENDIF.  
运行后输出如图


  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值