Smartforms连续打印,一次多份,动态获取函数名

本文介绍了SAP的三种打印形式:Scriptform、Smartforms和Adobeform,并重点讲解了Smartforms的使用。Smartforms通过SSF_FUNCTION_MODULE_NAME函数获取执行函数,实现动态调用。对于连续打印,使用SSF_OPEN和SSF_CLOSE函数进行控制。此外,还分享了如何处理Smartforms中金额和数字字段的格式设置。

SAP的打印目前有3个,从时间顺序上排序是

  1. scriptform 历史悠久且古老的东西,线全要用手工来画,如直线X,Y坐标,长度到哪里,极为繁琐。事务代码SE71,SE73等。
  2. smartforms 顾名思义,聪明的form,使用一套既定的函数,将内容可配置化,画线等功能已经比较只能,支持事务性打印,目前广泛使用, 缺点是使用起来总有一些或大或小的BUG,但是相较于scriptform可以说的上是跨时代的进步。事务代码SMARTFORMS。
  3. adobeform 未来的趋势,相比smartforms更加灵活,bug更少,在ECC6.0之后的版本开始推广,目前正在逐步代替smartforms。事务代码SFP。

目前博主主流使用的还是smartforms,后面随着新业务落实会转向adobeform。

本文侧重讲述的是smartforms调用和一些常见问题?

  1. smartforms对应的函数怎么获取,怎么调用?
  2. 弹出提示框时怎么一次性处理连续打印的问题?
  3. 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语句相同.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值