20240307

Validação de Data

    call function 'DATE_CHECK_PLAUSIBILITY'
      exporting
        date                            = lv_dt
      EXCEPTIONS
        PLAUSIBILITY_CHECK_FAILED       = 1
        OTHERS                          = 2        .


20240306

READ TABLE (novo)

*****   Validação
     LOOP AT ... INTO WA.
        TRY.
          data(ls_ztbsd0027) = gt_ztbsd0027[ kostl = wa-kostl
                                             perio = wa-perio
                                             gjahr = wa-gjahr
                               ] .

        CATCH cx_sy_itab_line_not_found .
          gv_erro = abap_true.
          message s000(zlg) with 'Não existe valores para serem rateados'
                                 'rateados neste Centro de Custo' wa-kostl.
          return.

        ENDTRY.
      ENDLOOP.



20240304

Split Drive Folder Filename Extension

Função CH_SPLIT_FILENAME



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 c LENGTH 8,
    lv_hora     type c 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 = strlen( p_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 <> 0 .
      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(00) with 'ERRO ao gerar o arquivo'  gv_string  DISPLAY LIKE 'E'.

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


    ENDIF.

  endif.



ENDFORM.            "F_PRINT_FORM