SMARTFORMS提高知识点
查看Form生成的函数
在设计好一个 smartform 后,系统会自动生成一个相对应的 function module , 我们在调用smartform时实际上就是调用这个对应的 function
如下我们可以找到对应的function: 点击菜单环境->功能模块名
注:程序调用Smart Form的时候,一定要用
CALL FUNCTION ’ SSF_FUNCTION_MODULE_NAME '先根据Smart Form名称得到它的函数名称fm_name。然后再 CALL FUNCTION fm_name调用Smart Form。因为Smart Form的fm_name可以重新分配,是个不固定值
SmartForm输出格式(输入类型)设置
货币和数量字段在打印时会使用空格在数字前填充字段长度,容易出现打印时无法显示实际数值,需要对输出格式进行设置,如下:
修改输出格式:
可以看到字段中空格都被删除了
常用转换格式类型如下:
Syntax | 说明 |
---|---|
&field+< offset>& | 对于字符变量设置从何位置显示数据,如果offset大于字符变量长度时,系统就不会显示任何数据 |
&field(< length>)& | 设置输出长度 |
&field(*)& | 如果该字段类型是abap数据字典里定义的类型,系统将按照字典定义的长度设置输出长度 |
&field(S)& | 禁止输出符号位 |
&field(<)& | 符号位显示在数据的左边 |
&field(.<nat.number>)& | 设置显示小数的位数 |
&field(E<nat.number>)& | 设置为科学标示法 |
&field(T)& | 禁止千分位的显示(适用于: DEC, CURR, INT和QUAN几种数据类型) |
&field(Z)& | 禁止数字前导0的显示 |
&field(I)& | 禁止显示空值 |
&field(K)& | 禁止类型系统按数据字典定义的转换函数进行输出转换 |
&field®& | 右对齐(只有在定义了输出长度时才有效) |
&field(F< filler>)& | 用< filler>指定的字符替换左边的空格 |
&field(L)& | 将日期转换为本地显示格式,使用JDAT指定的格式 |
&field©& | 该设置效果和ABAP的CONDENSE语句相同 |
/: SET COUNTRY country_key | 设置按某个国家显示小数点,千位符和日期的格式(注:这个包括下面两个SET命令只能在ScriptForm使用) |
/: SET DATE MASK = ‘date_mask’ | 设置日期显示格式 |
/: SET TIME MASK = ‘time_mask’ | 时间设置 |
SmartForm强制分页(抬头、项目表都显示)
报表设计
创建一个普通的ALV报表程序,内表数据分头表及行项目表,如下:
SmartForm设计
创建一个表单
SERIAL_NUMBER 每页数据的流水号
CURRENT_PAGE 当前页码
TOTAL_PAGES 当前班级总页码
HEAD_COUNTS 表头行数
HEAD_INDEX 处在表头第几行
TOTAL_AMOUNT 班级数量合计
LASTROW 是否为本班级最后一行
DISP_AUTO_PAGING_TXT 是否为当前页最后一行
在表输出前获取gt_head表行数:
根据head_index读取gt_head行信息并在表头输出:
1、如果是模板,强制分页命令要放在循环中;
2、如果是表格,强制分页命令要放在表的主要区域循环中,而不能放在表头部分。
强制分页可以控制每页固定显示的数据条数
在循环前对行项目表根据班级进行排序,否则无法准确根据LASTROW标识分页输出
在行项目表每次循环时,对需要小计或输出的页码进行逻辑处理:
根据全局变量的值判断是否需要分页,并强制分页:
在每页结束时需要对变量进行清理,否则会出现分页混乱情况:
实现效果
每页都显示标题及小计,每页显示5行数据
1班只有5个学生:2班有6个学生,分两页显示:
定义打印机纸张类型
关于打印纸张的定义,在国际上有很多通用的标准,如A5、A5等,这些通用的格式一般在Windows和SAP中都默认加载。但是,在实际应用中,经常会碰到一些不规范的纸张,对于这些非通用纸张,就需要用户在系统中自己定义相关的纸张格式了。
1、 通过SPAD假脱机管理工具中的“设备类型->页格式”可以自定义纸张,打开“设备类型”页签,在“页格式”字段中输入自定义名称,然后点击后面的“显示”按钮,显示“页面格式清单”页面,再点击“编辑”即可创建新的纸张:
2、 上面定义的纸张,下面再定义“格式类型”,“页格式”选择上面定义的ZF_PAGE,“类型”选择 S SAPscript的格式类型,这样就可以在SmartForm中进行调用了,如果是ALV,则要选择 L ABAP列表的格式类型:
定义好页格式和格式类型的,则需要将页格式(即纸张)分配到指定的设备类型。SAP的假脱机操作中是需要指定输出设备的,而每个输出设备需要设定设备类型。所以当打印时,只有属于该打印设备的页格式才能被操作。若没有维护的话,预览不会存在问题,但在选择打印时,系统提示错误。
目前对中文输出所使用的设备类型大部分都默认为“CNSAPWIN”,在“设备类型”中输入“CNSAPWIN”,再点击“显示”,出现以下界面:
点击格式,将列出该设备所支持的所有格式类型:
需要对打印机操作维护基本的指令,没维护指令时,操作该类型的报表数据可能会出现打印机不切纸或者不执行打印问题。需维护的指令和打印机的驱动存在关系,可以参照CNSAPWIN下已经维护好的格式类型来维护。
以SAP标准的A4纸张(DINA4)为例,一般需要维护操作包括:打印初始化、尾页、行结束,如:
最后就可以在SmartForm编辑器里选择上面自定义的“页格式(纸张)”了:
显示一个长30宽20的横向纸张,效果如下:
Smartforms 打印二维码
注:SAP_BASIS版本在731以上系统会自带二维码类型,否则需要安装插件。
创建系统二维码
TCODE:SE73
条形码和二维码的创建过程相同,只是选择的CODE不同:![在这里插入图片描述](https://img-blog.csdnimg.cn/33cf22fd18544b5ea7bb44224e734cba.png
可以在SE73执行测试二维码效果:
调用系统二维码
在smartforms样式中,添加字符格式,选择创建的二维码,然后在创建smartforms表单时使用该样式,即可以二维码形式显示: