SAP Smartform转成PDF方法汇总

转发自 https://blog.csdn.net/ROYHAO/article/details/124345367 

SAP里常常要画各种smartform,并且用户还希望保存至本地PDF文件,下面就详细说明smartform转成PDF的四种方法,如果还有其他方法欢迎留言补充。

一、代码开发
1)先调用smartform函数获取OTF格式数据

2)后调用函数CONVERT_OTF转换成PDF格式数据

3)再调用GUI_DOWNLOAD函数下载

示例代码如下(本示例中需下载四个smartform对应的四个PDF文件)

  METHOD DOWNLOAD_PDF.
    DATA: LT_FORMNAME           TYPE STANDARD TABLE OF /PICM/ADOBEFORM_STR,
          LT_OTF                TYPE STANDARD TABLE OF ITCOO,
          LT_LINES              TYPE STANDARD TABLE OF TLINE,
          LT_DATA               TYPE STANDARD TABLE OF ZSSD042,
          LS_DATA               TYPE ZSSD042,
          LS_CONTROL_PARAMETERS TYPE SSFCTRLOP,
          LS_OUTPUT_OPTIONS     TYPE SSFCOMPOP,
          LS_JOB_OUTPUT_INFO    TYPE SSFCRESCL,
          LV_FILENAME           TYPE STRING,
          LV_PATH               TYPE STRING.
    DATA(LV_TIME) = SY-DATUM && SY-UZEIT.
    DATA(LT_VBELN) = T_ALV[].
    DELETE LT_VBELN WHERE CHOOSE IS INITIAL.
    SORT LT_VBELN BY VBELN.
    DELETE ADJACENT DUPLICATES FROM LT_VBELN COMPARING VBELN.
    IF LT_VBELN[] IS INITIAL.
      MESSAGE TEXT-E03 TYPE 'E'.
    ENDIF.
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
      CHANGING
        SELECTED_FOLDER      = LV_PATH
      EXCEPTIONS
        CNTL_ERROR           = 1
        ERROR_NO_GUI         = 2
        NOT_SUPPORTED_BY_GUI = 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.
    IF LV_PATH IS INITIAL.
      RETURN.
    ENDIF.
    "  LS_OUTPUT_OPTIONS-TDDEST   = 'LP01'.
    LS_OUTPUT_OPTIONS-TDIMMED  = 'X'.
    LS_OUTPUT_OPTIONS-TDDELETE = 'X'.
    LS_OUTPUT_OPTIONS-TDNOPREV = 'X'.
    LS_CONTROL_PARAMETERS-NO_DIALOG = 'X'.
    LS_CONTROL_PARAMETERS-GETOTF    = 'X'.
    LT_FORMNAME = VALUE #(
     ( FORMNAME = 'ZSD001_FORM' FUGRNAME = 'despatchlist_&1_&2.pdf'     ) "DespatchList
     ( FORMNAME = 'ZSD002_FORM' FUGRNAME = 'EDIDoc_&1_&2.pdf'           ) "EDIDoc
     ( FORMNAME = 'ZSD003_FORM' FUGRNAME = 'shippingorder_&1_&2.pdf'    ) "ShippingOrder
     ( FORMNAME = 'ZSD004_FORM' FUGRNAME = 'SO_DELIVERY_NOTE_&1_&2.pdf' ) "SO_DELIVERY_NOTE
    ).
*   获取SMARTFORM对应函数名
    LOOP AT LT_FORMNAME INTO DATA(LS_FORMNAME).
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          FORMNAME           = LS_FORMNAME-FORMNAME
        IMPORTING
          FM_NAME            = LS_FORMNAME-FUNCNAME
        EXCEPTIONS
          NO_FORM            = 1
          NO_FUNCTION_MODULE = 2
          OTHERS             = 3.
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      MODIFY LT_FORMNAME FROM LS_FORMNAME.
    ENDLOOP.
    LOOP AT LT_VBELN INTO DATA(LS_VBELN).
      CLEAR LT_DATA[].
      LOOP AT T_ALV INTO DATA(LS_ALV) WHERE VBELN = LS_VBELN-VBELN.
        MOVE-CORRESPONDING LS_ALV TO LS_DATA.
        APPEND LS_DATA TO LT_DATA.
      ENDLOOP.
      LOOP AT LT_FORMNAME INTO LS_FORMNAME WHERE FUNCNAME IS NOT INITIAL.
        CLEAR: LT_OTF[], LT_LINES[], LS_JOB_OUTPUT_INFO, LV_FILENAME.
*       编辑文件名
        LV_FILENAME = LS_FORMNAME-FUGRNAME.
        DATA(LV_VBELN) = |{ LS_VBELN-VBELN ALPHA = OUT }|.
        REPLACE '&1' WITH LV_TIME INTO LV_FILENAME.
        REPLACE '&2' WITH LV_VBELN INTO LV_FILENAME.
        CONDENSE LV_FILENAME NO-GAPS.
        CONCATENATE LV_PATH LV_FILENAME INTO LV_FILENAME SEPARATED BY '\'.
*       调用SMARTFORM
        CALL FUNCTION LS_FORMNAME-FUNCNAME
          EXPORTING
            CONTROL_PARAMETERS = LS_CONTROL_PARAMETERS
            OUTPUT_OPTIONS     = LS_OUTPUT_OPTIONS
            USER_SETTINGS      = 'X'
          IMPORTING
            JOB_OUTPUT_INFO    = LS_JOB_OUTPUT_INFO
          TABLES
            IT_DATA            = LT_DATA
          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.
        ENDIF.
*       转换PDF
        LT_OTF[] = LS_JOB_OUTPUT_INFO-OTFDATA[].
        CALL FUNCTION 'CONVERT_OTF'
          EXPORTING
            FORMAT                = 'PDF'
          TABLES
            OTF                   = LT_OTF
            LINES                 = LT_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.
*       下载文件
        CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            FILENAME                = LV_FILENAME
            FILETYPE                = 'BIN'
          TABLES
            DATA_TAB                = LT_LINES
          EXCEPTIONS
            FILE_WRITE_ERROR        = 1
            NO_BATCH                = 2
            GUI_REFUSE_FILETRANSFER = 3
            INVALID_TYPE            = 4
            NO_AUTHORITY            = 5
            UNKNOWN_ERROR           = 6
            HEADER_NOT_ALLOWED      = 7
            SEPARATOR_NOT_ALLOWED   = 8
            FILESIZE_NOT_ALLOWED    = 9
            HEADER_TOO_LONG         = 10
            DP_ERROR_CREATE         = 11
            DP_ERROR_SEND           = 12
            DP_ERROR_WRITE          = 13
            UNKNOWN_DP_ERROR        = 14
            ACCESS_DENIED           = 15
            DP_OUT_OF_MEMORY        = 16
            DISK_FULL               = 17
            DP_TIMEOUT              = 18
            FILE_NOT_FOUND          = 19
            DATAPROVIDER_EXCEPTION  = 20
            CONTROL_FLUSH_ERROR     = 21
            OTHERS                  = 22.
        IF SY-SUBRC <> 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDMETHOD.

二、 通过打印池假脱机请求转成PDF文件
1)打印smartform输出假脱机请求

2)SP01查看假脱机请求,选择菜单中 假脱机请求->转发->导出为PDF 进行下载,或者执行SAP标准程序RSTXPDFT4输入假脱机请求号进行下载

 执行程序RSTXPDFT4

三、在打印预览界面输入Tcode PDF!预览PDF,点击保存按钮进行下载


四、使用PDF虚拟打印机,本电脑使用的是微软自带的Microsoft Print to PDF虚拟打印机
SPAD配置输出设备

1)如果 主机假脱机访问方法 选择了 G:使用控制技术的前台打印,则先设置smartform打印选项后选择打印机

 打印smartform

 选择打印机

 2)如果 主机假脱机访问方法 选择了 F:计算机前台打印,则设置smartform打印选项时可同时选择打印机

 设置smartform打印选项并选择打印机


————————————————
版权声明:本文为CSDN博主「狗尾巴草_lan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ROYHAO/article/details/124345367

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值