小弟不才,学识浅薄,以后还请大家多多帮助啊!

将内表数据以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:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar