ABAP FICO 后台生成 OFD/PDF文件,套打印(一张凭证对应多个回票单)自动触发打印机

1、把SAP打印函数输出PDF文件(网上例子比较多在此简单列举)

SmartForms生成PDF文件
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = name
*     VARIANT            = ' '
      direct_call        = 'X'
    IMPORTING
      fm_name            = lv_fm_name
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.

* 获取OTF数据
  IF sy-subrc = 0.
    CALL FUNCTION lv_fm_name
      EXPORTING
        control_parameters = ls_ctrl_form
        output_options     = ls_output_opt
        user_settings      = lv_user_settings
      IMPORTING
        job_output_info    = ls_job_output_info
      TABLES
        i_tab              = gt_data
      EXCEPTIONS
        formatting_error   = 1
        internal_error     = 2
        send_error         = 3
        user_canceled      = 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.

*   转为二进制
    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        format                = 'PDF'
*       max_linewidth         = 132
      IMPORTING
        bin_filesize          = lv_pdf_len
      TABLES
        otf                   = ls_job_output_info-otfdata[]
        lines                 = lt_pdf_lines
      EXCEPTIONS
        err_max_linewidth     = 1
        err_format            = 2
        err_conv_not_possible = 3
        err_bad_otf           = 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.
    ENDIF.
    "初始化文件名"
    lv_filename = 'benlen_' && sy-datum && sy-uzeit && '.PDF'.

2、链接回票系统下载到本地电脑(http下载在此不在列举,每个公司回票下载不一样)

3、后台自动调用打印机打印(本地电脑必须提前按照好PDF标准插件和OFD插件)

实现代码如下:

FUNCTION ZFI_FM_PDF_PRINT.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(IV_PATH) TYPE  STRING OPTIONAL
*"     VALUE(IV_TYPE) TYPE  CHAR3 OPTIONAL
*"  EXPORTING
*"     VALUE(EV_MSG) TYPE  STRING
*"----------------------------------------------------------------------

  DATA: LV_PARAMETER TYPE STRING.

  TRANSLATE IV_TYPE TO UPPER CASE.

  IF IV_TYPE  EQ 'PDF'."PDF

    CONCATENATE '/p /h '"P = Print, h = Hide Window
       IV_PATH
       INTO LV_PARAMETER
       SEPARATED BY SPACE.

    CALL METHOD CL_GUI_FRONTEND_SERVICES=>EXECUTE
    EXPORTING
        APPLICATION = 'AcroRd32.exe'
        PARAMETER = LV_PARAMETER
        MINIMIZED = 'X'
*     synchronous = ' '
*    operation = 'PRINT'
    EXCEPTIONS
        CNTL_ERROR = 1
        ERROR_NO_GUI = 2
        BAD_PARAMETER = 3
        FILE_NOT_FOUND = 4
        PATH_NOT_FOUND = 5
        FILE_EXTENSION_UNKNOWN = 6
        ERROR_EXECUTE_FAILED = 7
        SYNCHRONOUS_FAILED = 8
        NOT_SUPPORTED_BY_GUI = 9
    OTHERS = 10 .
    IF SY-SUBRC NE 0.
      EV_MSG = '打印错误 请检查是否安装PDF浏览器(AcroRd32)'.
    ENDIF.
  ELSE."OFD
    CONCATENATE
      IV_PATH
    '/p [readervisible="false";exitafterprint="true"]'
       INTO LV_PARAMETER  SEPARATED BY SPACE.

    CALL METHOD CL_GUI_FRONTEND_SERVICES=>EXECUTE
    EXPORTING
        APPLICATION = 'SuwellReader.exe' "OFD
        PARAMETER = LV_PARAMETER
        MINIMIZED = 'X'
*     synchronous = ' '
*    operation = 'PRINT'
    EXCEPTIONS
        CNTL_ERROR = 1
        ERROR_NO_GUI = 2
        BAD_PARAMETER = 3
        FILE_NOT_FOUND = 4
        PATH_NOT_FOUND = 5
        FILE_EXTENSION_UNKNOWN = 6
        ERROR_EXECUTE_FAILED = 7
        SYNCHRONOUS_FAILED = 8
        NOT_SUPPORTED_BY_GUI = 9
    OTHERS = 10 .
    IF SY-SUBRC NE 0.
      EV_MSG = '打印错误 请检查是否安装OFD浏览器'.
    ENDIF.
  ENDIF.

ENDFUNCTION.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值