01 SMF表单介绍
02 SMF表单开发步骤
03 SMF表单开发实战
01 SMF表单是什么?
Smart Forms是在SAPScript的基础上产生的一种新的表单制作工具,它完全兼容SAPScript。但Smart Forms 更独立,且使用起来更加方便,可以创建FORM的同时,生成该表单对应的功能块(Function Module),从而为FORM和ABAP程序的交互提供参数接口。
SAP Smart Forms工具可用于打印和发送文档。
此工具在开发用于Internet的表单,PDF文件,电子邮件和文档中非常有用。
该工具提供了一个接口来构建和维护表单的布局和逻辑。SAP还为业务流程(如客户关系管理(CRM),销售和分销(SD),财务会计(FI)和人力资源(HR))提供一系列表格。
该工具允许使用简单的图形工具而不是使用任何编程工具来修改表单。 这意味着没有编程知识的用户可以毫不费力地为这些表单配置业务流程的数据。
在SmartForms表单中,从静态和动态表中检索数据。
表标题和小计由触发事件指定,然后数据在最终输出之前排序。
SmartForms表单允许包含可以作为表单的一部分或作为背景显示的图形。 如果需要,还可以在进行表单打印输出时抑制背景图形。
SAP系统中可用的标准智能表单的一些示例如下 :
SF_EXAMPLE_01 表示具有用于客户的航班预订的表输出的发票。
SF_EXAMPLE_02 表示类似于 SF_EXAMPLE_01 的发票,但带有小计。
SF_EXAMPLE_03 指定类似于 SF_EXAMPLE_02 的发票,但可以在应用程序中选择多个客户的发票。
以下是SMARTFORMS的打印效果:
![](https://img.haomeiwen.com/i18862822/3124bca1009a5127.png)
02 SMF表单开发技巧
- 创建Form-表单版式
- 创建Style-文本样式
- 创建 Text Module-文本模块
- 创建 图片组件
- 程序调用SMARTFORMS
SMF表单开发技巧-1.创建Form-表单版式
TCODE:smartforms
![](https://img.haomeiwen.com/i18862822/1e4995fdc5888b0d.png)
SMF表单开发技巧-2.创建Style-文本样式
![](https://img.haomeiwen.com/i18862822/d18e9157d32d3f0c.png)
SMF表单开发技巧-3.创建 Text Module-文本模块
![](https://img.haomeiwen.com/i18862822/de21697d3b56dec3.png)
SMF表单开发技巧-4.创建 图片组件
TCODE:se78
![](https://img.haomeiwen.com/i18862822/bed85c13dde095b8.png)
SMF表单开发技巧-程序调用SMARTFORMS
TCODE:se38
![](https://img.haomeiwen.com/i18862822/f3a8a5bbf1afd48e.png)
03 SMF表单开发实战
业务背景:
通过前期开发的学员信息录入功能,积累的学员信息数据;现需要使用SMARTFORMS实现学员信息卡片打印。
功能分析:
1)为实现打印功能,需用SMARTFORMS方式;开发学员卡片打印程序。
2)课堂上确认具体格式需求。
打印效果界面
![](https://img.haomeiwen.com/i18862822/2ca0cc2a01fcfb5f.png)
实战练习
![](https://img.haomeiwen.com/i18862822/1468cf1fbaea82f9.png)
一、SE38创建程序(作为SMARTFORMS的载体)
![](https://img.haomeiwen.com/i18862822/f7e3a4697cdbc923.png)
![](https://img.haomeiwen.com/i18862822/7e57fa035bc71908.png)
1.准备数据库表
TABLES: ZTKT_XYXX,
ZTKT_XYKQ.
2.定义初始屏幕
*----------------------------------------------------------------------*
* DESC: 定义初始屏幕
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK SB01 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_ZBJ FOR ZTKT_XYXX-ZBJ
NO-EXTENSION
NO INTERVALS
OBLIGATORY
DEFAULT 'H1'.
SELECT-OPTIONS: S_ZXH FOR ZTKT_XYXX-ZXH
OBLIGATORY
DEFAULT 'HY101'.
SELECT-OPTIONS: S_ZRQ FOR ZTKT_XYKQ-ZRQ
OBLIGATORY
DEFAULT SY-DATUM.
SELECTION-SCREEN END OF BLOCK SB01.
运行结果展示
![](https://img.haomeiwen.com/i18862822/cbfa2b168d477b79.png)
3.添加事件
START-OF-SELECTION.
4.定义获取数据
创建 perform 获取数据“PERFORM FRM_GET_DATA.”。
*定义perform获取数据
PERFORM FRM_GET_DATA.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
ENDFORM.
5.定义变量
获取的数据放入两张表中,所以先进行定义变量,定义一个结构,两张表.
*定义变量
DATA: GS_ZXYXX LIKE ZTKT_XYXX, "学员信息
GT_ZXYXX TYPE TABLE OF ZTKT_XYXX WITH HEADER LINE, "学员信息
GT_ZXYKQ TYPE TABLE OF ZTKT_XYKQ WITH HEADER LINE. "学员考勤
6.定义打印数据。
创建perform 打印数据“PERFORM FRM_PRINT_SMF.”。
定义 perform打印数据
PERFORM frm_print_smf.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT_SMF
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_print_smf .
ENDFORM.
二、调用smartforms进行文本测试
1.首先创建smartforms
事物代码: SMARTFORMS
![](https://img.haomeiwen.com/i18862822/589266b497f989bf.png)
然后进入samrtforms画板窗口界面,分为三部分:左侧导航窗口,中间明细窗口,右侧画板窗口。
![](https://img.haomeiwen.com/i18862822/4e5925ff810a1f33.png)
2.添加文本控件
创建控件text文本
![](https://img.haomeiwen.com/i18862822/a572d9ccd8627550.png)
点击执行
![](https://img.haomeiwen.com/i18862822/fd18c1a4c14c6649.png)
再次执行
![](https://img.haomeiwen.com/i18862822/175a5c08bbaa2c6a.png)
再次执行
![](https://img.haomeiwen.com/i18862822/11fb2ce42575643a.png)
出现打印界面
![](https://img.haomeiwen.com/i18862822/d64fc0118bad12f1.png)
打印成功
![](https://img.haomeiwen.com/i18862822/11bdadd3da6ccfc9.png)
3.function函数调用smartforms
在定义打印数据的form表单“PERFORM frm_print_smf.”中,填写函数的返回参数,smartform是表单“ZSF_HY101_01”。
FORM frm_print_smf .
**定义SMARTFORMS相关变量
DATA: LSM_NAME TYPE RS38L_FNAM.
**调用RFC函数;SMARTFORMS打印
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING "函数的返回参数
FORMNAME = 'ZSF_HY101_01'
IMPORTING "函数的输入参数
FM_NAME = LSM_NAME.
IF SY-SUBRC = 0.
CALL FUNCTION LSM_NAME
TABLES
IT_ZXYXX = GT_ZXYXX[]
IT_ZXYKQ = GT_ZXYKQ[].
IF SY-SUBRC <> 0.
ENDIF.
ENDIF.
ENDFORM.
测试调用smartforms成功
![](https://img.haomeiwen.com/i18862822/774fa4b3ae97b3e3.png)
执行打印
![](https://img.haomeiwen.com/i18862822/0d041db2381825c8.png)
调用成功
![](https://img.haomeiwen.com/i18862822/fdd3bda9f9ac542d.png)
注意:调用smartforms时,smartforms必须先进行激活。
三、获取数据库中数据
在定义获取数据的form表单“PERFORM frm_get_data.”中,
通过选择条件,获取学员信息和考勤记录表中的信息,班级、学号、日期
FORM frm_get_data .
**获取学员信息
SELECT
*
INTO CORRESPONDING FIELDS OF TABLE GT_ZXYXX
FROM ZTKT_XYXX
WHERE ZXH IN S_ZXH
AND ZBJ IN S_ZBJ.
IF SY-SUBRC NE 0.
MESSAGE '学员信息不存在,请用TCODE-ZYTKT01维护' TYPE 'I'.
ELSE.
SORT GT_ZXYXX BY ZBJ
ZXH.
****获取考勤记录
SELECT *
INTO CORRESPONDING FIELDS OF TABLE GT_ZXYKQ
FROM ZTKT_XYKQ
WHERE ZBJ IN S_ZBJ "班级
AND ZXH IN S_ZXH "学号
AND ZRQ IN S_ZRQ."日期
SORT GT_ZXYKQ BY ZBJ
ZXH
ZRQ.
ENDIF.
ENDFORM.
设置断点,看是否已经从表里获取到了数据
![](https://img.haomeiwen.com/i18862822/2f8200e0b4c0e874.png)
执行
![](https://img.haomeiwen.com/i18862822/a25262fb5710346a.png)
F6执行,双击变量
![](https://img.haomeiwen.com/i18862822/c1570560b50d09c5.png)
获取数据成功
![](https://img.haomeiwen.com/i18862822/083385e00ba0cdac.png)
![](https://img.haomeiwen.com/i18862822/c1aac112212e9ffc.png)
四、传递数据,传递数据到smartforms表单中
(1)定义两张表
![](https://img.haomeiwen.com/i18862822/e54ec6c8c8439ecf.png)
form表单中进行赋值
![](https://img.haomeiwen.com/i18862822/35c57e0a49fcf67d.png)
(2)定义结构
![](https://img.haomeiwen.com/i18862822/4071f60b5aeca008.png)
(3)添加变量
![](https://img.haomeiwen.com/i18862822/673d1a21984d6fba.png)
(4)给变量进行赋值
![](https://img.haomeiwen.com/i18862822/03ba879632436abf.png)
se38激活执行程序
![](https://img.haomeiwen.com/i18862822/886c8aa7d7448d54.png)
数据传递成功
![](https://img.haomeiwen.com/i18862822/d02f1a22abdbfaa2.png)
五、绘制smartforms表单
(1)创建屏幕,存放表头、内容、表尾
![](https://img.haomeiwen.com/i18862822/e309840f3a79ac3d.png)
(2)窗口添加模板。给窗口画格子。
![](https://img.haomeiwen.com/i18862822/0983ada752c0eb23.png)
效果展示
![](https://img.haomeiwen.com/i18862822/e017d160973aa375.png)
同理创建明细和表尾的模板。
![](https://img.haomeiwen.com/i18862822/41980733b66726aa.png)
(3)添加内容——“学员信息卡”。
![](https://img.haomeiwen.com/i18862822/a7a09ab5a9ef0bc4.png)
执行出现乱码
![](https://img.haomeiwen.com/i18862822/5a0e3ba55316a57f.png)
解决乱码问题,通过创建变量的方式
定义变量
![](https://img.haomeiwen.com/i18862822/00553519da40d6bb.png)
赋值
![](https://img.haomeiwen.com/i18862822/2944e0c46bcd50f1.png)
结果展示
![](https://img.haomeiwen.com/i18862822/13094507ca27e07b.png)
六、调整格式:创建Style“ZSF_HY101_01”
![](https://img.haomeiwen.com/i18862822/f42cb412d863971b.png)
创建段落格式 结点
![](https://img.haomeiwen.com/i18862822/241112afd6b7a1aa.png)
![](https://img.haomeiwen.com/i18862822/4306e100547205b7.png)
选择“T0”
![](https://img.haomeiwen.com/i18862822/91d5889bf1f2629b.png)
使用格式,在smartforms中填入刚才创建的格式
![](https://img.haomeiwen.com/i18862822/efc58465a7ff28fa.png)
![](https://img.haomeiwen.com/i18862822/ea53fd3c573f808f.png)
结果查看
![](https://img.haomeiwen.com/i18862822/f544a0b6e1486af3.png)
七、显示实时变量
1.动态显示信息——学员(鼠小倩)信息卡
首先把数据动态传入到信息表中
![](https://img.haomeiwen.com/i18862822/ad11323a40563a5a.png)
去掉初始化信息
![](https://img.haomeiwen.com/i18862822/76aa4d84fa8729db.png)
进行赋值
![](https://img.haomeiwen.com/i18862822/9335a99dad6ae744.png)
效果展示:
![](https://img.haomeiwen.com/i18862822/05c10d26d434affe.png)
2.表格显示:同理第二行 “鸿越”和“第几期”
首先进行定义
![](https://img.haomeiwen.com/i18862822/c8fe3fedf7a31f45.png)
定义第几期变量
![](https://img.haomeiwen.com/i18862822/cbe75fedffb149cd.png)
创建文本
![](https://img.haomeiwen.com/i18862822/72ea69e974738f4f.png)
style中调整格式、位置和字体大小
![](https://img.haomeiwen.com/i18862822/b57bcb6126f2fdd8.png)
form中调整格式
![](https://img.haomeiwen.com/i18862822/aa087629edbb5cde.png)
填写输出行数
![](https://img.haomeiwen.com/i18862822/641aa315230ba357.png)
保存激活查看效果
![](https://img.haomeiwen.com/i18862822/1fea7bcfc2eed794.png)
同理:年龄、性别、出生年月、考勤明细、系统日期、系统时间
![](https://img.haomeiwen.com/i18862822/f93835ca6c3bc5ed.png)
注意系统日期和系统时间,添加系统变量“SY-UZEIT”和“SY-DATUM”
![](https://img.haomeiwen.com/i18862822/ca05d3d7f43ebbba.png)
![](https://img.haomeiwen.com/i18862822/5abe23f79b41e396.png)
八、添加显示图片信息
首先SE78上传图片
(1)首先导入图片
![](https://img.haomeiwen.com/i18862822/fffeee7493cfa699.png)
(2)上传成功进行传输
![](https://img.haomeiwen.com/i18862822/f266f3a553a2fe4e.png)
预览查看
![](https://img.haomeiwen.com/i18862822/c10a98d72c0310ed.png)
(3)form中创建graphic,填写se78中上传到系统中的头像
![](https://img.haomeiwen.com/i18862822/96579a254ecb8c50.png)
(4)上传成功
![](https://img.haomeiwen.com/i18862822/a510a44abbafa01b.png)
注意:图片上传问题可参考:(54条消息) SE78上传BMP格式图片出错,出错信息提示上传的不是BMP格式图片_-_0的博客-CSDN博客
九、考勤明细传输数据补空行
补空行有两种方式,一种是通过smartforms补空行,另一种是通过传输数据代码的方式补空行
![](https://img.haomeiwen.com/i18862822/b88e60b9fcaaadc2.png)
(1)在程序“ZHYR01_20220728_HY101_01”的“frm_get_data”FORM表单中 插入代码
*首先查看查询的记录
DATA: L_LINE TYPE I, "定义行数
L_LKH TYPE I. "定义补空行
DESCRIBE TABLE GT_ZXYKQ LINES L_LINE."查看表中有多少行
IF L_LINE = 0. "判断如果行数=0.补充10个空行
L_LKH = 10.
ELSE.
L_LKH = 10 - L_LINE.
ENDIF.
* 补空行
DO L_LKH TIMES.
CLEAR GT_ZXYKQ.
APPEND GT_ZXYKQ.
ENDDO.
效果展示
![](https://img.haomeiwen.com/i18862822/a9a563f286450993.png)
(2)在smartforms中处理00:00:00的时间,时期为0时间不显示
![](https://img.haomeiwen.com/i18862822/7b2d2ff2d81af9ff.png)
效果查看
![](https://img.haomeiwen.com/i18862822/14608a482b385925.png)
十、添加考勤明细内容
(1)添加全局变量GS_ZXYKQ考勤信息
![](https://img.haomeiwen.com/i18862822/30340a7b8b64b871.png)
(2)创建LOOP循环,然后把明细拖拽到创建的LOOP下
![](https://img.haomeiwen.com/i18862822/abdaf81a9f641c17.png)
(3)创建text文本,添加考勤日期、考勤时间、考勤期间变量
![](https://img.haomeiwen.com/i18862822/7b0633381af94df2.png)
(4)执行查看效果
选择的查看的期间
![](https://img.haomeiwen.com/i18862822/c0d1af76ec55013c.png)
结果展示
![](https://img.haomeiwen.com/i18862822/edc05a836bf11b77.png)
总结:
SMARTFROMS表单制作是通过选择屏幕的信息,查出相应的数据,放入两个内表,执行处理数据;然后通过调用两个function函数,调用smartforms进行打印数据,smartforms程序执行是通过自上而下执行的,先设置样式、接口、全局变量、初始化,然后进行打印。
网友评论