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