SAP的打印目前有3个,从时间顺序上排序是
- scriptform 历史悠久且古老的东西,线全要用手工来画,如直线X,Y坐标,长度到哪里,极为繁琐。事务代码SE71,SE73等。
- smartforms 顾名思义,聪明的form,使用一套既定的函数,将内容可配置化,画线等功能已经比较只能,支持事务性打印,目前广泛使用, 缺点是使用起来总有一些或大或小的BUG,但是相较于scriptform可以说的上是跨时代的进步。事务代码SMARTFORMS。
- adobeform 未来的趋势,相比smartforms更加灵活,bug更少,在ECC6.0之后的版本开始推广,目前正在逐步代替smartforms。事务代码SFP。
目前博主主流使用的还是smartforms,后面随着新业务落实会转向adobeform。
本文侧重讲述的是smartforms调用和一些常见问题?
- smartforms对应的函数怎么获取,怎么调用?
- 弹出提示框时怎么一次性处理连续打印的问题?
- smartforms 金额,数量等字段怎么去空?
1.第一个动态获取Smartforms对应的执行函数,标准的都会根据Smartforms的数量自增生成一个随机的函数用于调用该Smartforms(如/1BCDWB/SF00000001),指定前缀加自增主键成为函数名,因此为了解决这个问题一般会用这个函数直接获取需要执行的函数。即通过函数SSF_FUNTION_MODULE_NAME 获取smartforms名称对应的函数,调用时会动态调用对应函数的值。
DATA fm_name TYPE rs38l_fnam.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = '你的SMARTFORMS名称'
* VARIANT = ' '
* DIRECT_CALL = ' '
* IMPORTING
* FM_NAME =
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3
.
if sy-subrc = 0.
call function fm_name.
*注意第一次写代码需要手动找一次带出对应的选项,在Smartforms执行一次,找到函数名再调用带出参数
endif.
2.smartforms一次打印多份/连续打印,很多时候我们都有这个需求,比如业务需求一次打印两张不同的单据,但是不可能每次都点一次打印,所以Smartforms也有事务性的功能。具体可以参见下面的代码。
SSF_OPEN 和 SSF_CLOSE 是处理smartforms开启和关闭的函数
DATA control TYPE ssfctrlop.
control-no_open = 'X'.
control-no_close = 'X'.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
* ARCHIVE_PARAMETERS =
user_settings = 'X'
* MAIL_SENDER =
* MAIL_RECIPIENT =
* MAIL_APPL_OBJ =
* OUTPUT_OPTIONS =
control_parameters = control
* IMPORTING
* JOB_OUTPUT_OPTIONS =
* EXCEPTIONS
* FORMATTING_ERROR = 1
* INTERNAL_ERROR = 2
* SEND_ERROR = 3
* USER_CANCELED = 4
* OTHERS = 5
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
call FUNCTION fm_name
*需要控制参数进行调整
CONTROL_PARAMETERS = control
.
CALL FUNCTION 'SSF_CLOSE'
* IMPORTING
* JOB_OUTPUT_INFO =
* EXCEPTIONS
* FORMATTING_ERROR = 1
* INTERNAL_ERROR = 2
* SEND_ERROR = 3
* OTHERS = 4
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
3.smartforms经常会碰到金额和数字字段,定义的是dec11等字段,但是实际打印的值只有3位用到,前面的部分机会浪费,这个时候就要用到字段的宏命令。通常ZC<就能解决绝大部分的数量和字段的设置如:
&你的打印字段(ZC<)& 去0,去空,负号左移
*常见的代码用到的字段
&你的打印字段(3)& "该字段只展示3位
&你的打印字段(S)& "禁止输出符号位Sign
&你的打印字段(<)& "符号位显示在数据的左边
&你的打印字段(.)& "设置显示小数的位数
&你的打印字段(E)& "设置为科学标示法
&你的打印字段(T)& "禁止千分位的显示(适用于: DEC, CURR, INT和QUAN几种数据类型).
&你的打印字段(Z)& "禁止数字前导0的显示
&你的打印字段(I)& "禁止显示空值
&你的打印字段(K)& "禁止类型系统按数据字典定义的转换函数进行输出转换
&你的打印字段(R)& "右对齐(只有在定义了输出长度时才有效)
&你的打印字段(F)& "用指定的字符替换左边的空格.
&你的打印字段(L)& "将日期转换为本地显示格式,使用JDAT指定的格式
&你的打印字段(C)& "该设置效果和ABAP的CONDENSE语句相同.
本文介绍了SAP的三种打印形式:Scriptform、Smartforms和Adobeform,并重点讲解了Smartforms的使用。Smartforms通过SSF_FUNCTION_MODULE_NAME函数获取执行函数,实现动态调用。对于连续打印,使用SSF_OPEN和SSF_CLOSE函数进行控制。此外,还分享了如何处理Smartforms中金额和数字字段的格式设置。
3049

被折叠的 条评论
为什么被折叠?



