ABAP 循环调用SmartForms进行打印(SAP 套打)

在日常开发中,经常会遇到需要一次性打印多张内容不同的报表,直接调用SmartForms时,可能每次调用后都会执行一次打印操作,会在循环中反复出现打印对话框,影响程序执行效率。比如,一次性打印多张生产订单的领料单,一次性打印多张产品标签等等

SAP打印控制了假脱机功能,允许将多张表先缓存,最后一次性提交打印请求。
实现假脱机控制控制主要通过SmartForms函数的CONTROL_PARAMETERS接口的NO_OPEN、NO_CLOSE两个参数来控制。


要实现一次打印多次调用SmartForms功能,需在正式调用SmartForms前,先CALL FUNCTION 'SSF_OPEN' ,在循环调用后,最后再CALL FUNCTION 'SSF_CLOSE'即可。

示例代码:

DATA: W_SFNAME TYPE RS38L_FNAM.
  DATA: LS_CONTROL_PARAM TYPE SSFCTRLOP .
  DATA: LS_COMPOSER_PARAM TYPE SSFCOMPOP .
  DATA: OUTOPT TYPE SSFCRESOP.
  DATA: I_JOB_OUTPUT_INFO TYPE SSFCRESCL.

  LS_CONTROL_PARAM-LANGU = '1'.  "1:CHINESE
  LS_CONTROL_PARAM-NO_OPEN = 'X'.
  LS_CONTROL_PARAM-NO_CLOSE = 'X'.

  CALL FUNCTION 'SSF_OPEN' “调用SSF_OPEN函数设置打印机,打开输出请求
    EXPORTING
      CONTROL_PARAMETERS = LS_CONTROL_PARAM
      OUTPUT_OPTIONS     = LS_COMPOSER_PARAM
    IMPORTING
      JOB_OUTPUT_OPTIONS = OUTOPT
    EXCEPTIONS
      FORMATTING_ERROR   = 1
      INTERNAL_ERROR     = 2
      SEND_ERROR         = 3
      USER_CANCELED      = 4
      OTHERS             = 5.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    EXIT.
  ENDIF.

  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = 'ZMMF0009'
    IMPORTING
      FM_NAME            = W_SFNAME
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3.

  LOOP AT GT_DATA INTO GS_DATA.
    CALL FUNCTION W_SFNAME    " '/1BCDWB/SF00000322'
      EXPORTING
              CONTROL_PARAMETERS = LS_CONTROL_PARAM
        OUTPUT_OPTIONS     = LS_COMPOSER_PARAM
        WA_HEADER              = GS_DATA-HEADER
      TABLES
        IT_ITEM                    = GS_DATA-ITEMS
      EXCEPTIONS
        FORMATTING_ERROR           = 1
        INTERNAL_ERROR             = 2
        SEND_ERROR                 = 3
        USER_CANCELED              = 4
        OTHERS                     = 5.
    IF SY-SUBRC <> 0.
      LEAVE TO LIST-PROCESSING.
    ENDIF.
  ENDLOOP.

  CALL FUNCTION 'SSF_CLOSE' “关闭打印机
    IMPORTING
      JOB_OUTPUT_INFO  = I_JOB_OUTPUT_INFO
    EXCEPTIONS
      FORMATTING_ERROR = 1
      INTERNAL_ERROR   = 2
      SEND_ERROR       = 3
      OTHERS           = 4.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Murphy2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值