目录
调用SSF_OPEN函数设置打印机,打开输出请求,使用用户打印设置
调用Smartforms 的Function Module打印– smart表及变量传递
一、Smart forms 创建
1.概述
Smart forms 是在SAP Script form的基础上产生的新的表单制作工具,但是smart forms 使用更加方便,会直接生成功能块( function module),ABAP程序中调用更加方便。
实例 ZSD_SF_007
2.Smart forms
首先去SE11创建结构
事务代码:smartforms 进入创建界面
命名规则:
Z<XX>_SF_<SHORT TEXT>
<XX>-业务模块,
<SHORT TEXT>-简短描述,字母或数字
【不同的项目会有一部分的调整】
屏幕分为三个部分:
1、树形导航工具:显示层次结构
2、维护屏幕:节点相关属性的设计
3、窗口绘制器:设计输出页面格式
定义Smart Forms 的全局设置
1、表格属性:设置表格的样式,页面的格式,输出格式等。
2、表格接口:用来描述接口属性,输入、输出、表参数,程序调用时传递接口参数。
3、全局定义:主要用来定义一些全局数据,还有FIELD SYMBOLS,初始化等。
设定全局设置—表格接口
用于设置通过Call Function调用Smart Forms时的参数
1、导入—对应Call Funtion Exporting参数,用户也可以增加参数。
2、导出—对应Call Funtion Importing参数,用户也可以增加参数。
3、表—对应Call Funtion Table参数,用户也可以增加参数
4、例外—对应Call Funtion Exceptions参数,即出错捕捉参数。
设定全局设置—全局定义
全局数据:可以定义在Smartform内部使用的全局变量,参考打印内容可以时系统提供的I、C等类型,也可以是已存在的数据库表、结构,还可以是Smartform中定义的类型。
(注:此处类型分配的值必须选择Type 或者 Type ref to (对象分配),用LIKE 有时会报错。)
1、类型:定义内部使用的类型,此处均使用TYPES语句定义。
2、 字段符号:定义Smartform内部使用的FIELD-SYMBOL变量。
此处定义的变量必须以”<”开始,以“>”结束,如:
FIELD-SYMBOL:<dbtable> type any 。
3、初始化:定义初始化处理内容。
4、货币/数量字段:定义货币/数量类型的全局变量的参考字段
设置页和窗体
什么是页?
1、Smartform的组成元素
2、Smartform是由页组成的,包含至少一页或多页
3、每一页包含多个节点,节点可以是窗体、地址、图形等。
什么是窗口?
1、页的组成元素
2、窗口分为主窗口、次窗口、拷贝窗口、最终窗口。
窗口类型—主窗口
1、主窗口一般用于数据的列表显示,用于loop循环显示;当然也可以显示非列表内容。
2、一个Form中只能包含一个主窗口
3、主窗口可以分页输出,连续输出到几页
4、主窗口的宽度必须一致,高度和位置可以任意指定。
窗口类型—次窗口
1、次窗口主要用于非列表显示内容的输出
2、每一页中可以包含多个次窗口
3、次窗口不可分页输出
窗口节点
(1)文本节点
建立文本节点输出文本内容,是最后一级节点
可以使用文本编辑器,编辑文本内容,也可以直接输入文本,也可以动态输出文本。
(2)表
列表内容显示,可按一定条件循环显示 Internal Table中内容
可自定义表的显示格式、列宽、列数量
可以进行汇总统计
表包含表头、主要区域、脚标三部分
表头:显示列标题
主要区域:LOOP循环显示区
脚标:页脚区
表的属性设置

点击细节按钮,设置行类型、每列宽度等内容
(3)模板
模板用于按一定格式输出一组文本
可自定义模板的显示格式、列宽、列数量
模板通常在次窗口中输出文本
可设置模板的执行条件
可根据模板的列数,增加相同数量的文本节点
(4)流逻辑
可选节点、循环节点、程序行、命令行
窗口节点—流逻辑—循环节点
此节点用于输出Internal Table内容,
循环节点的下级节点一般设置为模板节点
循环节点定义要输出Internal Table的内容,下级的模板节点则定义循环输出的每行格式
循环节点的属性设置
3、Smartform样式
T-CODE: SMARTFORMS后,点击样式创建。
表头数据
表头数据定义该样式的默认设置
表头数据中的标准段落必须指定
段落样式
创建段落格式
定义不同段落的格式
缩进和空格:设置对齐方式、行间距、段落缩进
字体:设置字体格式
标签:用于设置一个段落中多个标签的位置
编号与框架:按提纲方式设置段落
字符格式
可设置文本二维码形式显示
条形码名称创建T-CODE:SE73
Smartform文本模块
文本模块用于定义文本模板,以便在Smartform报表中使用
文本模块中只需定义文本内容即可使用
在文本节点中使用文本模块时,文本节点一般属性要选择【文本模块】,此时在【名称】处选项定义的文本模块即可。
Smartform页格式设置
1、在SPAD里找到设备类型,在页格式的地方,点击显示;创建页格式
2、把页格式分配给格式类型,在SPAD里找到设备类型,在格式类型的地方,点击显示
3、格式类型设备类型,在SPAD里找到设备类型,在设备类型的地方,点击显示;找到CNSAPWIN后, 双击,然后点格式。
二、Smart forms 程序调用
触发按键,调用函数
CASE u_ucomm.
WHEN 'PRINT'.
READ TABLE gt_out INTO gs_out WITH KEY sel = 'X'.
IF sy-subrc NE 0.
MESSAGE e208(00) WITH '请选择需要打印的数据!'."报错
ENDIF.
PERFORM frm_print_value.
ENDCASE.
调用smart名字
DATA: lv_formname TYPE tdsfname.
DATA: w_sfname TYPE rs38l_fnam.
lv_formname = 'ZMMSF013'. "改成自己的SMART名字
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = lv_formname
IMPORTING
fm_name = w_sfname
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
打印控制
设置ssfcompop 、ssfctrlop 类型参数,配置打印控制
直接打印—不显示Dialog;显示Dialog –手工打印
DATA: w_control TYPE ssfctrlop,
w_output_options TYPE ssfcompop.
DATA: w_job_output_options TYPE SSFCRESOP.
w_output_options-tdimmed = 'X'.
w_output_options-tddelete = 'X'.
w_output_options-tddest = 'LP01'.
w_control-no_open = 'X'. "没有新的假脱机请求
w_control-no_close = 'X'. "不关闭假脱机请求
调用SSF_OPEN函数设置打印机,打开输出请求,使用用户打印设置
必须调用SSF_OPEN.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
output_options = w_output_options
control_parameters = w_control
IMPORTING
job_output_options = w_job_output_options
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' "sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
RETURN.
ENDIF.
调用Smartforms 的Function Module打印– smart表及变量传递
DATA: ls_head TYPE zssd_vbak,
ls_item TYPE zssd_vbap,
lt_item TYPE STANDARD TABLE OF zssd_vbap.
zssd_vbak和zssd_vbap都是之前smart forms建立的类型
CALL FUNCTION w_sfname
EXPORTING
control_parameters = w_control
gs_head = ls_head
IMPORTING
job_output_options = w_job_output_options
TABLES
gt_item = lt_item
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
LEAVE LIST-PROCESSING.
ENDIF.
SORT gt_out BY vbeln posnr.
CLEAR: ls_item.LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_item>) WHERE sel EQ 'X'."当用AT NEW语法时,要采用指针的方式
* MOVE-CORRESPONDING gs_out TO ls_item."将gs_out的数据循环匹配给ls_item
ls_item-posnr = <fs_item>-posnr .
ls_item-matnr = <fs_item>-matnr .
ls_item-maktx = <fs_item>-maktx .
ls_item-menge = <fs_item>-kwmeng .
ls_item-meins = <fs_item>-meins .
ls_item-remark = '测试SMARTFORMS' .
APPEND ls_item TO lt_item.
AT NEW vbeln.
ls_head-kunnr = <fs_item>-kunnr.
ls_head-name1 = <fs_item>-name1.
ls_head-vbeln = <fs_item>-vbeln.
ls_head-werks = <fs_item>-werks.
"调用Smartforms 的Function Module打印–smart表及变量传递
CALL FUNCTION w_sfname
EXPORTING
control_parameters = w_control
is_head = ls_head
IMPORTING
job_output_options = w_job_output_options
TABLES
it_item = lt_item
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
LEAVE LIST-PROCESSING.
ENDIF.
CLEAR:lt_item[],ls_item,ls_head.
ENDAT.
ENDLOOP.
关闭打印机设置
DATA: job_output_options TYPE SSFCRESCL.
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
job_output_info = job_output_options
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' "sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
RETURN.
ENDIF.
实例 ZTEST_3_29
三、常用查表方法
查表方法1—F1
F1:最常用的查询方法,比较快捷实用,按F1,然后去看Technical Information(技术信息)。
查表方法2—SE16N
SE16N:进入T-CODE,查询具体数据点击联机,查表点击扩展的搜索。
查表方法3—CDHDR and CDPOS
CDHDR and CDPOS :比较实用,这两个表记录了SAP内所有的修改记录,一个是header信息,一个是item信息。
查表方法4—ST05
ST05: SQL Trace记录了在系统里所作的所有操作访问了数据库的那些表。访问的表很多,需要花时间去分析,新手不太实用。
四、Excel 导入程序介绍
系统实例讲解,程序:ZSDR_EXCEL。
上传批导模板,T-CODE:SMW0