将内表数据以PDF格式输出到本地
上一篇 / 下一篇 2008-07-25 07:58:25 / 个人分类:复用代码
PARAMETERS: p_matnr TYPE matnr.
PARAMETERS: p_pdf TYPE c AS CHECKBOX.
PARAMETERS: p_file TYPE localfile MEMORY ID downfile. " 选择本地文件.
DATA c_form. TYPE tdsfname VALUE 'Z_FORM_QIK_1'.
DATA:
l_func_name TYPE rs38l_fnam.
DATA: itab TYPE TABLE OF makt WITH HEADER LINE,
ls_control_param TYPE ssfctrlop,
ls_job_output_info TYPE ssfcrescl.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM. get_localfilepath
USING
'PDF'
'S'
'请选择下载到本地的文件路径!'
CHANGING
p_file.
START-OF-SELECTION.
SELECT * FROM makt INTO CORRESPONDING FIELDS OF TABLE itab
WHERE spras = sy-langu AND matnr = p_matnr.
BREAK-POINT.
PERFORM. get_form_func
USING
c_form
CHANGING
l_func_name.
*&---------------------------------------------------------------------*
*& Form GET_FORM_FUNC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_C_FORM text
* <--P_L_FUNC_NAME text
*----------------------------------------------------------------------*
FORM. get_form_func
USING
p_form_name TYPE tdsfname
p_func_name TYPE rs38l_fnam.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = p_form_name
variant = ' '
direct_call = ' '
IMPORTING
fm_name = p_func_name
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.
DATA:l_pdf TYPE string.
l_pdf = p_file.
"}
IF p_pdf = 'X'.
ls_control_param-getotf = 'X'.
ENDIF.
ls_control_param-device = 'PRINTER'.
ls_control_param-langu = sy-langu.
CALL FUNCTION p_func_name
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
control_parameters = ls_control_param
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
* OUTPUT_OPTIONS =
* USER_SETTINGS = 'X'
IMPORTING
* DOCUMENT_OUTPUT_INFO =
job_output_info = ls_job_output_info
* JOB_OUTPUT_OPTIONS =
TABLES
itab = itab
* 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.
IF p_pdf = 'X'.
DATA l_count TYPE i.
l_count = LINES( ls_job_output_info-otfdata ).
IF l_count > 0.
PERFORM. convert_pdf USING ls_job_output_info
l_pdf.
IF sy-subrc <> 0 .
* MESSAGE s500 WITH c_title '成功输出!'.
ENDIF.
ELSE.
* MESSAGE e500 WITH '输出到PDF的内表为空!'.
ENDIF.
ENDIF.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = p_form_name
variant = ' '
direct_call = ' '
IMPORTING
fm_name = p_func_name
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.
ENDFORM. " get_form_func
*&---------------------------------------------------------------------*
*& Form convert_pdf
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LS_JOB_OUTPUT_INFO text
* -->P_L_PDF text
*----------------------------------------------------------------------*
FORM. convert_pdf USING p_output TYPE ssfcrescl
p_pdf TYPE string.
DATA: lt_pdf TYPE STANDARD TABLE OF tline.
DATA: lt_docs TYPE STANDARD TABLE OF docs.
DATA: l_file_size TYPE i.
CONSTANTS: c_bin TYPE char10 VALUE 'BIN'.
CALL FUNCTION 'CONVERT_OTF_2_PDF'
EXPORTING
use_otf_mc_cmd = 'X'
IMPORTING
bin_filesize = l_file_size
TABLES
otf = p_output-otfdata
doctab_archive = lt_docs
lines = lt_pdf
EXCEPTIONS
err_conv_not_possible = 1
err_otf_mc_noendmarker = 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.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = l_file_size
filename = p_pdf
filetype = c_bin
TABLES
data_tab = lt_pdf.
ENDFORM. " CONVERT_PDF
*&---------------------------------------------------------------------*
*& Form get_localfilepath
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0056 text
* -->P_0057 text
* -->P_0058 text
* <--P_P_FILE text
*----------------------------------------------------------------------*
FORM. get_localfilepath
USING
p_mask TYPE c
p_soro TYPE c
p_title TYPE c
CHANGING
p_file LIKE rlgrap-filename
.
DATA: l_soro(1) TYPE c,
l_mask_u(8) TYPE c,
l_mask_l(8) TYPE c,
l_mask_all(30) TYPE c.
l_soro = p_soro.
* l_soro = p_soro.
TRANSLATE l_soro TO UPPER CASE.
IF NOT ( l_soro = 'S' OR l_soro = 'O' ).
MESSAGE i398(00) WITH '打开模式只能是S或者O!'.
ENDIF.
l_mask_u = p_mask.
l_mask_l = p_mask.
TRANSLATE l_mask_u TO UPPER CASE .
TRANSLATE l_mask_l TO LOWER CASE.
CONCATENATE '*.*,*.' l_mask_l ',*.' l_mask_u INTO l_mask_all.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mask = l_mask_all
mode = l_soro
def_filename = p_file
title = p_title
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
THERS = 5.
IF sy-subrc <> 0.
DATA l_err(200) TYPE c.
CASE sy-subrc.
WHEN 1.
l_err = '此窗口系统上的文件选择器不可用'.
WHEN 2.
l_err = '前端功能不能在背景中执行'.
WHEN 3.
l_err = '取消选择'.
WHEN 4.
l_err = '通讯错误'.
WHEN 5.
l_err = '其他未知错误'.
ENDCASE.
MESSAGE i398(00) WITH l_err '!'.
CLEAR p_file.
ELSE.
IF l_soro = 'O'.
PERFORM. get_isexist USING p_file.
* ELSEIF l_soro = 'S'.
* PERFORM. check_filename USING p_file.
ENDIF.
ENDIF.
ENDFORM. "get_localfile
*&---------------------------------------------------------------------*
*& Form get_isexist
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_FILE text
*----------------------------------------------------------------------*
FORM. get_isexist USING p_file LIKE rlgrap-filename .
DATA: l_exist.
CALL FUNCTION 'TMP_GUI_GET_FILE_EXIST'
EXPORTING
fname = p_file
IMPORTING
exist = l_exist
* ISDIR =
* FILESIZE =
EXCEPTIONS
fileinfo_error = 1
OTHERS = 2 .
IF sy-subrc <> 0 OR l_exist <> 'X'.
DATA l_err(200).
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
CONCATENATE p_file '的文件信息错误!' INTO l_err.
WHEN 2.
l_err = '其他错误!'.
ENDCASE.
ELSEIF l_exist <> 'X' .
CONCATENATE p_file '不存在!' INTO l_err.
ENDIF.
MESSAGE i398(00) WITH l_err.
CLEAR p_file.
ENDIF.
ENDFORM. "get_localfile
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
TAG: