Smart Form Tutorial(适用新手学习)
用TCode: SMARTFORMS创建一个空白的Form。双击左边树状结构中的'Global Setting'->'Form Attributes'。在 里头可以看到纸张的设置,默认是A4。这里还可以调正一页中可以打印多少行。
我们生成一个Form的同时,系统也创建了一个相应的function module。Form与Application的数据交换就是通过function的interface来实现的。双击左边树状结构中的'Global Setting'->'Form Interface',我们可以看到 ,这和我们在SE37中看到的function module的接口是一样的。点击'Table'这个tab,输入如下:
这里定义的是在form中共用的全局变量,还可以定义subroutine。 是form初始化的时候调用的一个routine,可以在这里做一些data初始化的工作。 用来设置货币或者数量的单位关联用的。
下面是'Global Data'里头的定义:
上图中的T_SUM类型是我在'Types'里头定义的,其中PRICE, CURRENCY是用来做sum用的:
BEGIN OF T_SUM,
PRICE TYPE S_PRICE,
CURRENCY TYPE S_CURRCODE,
END OF T_SUM.
回过头我们要创建一个给这个Form使用的Style。还是用SMARTFORMS这个TCode来创建。在这个Styel里头我只创建了'Paragrah Format',真正的项目中'Character Format'肯定也是不可缺少的。这个Style使用在Step 1 中创建的Form所有的Output Option中。
M2: Aligned:right;Indent->right margin:0.20 CM;font family: Arial;font size: 11pt
M3: Aligned:right;Indent->right margin:0.20 CM;font family: Arial;font size: 12pt;font color:blue
T1: Aligned:center;font family: Arial;font size: 14pt;font style: Bold Italic
在 下创建一个名为'FIRSTPG'的page,并把它的next page设置为其本身。Page Format设置为'Portrait Format'。
Windows的Position and Size如下(单位都是CM):
MAIN: L2.00, U2.00, W16.00, H25.00
FOOTER: L2.60, U27.20, W14.70, H2.00
在'HEADER' Window node下面创建一个Text,取名'TITLE'。Text type设置成'Text Element'。再PC Editor中点 输入 。T1就是在Step 3里头定义的Paragraph Format。
在'MAIN' Window node下面创建一个Table, . Table下面自带了三个node: header, main area, footer,颜色跟别的由用户创建的node有区别。其中Table的header node下面我们可以放表头。Table的footer node跟我们在Step 6创建的FOOTER Window有区别。FOOTER Window的位置是固定的,Table的footer是Table的line在哪里结束,它就紧跟在后面。文章开头的打印结果中我们可以很直观的看到这两个的区别:FOOTER Window在每页的最下面(打印了两次,尽管内容不一样),Table footer在第二页中间只打印了一次。当然我们说的都是默认的情况。
Output Parameters: G_REC_TOTAL, G_TAB_TOTAL, G_ITEMS_ONPAGE;
CLEAR: G_REC_TOTAL, G_REC_SUBTOTAL, G_ITEMS, G_ITEMS_ONPAGE.
DESCRIBE TABLE G_TAB_DATA LINES G_ITEMS. "Get total item number
Line Type是控制表格格式的,每一个Table Line都要指定一个Line Type
Layout如下图,注意这些Line的border是框了线的
G_TAB_DATA是Step 2在Form Interface定义的一个内部表,也就是从Application传过来准备给Form显示的数据。我们还想让显示的数据排一下序,当然这可以在外部程序中SORT,不过这里的排序还有触发event的作用,后面会讲到。如果内部表已经排好序了,只是想触发类似LOOP的AT NEW/AT END OF这样的功能,那么把 这个勾上就好。下面是SORT的设置,我们对CARRID(Airline),CONNID(Flight No.)排序,并且要触发两个events,用来做subtotal统计。
是用来对Table的Fields做简单计算的,包括'Number', 'Total', 'Mean Value'。如果不是涉及到货币或者数量的统计我们可以用'Total'这个Operation,具体使用可以参考help。我这里用了'Number'做一个每页的Items统计,'Number'也可以用来做行号。
在Table 'FLIGHTINFO'的header node下增加table line :HEADER_LINE。LINE TYPE选'Line1'。tablbe line自动带出5个cell,cell的数目是根据LINE TYPE :'Line1'来的,Step 10里头可以看到Line1是有5个cell的。我们在每一个cell下面添加一个Text,作为colum title,把paragraph format设置成M1。不过'Price'这个Column因为是数字,paragraph format设置成M3
P.S.Table自带的header的Output Option->Print Time有两个选项
at start of Table就不说了,不过at Page Break工作不正常,第2页并没有打印出来title,也不知道是不是我写的问题。
Main Area是显示Application传进来的内部表的地方,和Step 13一样增加一个Line Type=LINE1的Table Line,每个Cell下各增加一个Text,属性设置成'Text Element'。
点PC Editor的 ,编辑Text内容,以CARRID为例:
CURRENCY_DATA下的Programe Line: SUM,是为了做合计用的,按照Currecy的不同将Price合计。(当然单价Price的合计没什么实际意义,权当是演示)
Output Parameters: G_REC_TOTAL, G_TAB_TOTAL;
G_REC_TOTAL-CURRENCY = G_REC_DATA-CURRENCY.
COLLECT G_REC_TOTAL INTO G_TAB_TOTAL.
COLLECT G_REC_TOTAL INTO G_TAB_SUBTOTAL.
CLEAR: G_REC_TOTAL.
在table的footer node下增加一个loop node, 。
Loop的DATA如下:
因为我只想在所有的记录打印结束之后显示总计,所以给这个loop增加一个condition。在Condition Tab里的Output Condition中增加一行:
G_ITEMS_ONPAGE在Step 12中被赋值Number, G_ITEM在Step 9被赋值内部表中的记录数,当这两个值相等的时候也就是记录输出完毕的时候。再给loop node下一级增加一行table line,LINE TYPE : LINE3
PRICESUM_TAB: M2 -> &G_REC_TOTAL-PRICE&
CURR_TAB: M2->&G_REC_TOTAL-CURRENCY&
我们在Step 10里头的Sort中勾选了CARRID字段的两个事件之后就能够发现table node 自动增加了两个节点:
首先在'CARRID Event on Sort Begin'下一级增加一个Program Line:SUB_CLEAR,用来在CARRID改变的时候清空subtotal内部表。
REFRESH: G_TAB_SUBTOTAL.
在'CARRID Event on Sort End'下一级增加一个Loop:PRINTSUBTOTAL:
Loop:PRINTSUBTOTAL:下一级增加一个table line:SUBTOTAL,LINE TYPE : LINE3
SUB_PRICE: M2 -> &G_REC_SUBTOTAL-PRICE&
SUB_CURR: M2->&G_REC_SUBTOTAL-CURRENCY&
AIRLINE_NAME print出来之后我们在Program Line 'SET_SUBTITLE'中将G_FLG_SUBTITLE设置为'X'。
在FOOTER Window的下一级添加一个Table Line: FTTABLE, Line Type:
DATA:
然后,在FTTABLE的Main Area下增加一行Table Line: PRICESUM, Line Type: LINE1
为了控制在最后一页的页脚打印出来金额合计,要给PRICESUM增加一个条件。在Conditions Tab里头的
And Additional Event中勾选'Only after end of main window'。'SUM'和'CURR'这两个Text的设置如下:
CURR: M2->&G_REC_TOTAL-CURRENCY&
ITEMS: M2 -> ITEMS IN THIS PAGE:&G_ITEMS_ONPAGE(3)&
PAGE: M2->PAGE:&SFSY-PAGE&
生成smart form的同时系统会自动创建一个对应的funtion module,这个function的名字可以通过菜单Enviroment->Function Module Name得到。在程序中一般通过function 'SSF_FUNCTION_MODULE_NAME'来得到。下面是我们的测试这个smart form的代码:
*& Report Z_SUN_SFORM
*&
*&---------------------------------------------------------------------*
************************************************************************
* D E C L A R A T I O N O F I N T E R N A L T A B L E S
************************************************************************
DATA:
G_TAB_OUTPUT TYPE STANDARD TABLE OF SFLIGHT.
* D E C L A R A T I O N O F V A R I A B L E S
************************************************************************
DATA:
G_REC_OUTPUT TYPE SFLIGHT,
G_REC_OPTIONS LIKE ITCPO,
G_REC_RESULT TYPE ITCPP.
************************************************************************
* D E C L A R A T I O N O F C O N S T A N T S
************************************************************************
CONSTANTS:
G_CON_FLG_ON TYPE C VALUE 'X',
G_CON_FORMNAME(8) TYPE C VALUE 'ZBSUN_01'.
* S E L E C T I O N S C R E E N
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME.
SELECT-OPTIONS S_LINE FOR G_REC_OUTPUT-CARRID NO INTERVALS.
SELECT-OPTIONS S_DATE FOR G_REC_OUTPUT-FLDATE.
SELECTION-SCREEN END OF BLOCK BLOCK1.
* S T A R T - O F - S E L E C T I O N
************************************************************************
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
* E N D - O F - S E L E C T I O N
************************************************************************
END-OF-SELECTION.
PERFORM FRM_OUTPUT.
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* GET FLIGHT DATA
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
SELECT *
INTO TABLE G_TAB_OUTPUT
FROM SFLIGHT
WHERE CARRID IN S_LINE
AND FLDATE IN S_DATE.
IF SY-SUBRC <> 0.
MESSAGE E000.
* No data selected.
ENDIF.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT
*&---------------------------------------------------------------------*
* OUTPUT DATA
*----------------------------------------------------------------------*
FORM FRM_OUTPUT.
DATA: FM_NAME TYPE RS38L_FNAM.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZBSUNTEST'
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
FM_NAME = FM_NAME
* EXCEPTIONS
* NO_FORM = 1
* NO_FUNCTION_MODULE = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_PARAMETERS =
* CONTROL_PARAMETERS =
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
* OUTPUT_OPTIONS =
* USER_SETTINGS = 'X'
* IMPORTING
* DOCUMENT_OUTPUT_INFO =
* JOB_OUTPUT_INFO =
* JOB_OUTPUT_OPTIONS =
TABLES
G_TAB_DATA = G_TAB_OUTPUT
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
* <error handling>
ENDIF.
转载于:https://www.cnblogs.com/duadu/archive/2007/07/23/6166698.html
Smart Form Tutorial(适用新手学习)相关推荐
- 课工场java新手基础教程_Java新手学习路线,学Java不走弯路
Java新手学习路线,学Java不走弯路 很多人都会有一个疑问,就是学习Java能看懂,但是不会写,所以学习Java一定要掌握一个有效率的学习方法,一个适合自己的学习方法,作为一个新人,千万不要自己瞎 ...
- python难不难学-超级适合新手学习的python教程,入门其实不难?
在互联网时代很多人都希望掌握一个与互联网相关的知识,比如Python的知识就非常重要,因为无论是操作新媒体平台还是去制作一些软件,我们都需要掌握一些Python的技巧,而且学习一些Python的知识, ...
- Smart Form中打印图标或符号
SmartForms中可以打印图标(icons)和符号(symbols)的,但是在打印预览界面不会显示,实际打印结果显示,我们可以将Smart Form转换成PDF格式,就会显示出来了. 1.T-co ...
- Smart Form不弹出假脱机设置界面直接打印预览
Smart Form主要通过SSFCTRLOP和SSFCOMPOP两个参数来配置打印控制的. 下面是一段实施代码: DATA: ctrl_param TYPE ssfctrlop, out_optio ...
- Smart Form中四种窗口类型的区别
smart form中4中类型的窗口: Main Window:主窗口 主窗口一般用于数据的列表显示,用于LOOP循环显示:当然也可显示非列表内容. 一个Form中只能包含一个主窗口. 主窗口可分页输 ...
- 新手学习DaVinci笔记一:查找资料篇
最近要学习DaVinci DM8148,由于之前没有接触操作过,TI的网页数据量很大.在网上零碎的查阅资料,一步一步的总结出来.本篇是TI查找资料篇,以DM8148为参考. 1:进入Ti官方网站,TI ...
- 按照一定策略把网页抓回到搜索引擎服务器的,SEO新手学习:搜索引擎的基本步骤...
初始搜索引擎的原理:第一步就是需要了解"搜索引擎的基本步骤". 搜索引擎的基本步骤(大概架构)如下.可以分成虚线左右两个部分:一部分是搜索引擎抓取:主动抓取网页进行一系列处理后建立 ...
- k6前级效果器怎么用_新手学习电吉他,效果器应选择单块还是综合?
作为一个新手来说,我建议一开始先选择综合型效果器. 这里我们先简单介绍下综合效果器与单块效果器. 综合效果器 可以理解为多个单块的综合体,即包含了很多种效果.一块大综合效果器可能就有三四十种预置音色, ...
- seo从入门到精通_新手学习SEO一个月能学会吗?
很多刚接触学习SEO的朋友都会问:"新手学习SEO需要多久,一个月能学会SEO吗?"这个问题,首先我想在这里问的:"学会"是怎样的一个定义?如果你想学习编辑刚刚 ...
最新文章
- 如何用两种方式同时实现ListBox的滚动功能
- JAVA基础——Switch条件语句
- HTML一些常用的标签
- 如何轻松学习 Kubernetes?
- 三种方式使得iOS应用能够在后台进行数据更新和下载
- 数字图像处理学习笔记(一):特征检测和匹配概述
- (四)Netty之Buffer缓冲区
- 苹果2024年推出真全面屏iPhone 但可能只是高端版
- oracle能不能改外键属性,CSS_小议Oracle外键约束修改行为(五), Oracle的外键用来限制子表 - phpStudy...
- python输出100到200的素数_python输出2到100之间的素数
- 电商3.0:构建互利共赢的生态圈
- easyUI 鼠标悬浮 和截取
- bootstrap拖动div_BootStrap modal实现拖拽功能
- python - break和continue
- 课题申报书范文_高等学校教改课题申报书范文
- matlab 三维图像 叠加,利用 Matlab构建“波的叠加”图样
- java 使用POI 导出 Excel 画斜线
- Web前端——什么是web前端,什么是HTML及其常用标签
- 沙盒和App Group
- 数值分析——自适应辛普森积分
热门文章
- hbase中的row key_hbase中RowKey的设计规则
- 【CLion】如何编译运行单个文件 (C/C++ Single File Execution插件的使用)
- ubuntu安装后需了解的基本操作
- 【渝粤教育】国家开放大学2018年秋季 0691-21T物理化学及实验 参考试题
- php网站点击按钮更新程序,php页面 点击按钮执行更新操作
- java怎么截取后8位数字_java如何更快生成00000000~99999999的8位数字保存到文件中?...
- 非负矩阵之Perron-Frobenius定理
- c语言大作业_2018 C语言大作业--21_Ekko制作教程
- matlab simulink_MATLAB之Simulink(二)利用switch模块将正弦信号变为方波信号
- c语言编简单博弈小游戏,[2018年最新整理]实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏.doc...