1 引言1.1 目的及范围本文档主要介绍Smarform使用方法。
可适用于ABAP开发人员,分析人员使用。
--最全1.2 参考资料•《SAP程序设计》•/saphelp_nw70/helpdata/en/a5/de6838abce021ae10000009b38f842/fram eset.htm1.3文档结构文档的各章节介绍的内容如下:•概述整个form的属性及用法•完整案例•附注2 Smartform应用及概述Smarform主要是SAP针对商业处理中固定格外文件批量打印的一种工具。
主要分为Form、Style、Text module三个组成部分,此三个组成部分都可以被单独创建和重复利用(T-CODE:SMARTFORMS),下面将分别讲解三种工具的使用方法。
3 上传背景图片输入TCODE:SE78: 选择 Form Graphics→Stored on Document Server→Graphics General Graphics→BMAP Bitmap Images点击按钮导入图片图片属性,导入成功4 FORM创建4.1 创建界面输入T-CODE:SMARTFORMS,进入以下界面,输入Form名称:ZHZP_SM_TEST,点击Create进入编辑窗口:此窗口分为三个区域:左边区域:包括全部变量,和树形结构的节点导航。
当点击相应的节点时,中间区域将会显示该节点的属性,中间区域:维护各个节点的属性等右边区域:图形化窗口绘制,可以手动调节节点分布位置,实现节点在页面的布局点击保存并选择PACKAGE和CR节点全局设置包含表格属性, 表格接口, 全局定义Field按钮控制Form中参数和系统变量的显示4.2 节点介绍Form是由不同类型的节点组成。
一个Form包含了一个或者多个Page,第一个Page是Form执行的的开始(当创建Form时,系统默认创建这个Page),下面将讲解每个节点的功能及其包含的子节点,4.2.1 输入区域此两种节点创建FORM时,系统默认创建一个PAGE,和一个Main window4.2.2 不包含下级节点的节点4.2.3 列表输出4.2.4 逻辑空控制节点4.2.5 其他节点所有节点共同的选项4.3 创建模板:T emplate节点用于创建文档中的静态表格,即在打印前已经确认了行数。
如果打印的行数不确定,需要用Table节点或者Loop循环Template输出,以下为创建过程:鼠标右键->创建->模板点击创建后出现模板的属性设置界面,有三个页签:这里最重要的是行类型的设置,它代表了表格中一行数据的样式(比如多少个单元格,每个单元格长度宽度,边框等),可以设置设置不同的行类型。
点击修改笔可以直接在白色编辑区域直接画,也可以点击细节直接输入数据。
点击细节画面.注意字段“参考“是引用另一行样式设置,则不需要再重新设置样式:系统提供了很多打印样式,可以选择,也可以自己设置样式,具体设置详见下一章节介绍。
条件页签:此节点执行条件:只有满足了设置了条件,才能执行此节点及它包含下一节点的内容额外属性:设置的事件将会执行4.4 创建文件夹鼠标右键->创建->文件夹有两个页签,功能同创建模板的一样4.5 创建文本Text输出文本,有四种类型,一般情况下选择E或者M类型即可鼠标右键->创建->文本有四个页签,其中“输出选项"和”条件“同以上两种节点。
针对文本节点,在输出选项需要特殊处理:设置行与列的位置,可参考在模板中设置的行类型。
详见下图设置文本类型类型为文本元素;可以直接输入要显示/打印的内容,如Airline,也可以动态数据输出,则需要点击“添加“按钮注意:字段前后需要增加符号“&“4.6 执行SMARTFORMSForm创建成功并激活后,系统自动生成一个FM.执行FM可以预览结果并打印。
手动执行此FM或者程序调用这个FM实现执行Form的功能。
程序调用将在案例中讲解,此处讲解执行执行FM.F8或者点击执行按钮生成的FM:执行FM,可以选择打印机,并提供打印预览和直接打印的功能4.7 创建smartforms 样式Smartforms的样式主要就是定义一些字体, 颜色,字体大小一些对齐方式什么的,然后段落的格式, 首先输入TCODE:smartforms进入创建smartforms的界面。
如图:点击创建之后进入样式创建界面样式中分三部分,表头,段落,字符,我们可以针对自己想要的样式来定义一些,然后用与smartforms中, 三部分的解释如下:4.7.1 创建表头数据创建Style时系统默认显示配置表头数据然后创建段落的格式有左对齐,右对齐,居中的完后需要回到表头数据中把标准段落填上,不然无法激活点击保存,激活,这样样式就是初步完成,后面根据samrtforms中的应用情况做想应得调整.5 文本模块创建文本模块作为Form中节点文本一个类型,维护了它,则可以多个Form共同使用,提供Form创建的效率。
两个页签组成:同创建文本一样,可以动态和静态类型6 案例6.1 案例描述以下是客户预订航班清单,要求只有第一页有表头。
我们将依次案例创建Form。
输入Tcode:SMARTFORMS,创建Form: zhzp_sm_test系统默认生成Page和Window进入维护界面:6.2 设置背景图片在PAGE1中可以设置背景图片6.3 创建接口参数I_CARRID,I_CONNID,I_FLDATE,I_FLAG为查询条件:航空公司,航班,日期,输出方式标识如果有要输出的数据可以在EXPORT中定义,如输出或输入有表格则可以通过Tables定义,这里我们只定义四个个查询输入参数,取数逻辑由于简单就放到smartforms中来实现了。
6.4 创建全局变量全局变量GT_SBOOK用于保存预订的航班清单,GW_SBOOK用于循环处理时工作区。
GV_TABIX用于流程控制,后面将讲到。
6.5 创建节点程序行:此处写代码获取要打印的航班清单。
当然,要打印的数据可通过接口传,这里只是为了演示节点的创建过程。
输入参数,输出参数,代码段6.6 创建节点可选条件这里创建这个节点是用于碰到打印输出是以表格还是模板6.7 TURE节点下创建节点循环循环处理航班清单6.8 循环下创建节点程序行:用于实现第一页有表头的条件判断。
6.9 创建节点模板(Template)此节点需要创建在Loop下。
并设置每行的样式,可以设置很多不同的,这里我们简单设置一种6.10 模板下创建可选择节点条件设置:只有第一行才执行打印表头6.11 创建文本在可选的节点的True节点中创建,此处将创建表头False中创建内容另外还有一点比较重要就是行列的设置6.12 最终的节点分布6.13 创建表格(table)节点这类型的创建,我们讲解的时候再创建.6.14 程序调用FormFM: SSF_FUNCTION_MODULE_NAME获取Form生成的FM,动态调用此FM 代码如下:REPORT zhzp_call_sm_sbook.DATA:lv_fm_name TYPE rs38l_fnam.DATA: control_parameters TYPE ssfctrlop.DATA: output_options TYPE ssfcompop.PARAMETERS:p_carrid TYPE s_carr_id,p_connid TYPE s_conn_id,p_fldate TYPE s_date,p_flag TYPE flag DEFAULT 'X'.control_parameters-no_dialog = 'X'.control_parameters-preview = 'X'.output_options-tddest = 'LONP'.*获取Form生成的FMCALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'EXPORTINGformname = 'ZHZP_SM_TEST' "Form的名称IMPORTINGfm_name = lv_fm_nameEXCEPTIONSno_form = 1no_function_module = 2OTHERS = 3.IF sy-subrc <> 0.MESSAGE 'The Form is not exit' TYPE 'E'.ENDIF.*执行Form生成的FM进行打印CALL FUNCTION lv_fm_nameEXPORTINGcontrol_parameters = control_parametersoutput_options = output_optionsuser_settings = spacei_carrid = p_carridi_connid = p_connidi_fldate = p_fldatei_flag = p_flagEXCEPTIONSformatting_error = 1internal_error = 2send_error = 3user_canceled = 4my_exception = 5OTHERS = 6.IF sy-subrc <> 0.MESSAGE 'Print fail' TYPE 'E'.ENDIF.7附注7.1 合并单元格对于在实际的报表开发中经常回需要合并单元格的情况,合并单元格的情况可以用两种方式实现,一种是通过多个窗口拼接来实现,一种是用模板无边框,下面就简单的讲解这两种方法:7.1.1 多窗口拼接先创建相应的窗口:然后在窗口下创建相应的模板这样就很简单的实现了单元格的合并如果有循环则可以在每个模板前加循环就行了7.1.2 无边框实现先建一个窗口,然后在窗口下建一个模板设置完后如图。