20240304

Impressão de Smartforms em PDF (local)

FORM F_PRINT_FORM using p_kostl p_obra.

  data:
    lv_tam type i,
    lv_pos type i.

  data:
    lv_formname type TDSFNAME,
    lv_data     type LENGTH 8,
    lv_hora     type LENGTH 6,
    lv_path     type string,
    lv_subrc    type sysubrc,
    lv_msg      type bapi_msg,
    lo_util     type ref to ZCL_UTIL.

  data:
    wa_control_parameters type SSFCTRLOP,
    wa_output_options     type SSFCOMPOP,
    wa_job_output_info    type SSFCRESCL,
    gv_devtype            type RSPOPTYPE,
    gv_formname           type tdsfname,
    gv_size               type i,
    gt_lines              TYPE table of TLINE,     "ZCTSD0004,
    gt_lines_out          TYPE ZCTSD0004,
    gv_string             TYPE string,
    gt_otf                TYPE TSFOTF.


  CREATE OBJECT lo_util.


* Nome do Formulário
  lv_formname c_form.                   " ZSFSD001

* Identificação de Data e Hora
  lv_data     sy-datum.
  lv_hora     sy-uzeit.

* Verifica o caminho (pasta)
  lv_tam strlenp_folder ).
  if lv_tam is initial.
    exit.
  else.
    lv_pos lv_tam 1.
    if p_folder+lv_pos(1<> '\'.
      p_folder p_folder && '\'.
    endif.
  endif.

* Path --> Caminho + Nome do Arquivo
  if p_folder is not initial.
    lv_path   p_folder   &&
                |Espelho_| &&
                p_kostl    &&
                |_|        &&
                p_obra     &&
                |_|        &&
                lv_data    &&
                |.pdf|     .


*   Busca o parâmetro de identificação do 'drive' do PDF
    CALL FUNCTION 'SSF_GET_DEVICE_TYPE'
      EXPORTING
        I_LANGUAGE             sy-langu
      IMPORTING
        E_DEVTYPE              gv_devtype
      EXCEPTIONS
        NO_LANGUAGE            1
        LANGUAGE_NOT_INSTALLED 2
        NO_DEVTYPE_FOUND       3
        SYSTEM_ERROR           4
        OTHERS                 5.
    IF SY-SUBRC <> 0.
      exit.
    ENDIF.


*   Identifica a função do smartforms
    lv_formname c_form .
    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname           lv_formname
      IMPORTING
        fm_name            gv_formname
      EXCEPTIONS
        no_form            1
        no_function_module 2
        OTHERS             3.

    IF sy-subrc <> 0.
      exit.
    ENDIF.


*   Parâmetros de geração do PDF
    wa_control_parameters-no_dialog   abap_true.
    wa_control_parameters-GETOTF      abap_true.
    wa_output_options-tdprinter       gv_devtype   .    "'PDF1'.

*   Executa o formulário
    CALL FUNCTION gv_formname
      EXPORTING
        control_parameters wa_control_parameters
        output_options     wa_output_options
        CABEC              wa_cabec
        DADOS              gt_dados
      IMPORTING
*       document_output_info = wa_document_output_info
*       job_output_options = wa_job_output_options
        job_output_info    wa_job_output_info
      EXCEPTIONS
        formatting_error   1
        internal_error     2
        send_error         3
        user_canceled      4
        OTHERS             5.

    if sy-subrc <> .
      exit.
    endif.


*   Converte para PDF
    gt_otf wa_job_output_info-OTFDATA[].

    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        format                'PDF'
      IMPORTING
        bin_filesize          gv_size
      TABLES
        otf                   gt_otf
        lines                 gt_lines
      EXCEPTIONS
        err_max_linewidth     1
        err_format            2
        err_conv_not_possible 3
        err_bad_otf           4
        OTHERS                5.
    IF sy-subrc <> 0.
      exit.
    ENDIF.


*   Captura o caminho + Nome do Arquivo
    gv_string lv_path.


*   Gera o arquivo PDF - LOCAL
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
      EXPORTING
        BIN_FILESIZE            gv_size
        FILENAME                gv_string
        FILETYPE                'BIN'
*    IMPORTING
*       FILELENGTH              =
      CHANGING
        DATA_TAB                gt_lines
      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
        NOT_SUPPORTED_BY_GUI    22
        ERROR_NO_GUI            23
        others                  24.
    IF SY-SUBRC <> 0.
      message s398(00with 'ERRO ao gerar o arquivo'  gv_string  DISPLAY LIKE 'E'.

    ELSE.
      message s398(00with 'Arquivo'  gv_string  'gerado com sucesso'.


    ENDIF.

  endif.



ENDFORM.            "F_PRINT_FORM