Monday, November 15, 2010

Convertir smartform a pdf

FORM convertir_smartform_pdf .
  DATA: lf_fm_name      TYPE rs38l_fnam,   "Nombre smartforms Generado
        lwa_outopt      TYPE ssfcompop,    "propiedades de visualizac
        lwa_ctrlop      TYPE ssfctrlop,    "Controles
        t_otfdata       TYPE ssfcrescl,
        t_pdf_tab       LIKE tline OCCURS 0 WITH HEADER LINE,
        t_otf           TYPE itcoo OCCURS 0 WITH HEADER LINE,
        li_filesize     TYPE i,
        ls_path         TYPE string,
        lc_rpta         TYPE c,
        li_bin_filesize TYPE i.
  DATA: ls_fecha TYPE string,
        ls_error TYPE string.
  PERFORM fecha_en_letras CHANGING ls_fecha.
* Opciones de control
  lwa_ctrlop-no_dialog = 'X'.
  lwa_ctrlop-getotf    = 'X'.
* Opciones de salida
  lwa_outopt-tdnoprev      = 'X'.
  lwa_outopt-xdf2outdev    = 'LP01'.
  lwa_outopt-tddest        = 'LP01'. "Impresora
  lwa_outopt-tdimmed       = 'X'.    "Imprimir Inmediatamente
  lwa_outopt-tddelete      = 'X'.    "Borrar despues de Impresion
  lwa_outopt-tdnewid       = 'X'.    "Crear una nueva orden spool
* Cargar smartform
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = 'ZSF_HOJAVIDA_10'
    IMPORTING
      fm_name            = lf_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.
* Mostrar smatrform
  TRY .
      ls_error = 'No se pudo cargar la hoja de vida.'.
      CALL FUNCTION lf_fm_name
        EXPORTING
          control_parameters = lwa_ctrlop
          output_options     = lwa_outopt
          user_settings      = ' '
          ps_user            = sy-uname
          ps_fecha           = ls_fecha
        IMPORTING
          job_output_info    = t_otfdata
        TABLES
          ptd_ztaspirante_10 = gtd_cabecera_asp
          ptd_educacion      = gtd_educacion
          ptd_titulos        = gtd_titulos
          ptd_laboral        = gtd_laboral
          ptd_conocimientos  = gtd_conocimientos
        EXCEPTIONS
          formatting_error   = 1
          internal_error     = 2
          send_error         = 3
          user_canceled      = 4
          OTHERS             = 5.
      CASE sy-subrc .
        WHEN 1.
          MESSAGE e888 WITH ls_error 'Error de formato.'.
          RETURN.
        WHEN 2.
          MESSAGE e888 WITH ls_error 'Error interno.'.
          RETURN.
        WHEN 3.
          MESSAGE e888 WITH ls_error 'Error en el envio de datos.'.
          RETURN.
        WHEN 4.
          MESSAGE e888 WITH ls_error 'Usuario cancelo la accion.'.
          RETURN.
        WHEN 5.
          MESSAGE e888 WITH ls_error 'Error no contemplado.'.
          RETURN.
      ENDCASE.
    CATCH cx_sy_dyn_call_illegal_type.
      MESSAGE e888 WITH ls_error 'Excepcion lanzada'.
      RETURN.
  ENDTRY.
  t_otf[] = t_otfdata-otfdata[].
  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format                = 'PDF'
      max_linewidth         = 132
    IMPORTING
      bin_filesize          = li_bin_filesize
    TABLES
      otf                   = t_otf
      lines                 = t_pdf_tab
    EXCEPTIONS
      err_max_linewidth     = 1
      err_format            = 2
      err_conv_not_possible = 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.
* Mostrar dialogo guadar archivo
  PERFORM obtener_ruta_guardar_archivo CHANGING ls_path
                                                lc_rpta.
  CHECK lc_rpta = 'T'.
* Descargar archivo
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize = li_bin_filesize
      filename     = ls_path
      filetype     = 'BIN'
    IMPORTING
      filelength   = li_filesize
    TABLES
      data_tab     = t_pdf_tab
    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
      OTHERS                          = 22.
  IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    MESSAGE s184 WITH 'Descarga Satisfactoria.'.
  ENDIF.
ENDFORM.  

2 comments:

  1. Estimado que pones en:

    PERFORM obtener_ruta_guardar_archivo CHANGING ls_path lc_rpta.

    podrías completarlo por favor???

    ReplyDelete
  2. Muchas gracias, justo lo que buscaba.

    ReplyDelete