ABAP DIALOG開發基本技術參考(smartform 打印功能,可打PDF)

来源:互联网 发布:美国制造业 知乎 编辑:程序博客网 时间:2024/05/17 23:23

 *&---------------------------------------------------------------------*
*&  Include           ZINCLUDE_MM079_PRI
*&---------------------------------------------------------------------*
*****************BEGIN FOR PRINTER SMARTFORMS****************************
DATA: L_PRN_COMP TYPE SSFCOMPOP,
      L_PRN_CTRLOP TYPE SSFCTRLOP,
      JOB_OUTPUT_OPTIONS TYPE SSFCRESOP,
      JOB_OUTPUT_INFO TYPE SSFCRESCL.     "CNSAPWIN
DATA: L_FM_NAME TYPE TDSFNAME.
DATA: t_otf_from_fm TYPE ssfcrescl,
      t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,
      t_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.
TABLES: USR01.

FORM SUB_SET_PRINTER_CONTROL USING PF_COPYIES PF_VIEW PF_NODIALOG PF_LANGU PF_PDF.
  SELECT SINGLE * FROM USR01 WHERE BNAME = SY-UNAME.
* control setting
  L_PRN_CTRLOP-PREVIEW   = PF_VIEW.
  L_PRN_CTRLOP-NO_DIALOG = PF_NODIALOG.
  L_PRN_CTRLOP-LANGU     = PF_LANGU.
  L_PRN_CTRLOP-DEVICE    = 'PRINTER'.
  L_PRN_CTRLOP-GETOTF    = PF_PDF.    "SP02  (pdf)
* printer setting
  IF PF_COPYIES > 1.
    L_PRN_COMP-TDCOPIES = PF_COPYIES.
  ELSE.
    L_PRN_COMP-TDCOPIES = 1.
  ENDIF.
  L_PRN_COMP-TDSUFFIX2 = SY-REPID.
  L_PRN_COMP-TDDEST = USR01-SPLD.
***  l_prn_comp-tdprinter = 'PRINTER'.
  L_PRN_COMP-TDNEWID = 'X'.
  L_PRN_COMP-TDIMMED = 'X'.
  L_PRN_COMP-TDFINAL = 'X'.
  L_PRN_COMP-TDNOPRINT = PF_VIEW.   "NO PRINT BUTTON
*--begin 如果“列印”時,不想顯示“預覽”按鈕,可以取消以下註釋
****  (考慮到用戶預覽打印后,直接右上角關閉screen,則會影響流水號),還是取消以下註釋
  IF PF_VIEW = ''.
    L_PRN_COMP-TDNOPREV  = 'X'.
  ELSE.
    L_PRN_COMP-TDNOPREV  = ''.
  ENDIF.
*--end
* l_prn_comp-tddelete = 'X'.
*  為了打PDF,所以要清空,如果打smartform時,在  CALL FUNCTION 'SSF_OPEN'后有賦值
   L_PRN_CTRLOP-NO_OPEN  = ''.
   L_PRN_CTRLOP-NO_CLOSE = ''.
ENDFORM.

FORM SUB_BEGIN_PRINTER_MODULE USING P_SF_NAME.
* group all printout into one spool
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = P_SF_NAME
    IMPORTING
      FM_NAME            = L_FM_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.

FORM SUB_CALL_OPENFORM.
  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
*    ARCHIVE_PARAMETERS       = ARCHIVE_PARAMETERS
     USER_SETTINGS            = ' '
     OUTPUT_OPTIONS           = L_PRN_COMP
     CONTROL_PARAMETERS       = L_PRN_CTRLOP
   IMPORTING
     JOB_OUTPUT_OPTIONS       = JOB_OUTPUT_OPTIONS
   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.
   L_PRN_CTRLOP-NO_OPEN  = 'X'.
   L_PRN_CTRLOP-NO_CLOSE = 'X'.
ENDFORM.

FORM SUB_BEGIN_PRINTER.
   CALL FUNCTION L_FM_NAME
     EXPORTING
       CONTROL_PARAMETERS = L_PRN_CTRLOP
       OUTPUT_OPTIONS     = L_PRN_COMP
       USER_SETTINGS      = ''        " using current setting
*       T_HEADER           = 'T_HEADER_A'
*       TABLES
*       IT_ITAB            = ''
     IMPORTING
      job_output_info    = t_otf_from_fm
     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.
*   t_otf[] = t_otf_from_fm-otfdata[].
   APPEND LINES OF t_otf_from_fm-otfdata TO t_otf.
ENDFORM.

FORM SUB_CALL_CLOSEFORM.
  CALL FUNCTION 'SSF_CLOSE'
    IMPORTING
      JOB_OUTPUT_INFO  = JOB_OUTPUT_INFO
    EXCEPTIONS
      FORMATTING_ERROR = 1
      INTERNAL_ERROR   = 2
      SEND_ERROR       = 3
      OTHERS           = 4.
ENDFORM.

FORM PRI_PDF.
DATA: w_bin_filesize TYPE i" Binary File Size
      w_filename TYPE string,
      w_file_path TYPE string,
      w_full_path TYPE string.

  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format                = 'PDF'
    IMPORTING
      bin_filesize          = w_bin_filesize
    TABLES
      otf                   = t_otf
      lines                 = t_pdf_tab
    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.

* To display File SAVE dialog window
CONCATENATE sy-cprog '-' sy-datum '-' sy-uzeit '.PDF' INTO w_filename.
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      default_file_name    = w_filename
    CHANGING
      filename             = w_filename
      path                 = w_file_path
      fullpath             = w_full_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.

* Use the FM GUI_DOWNLOAD to download the generated PDF file onto the
* presentation server
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize = w_bin_filesize
      filename     = w_full_path
      filetype     = 'BIN'
    TABLES
      data_tab     = t_pdf_tab.
  IF sy-subrc <> 0.
  ENDIF.
ENDFORM.