SAP ABAP SMARTFROMS表单

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的打印效果:

02 SMF表单开发技巧

  • 创建Form-表单版式
  • 创建Style-文本样式
  • 创建 Text Module-文本模块
  • 创建 图片组件
  • 程序调用SMARTFORMS

SMF表单开发技巧-1.创建Form-表单版式

TCODE:smartforms

SMF表单开发技巧-2.创建Style-文本样式

SMF表单开发技巧-3.创建 Text Module-文本模块

SMF表单开发技巧-4.创建 图片组件

TCODE:se78

SMF表单开发技巧-程序调用SMARTFORMS

TCODE:se38

03 SMF表单开发实战

业务背景:
通过前期开发的学员信息录入功能,积累的学员信息数据;现需要使用SMARTFORMS实现学员信息卡片打印。

功能分析:
1)为实现打印功能,需用SMARTFORMS方式;开发学员卡片打印程序。
2)课堂上确认具体格式需求。

打印效果界面

实战练习

一、SE38创建程序(作为SMARTFORMS的载体)

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.

运行结果展示

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

然后进入samrtforms画板窗口界面,分为三部分:左侧导航窗口,中间明细窗口,右侧画板窗口。

2.添加文本控件
创建控件text文本

点击执行

再次执行

再次执行

出现打印界面

打印成功

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成功

执行打印

调用成功

注意:调用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.

设置断点,看是否已经从表里获取到了数据

执行


F6执行,双击变量

获取数据成功


学员信息表
学员考勤表

四、传递数据,传递数据到smartforms表单中

(1)定义两张表

form表单中进行赋值

(2)定义结构

(3)添加变量

(4)给变量进行赋值

se38激活执行程序

数据传递成功

五、绘制smartforms表单

(1)创建屏幕,存放表头、内容、表尾

(2)窗口添加模板。给窗口画格子。

效果展示

同理创建明细和表尾的模板。

模板页创建完成

(3)添加内容——“学员信息卡”。

执行出现乱码

解决乱码问题,通过创建变量的方式
定义变量

赋值

结果展示

六、调整格式:创建Style“ZSF_HY101_01”

创建段落格式 结点

选择“T0”

使用格式,在smartforms中填入刚才创建的格式

结果查看

七、显示实时变量

1.动态显示信息——学员(鼠小倩)信息卡
首先把数据动态传入到信息表中

去掉初始化信息

进行赋值


效果展示:

2.表格显示:同理第二行 “鸿越”和“第几期”

首先进行定义

定义第几期变量

创建文本

style中调整格式、位置和字体大小

form中调整格式

填写输出行数

保存激活查看效果

同理:年龄、性别、出生年月、考勤明细、系统日期、系统时间

注意系统日期和系统时间,添加系统变量“SY-UZEIT”和“SY-DATUM”

八、添加显示图片信息

首先SE78上传图片
(1)首先导入图片

(2)上传成功进行传输

预览查看

(3)form中创建graphic,填写se78中上传到系统中的头像

(4)上传成功

注意:图片上传问题可参考:(54条消息) SE78上传BMP格式图片出错,出错信息提示上传的不是BMP格式图片_-_0的博客-CSDN博客

九、考勤明细传输数据补空行

补空行有两种方式,一种是通过smartforms补空行,另一种是通过传输数据代码的方式补空行

(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.

效果展示

(2)在smartforms中处理00:00:00的时间,时期为0时间不显示

效果查看

十、添加考勤明细内容

(1)添加全局变量GS_ZXYKQ考勤信息

(2)创建LOOP循环,然后把明细拖拽到创建的LOOP下

(3)创建text文本,添加考勤日期、考勤时间、考勤期间变量

(4)执行查看效果
选择的查看的期间

结果展示

总结

SMARTFROMS表单制作是通过选择屏幕的信息,查出相应的数据,放入两个内表,执行处理数据;然后通过调用两个function函数,调用smartforms进行打印数据,smartforms程序执行是通过自上而下执行的,先设置样式、接口、全局变量、初始化,然后进行打印。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容