博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SMARTFORM 转 PDF
阅读量:2032 次
发布时间:2019-04-28

本文共 7789 字,大约阅读时间需要 25 分钟。

SMARTFORM是可以转化成PDF格式的文档的,废话就不说了,先贴一支具体的实例程序吧。本程序是本人在一上海项目的时候所做的一支实用程序。

 

*&---------------------------------------------------------------------*

*& Report  ZSCT003
*& T-code  内向交货单箱码打印
*&---------------------------------------------------------------------*
*&Work Request ID: DEVK902847
*&    Program ID: ZSCT003
*&Program Caption: 内向交货单箱码打印
*&      Assignee: 薛现军(Xavery Hsueh)
*&   Deliver Date: 2010/04/28
*&   Created Date: 2010/04/07
*&---------------------------------------------------------------------*
REPORT  zsct003 NO STANDARD PAGEHEADING.

*&---------------------------------------------------------------------*

*&     声明表
*&---------------------------------------------------------------------*
TABLES:likp,
      lips,
      vekp.
*&---------------------------------------------------------------------*
*&    Structure and Internal Structure.
*&---------------------------------------------------------------------*
TYPES:BEGIN OF typ_result.
       INCLUDE STRUCTURE zsscm001.
TYPES:END OF typ_result.
*&---------------------------------------------------------------------*
*&    variants
*&---------------------------------------------------------------------*
RANGES:r_exidv FOR vekp-exidv.

DATA:w_bin_filesize TYPE i,
    gt_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.

DATA tline TYPE TABLE OF  tline WITH HEADERLINE..

DATA gt_otf TYPE itcoo OCCURS 0 WITH HEADER LINE.

DATA:f_funcname TYPE rs38l_fnam.
DATA: f_formname TYPE tdsfname VALUE 'ZSCM001',
     control_parameters TYPE ssfctrlop,
     w_outoptions TYPE ssfcompop,
     errtab TYPE tsferror.
DATA: v_lifnr TYPE lifnr,
     v_posnr TYPE posnr,
     v_txt20 TYPE txt20,
     v_name1 TYPE name1,
     v_vgbel TYPE vbeln.

DATA:bin_file TYPE xstring.

DATA document_output_info TYPE ssfcrespd.

DATA job_output_info TYPE ssfcrescl.
DATA job_output_options TYPE ssfcresop.

DATA: binfilesize TYPE i,

file_name TYPE string,
file_path TYPE string,
full_path TYPE string.
*&---------------------------------------------------------------------*
*&     声明表
*&---------------------------------------------------------------------*
DATA:it_result TYPE TABLE OF typ_result WITH HEADERLINE.
DATA:it_vekp   TYPE TABLE OF vekpWITH HEADER LINE.
*&---------------------------------------------------------------------*
*&     定制选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK xavery WITH FRAME TITLEtext-001.
PARAMETERS:p_vbeln TYPE vbeln_vl MATCHCODE OBJECT vmvm
                                OBLIGATORY.
SELECT-OPTIONS s_posnr FORlips-posnr.       "箱码
SELECTION-SCREEN END OF BLOCK xavery.

START-OF-SELECTION.

  PERFORMfrm_process_cond.                  "处理选择条件
  PERFORMfrm_query_data.                    "查询箱码数据

END-OF-SELECTION.

  PERFORM frm_create_fieldcat.
  PERFORM frm_init_printer.

AT USER-COMMAND.

  CASE sy-ucomm.
    WHEN'PRINT'.
     PERFORM frm_printer_barcode.
    WHENOTHERS.
  ENDCASE.
*&---------------------------------------------------------------------*
*&     Form  FRM_QUERY_DATA
*&---------------------------------------------------------------------*
     取数逻辑
*----------------------------------------------------------------------*
FORM frm_query_data .
* 取交货单数据
  CLEARlikp.
  SELECT SINGLE * FROM likp WHERE vbeln =p_vbeln.
* 取供应商名称
 SELECT SINGLE name1 FROM lfa1
      INTO v_name1
      WHERE lifnr = likp-lifnr.
* 取采购订单号
 SELECT SINGLE vgbel FROM lips
      INTO  v_vgbel
      WHERE vbeln = p_vbeln.
* 取箱码范围
 REFRESH it_vekp.
  SELECT * FROM vekp INTO TABLE it_vekp
     WHERE vpobjkey = p_vbeln AND
           exidv  IN r_exidv  AND
           status NE '0060'.
  CHECK sy-subrc = 0.
  LOOP AT it_vekp.
   CLEAR:it_result.
    CONCATENATEv_vgbel p_vbeln INTO it_result-txt20 SEPARATED BY '/'.
   it_result-vbeln = p_vbeln.
   it_result-ebeln = v_vgbel.
   it_result-name1 = v_name1.
   it_result-posnr = v_posnr.

    CALLFUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

     EXPORTING
       input  = it_vekp-exidv
     IMPORTING
       output = it_result-barco.
    APPENDit_result.
  ENDLOOP.
ENDFORM.                   " FRM_QUERY_DATA
*&---------------------------------------------------------------------*
*&     Form  FRM_PROCESS_COND
*&---------------------------------------------------------------------*
     处理选择条件
*----------------------------------------------------------------------*
FORM frm_process_cond .
  REFRESH r_exidv.
  LOOP AT s_posnr.
    r_exidv-sign= s_posnr-sign.
   r_exidv-option = s_posnr-option.

   CONCATENATE p_vbeln s_posnr-low INTO r_exidv-low.

    CALLFUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
     EXPORTING
       input  = r_exidv-low
     IMPORTING
       output = r_exidv-low.

    IF NOTs_posnr-high IS INITIAL.

     r_exidv-high = s_posnr-high.
     CONCATENATE p_vbeln s_posnr-high INTO r_exidv-high.
     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
       EXPORTING
         input  = r_exidv-high
       IMPORTING
         output = r_exidv-high.
    ENDIF.
    APPENDr_exidv.
  ENDLOOP.
ENDFORM.                   " FRM_PROCESS_COND
*&---------------------------------------------------------------------*
*&     Form  FRM_INIT_PRINTER
*&---------------------------------------------------------------------*
     初始化打印参数
*----------------------------------------------------------------------*
FORM frm_init_printer .
  CLEAR control_parameters.
  control_parameters-no_dialog = 'X'.
 control_parameters-preview   =''. "space.
 control_parameters-getotf   = 'X'.
control_parameters-no_open   ='X'.
control_parameters-no_close  ='X'.
 control_parameters-langu    = sy-langu.

  w_outoptions-tddest = 'LP01'.

  w_outoptions-tdnoprint = 'X'.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
   EXPORTING
     formname = f_formname
   IMPORTING
     fm_name  = f_funcname.

  CALL FUNCTION f_funcname
   EXPORTING
     control_parameters   =control_parameters
     output_options      = w_outoptions
     user_settings       = 'X'
   IMPORTING
     document_output_info = document_output_info
     job_output_info     = job_output_info
     job_output_options   =job_output_options
    TABLES
     zsscm001            = it_result.

  gt_otf[] = job_output_info-otfdata[].

  CALL FUNCTION 'CONVERT_OTF'
   EXPORTING
     format = 'PDF'
     max_linewidth = 132
    ARCHIVE_INDEX = ' '
    COPYNUMBER = 0
    ASCII_BIDI_VIS2LOG = ' '
    PDF_DELETE_OTFTAB = ''
   IMPORTING
     bin_filesize = w_bin_filesize
    bin_file = bin_file
* BIN_FILE=
   TABLES
    otf = gt_otf
    lines = tline
   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
   WITHsy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
 ENDIF.

  CALL METHODcl_gui_frontend_services=>file_save_dialog

   CHANGING
     filename = file_name
     path    = file_path
     fullpath = full_path.

  CALL FUNCTION 'GUI_DOWNLOAD'
   EXPORTING
     bin_filesize           = binfilesize
     filename               = full_path
     filetype               = 'BIN'
    TABLES
     data_tab               = tline[]
   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.

ENDFORM.                   " FRM_INIT_PRINTER

*&---------------------------------------------------------------------*
*&     Form  FRM_CREATE_FIELDCAT
*&---------------------------------------------------------------------*
     创建输出字段格式
*----------------------------------------------------------------------*
FORM frm_create_fieldcat .
  SET PF-STATUS 'XAVERY'.
ENDFORM.                   " FRM_CREATE_FIELDCAT
*&---------------------------------------------------------------------*
*&     Form  FRM_PRINTER_BARCODE
*&---------------------------------------------------------------------*
     打印条形码
*----------------------------------------------------------------------*
FORM frm_printer_barcode .
  PERFORM frm_init_printer .
ENDFORM.                   " FRM_PRINTER_BARCODE

1、SMARTFORM 转PDF文件时,只是用FUNCTION CONVERT_OTF进行了格式转换。

 

2、在SMARTFORM的输出文档中,调用FUNCTION输出时,输出参数control_parameters-no_dialog必须设置成‘X’,同时control_parameters-getotf节设置成'X'。这样调用 FUNCTIONCONVERT_PDF时,才有输入参数。

 

3、调用FUNCTIONCONVERT_PDF时须注意,如果要将PDF文件下载,必须使用转化后的内表数据,将PDF格式的内表下载成PDF的文件。而如果将PDF文件传到一个第三方软件或是提供给接口使用,则可以直接传输转换后的二进制的文件。

转载地址:http://bsaaf.baihongyu.com/

你可能感兴趣的文章
LeetCode166. Fraction to Recurring Decimal(思路及python解法)
查看>>
iOS组件化开发一远端私有库建立(二)
查看>>
Varnish4.x配置文件详解
查看>>
Piranha LVS DR 模式 HA 集群配置
查看>>
JavaScript(含DOM编程)
查看>>
计算机网络
查看>>
fiddler抓包
查看>>
实现Data类
查看>>
进程及task_struct
查看>>
E - A == B ? HDU - 2054
查看>>
进程间通信之管道
查看>>
C语言学生成绩管理系统设计 《C语言程序设计》实训报告
查看>>
计算机网络技术复习题 第十章 下一代因特网
查看>>
数据重生:让神经机器翻译中的不活跃样本“复活”
查看>>
直播预告:AAAI 2021专场一| AI TIME PhD
查看>>
一种基于Transformer解码端的高效子层压缩方法
查看>>
同一种方法,同一句话,翻译成英语和泰语,差别为什么这么大?
查看>>
弱监督、具有可解释性的应用题解答
查看>>
前序、中序、后序递归、非递归方式打印二叉树
查看>>
八大排序之插入排序(直接插入排序 & 希尔排序)
查看>>