Mandar un pdf en mail

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Hasurac
    Member
    • nov
    • 41

    #1

    Mandar un pdf en mail

    Hola mi consulta es como puedo enviar un pdf por mail, ósea yo trasformo el smanfromts en pdf pero ahora debo enviarlo por mail y no se como e visto por la red unas opciones pero no logro entenderlas bien si alguien me podria ayudar se lo agradecería hai les pongo el código donde trasformo a pdf


    DATA: lv_solicitud TYPE zthr_0004-num_solicitud,
    i_pdf LIKE tline OCCURS 100 WITH HEADER LINE,
    W_CTRLOP TYPE SSFCTRLOP,
    V_LEN_IN LIKE SOOD-OBJLEN,
    I_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE,
    W_COMPOP TYPE SSFCOMPOP,
    I_TLINE TYPE TABLE OF TLINE," WITH HEADER LINE,
    W_RETURN TYPE SSFCRESCL,
    SPOOLNO type TSP01-RQIDENT. " Orden Spool


    W_CTRLOP-GETOTF = 'X'.
    W_CTRLOP-NO_DIALOG = 'X'.
    W_COMPOP-TDNOPREV = 'X'.
    W_COMPOP-TDDEST = 'LOCL'.
    W_COMPOP-TDARMOD = '1'.
    W_COMPOP-TDCOPIES = '1'.
    W_COMPOP-TDPRINTER = 'SAPWIN'.
    W_COMPOP-TDLIFETIME = '8'.

    CALL FUNCTION '/1BCDWB/SF00000006'

    EXPORTING
    CONTROL_PARAMETERS = W_CTRLOP
    OUTPUT_OPTIONS = W_COMPOP
    USER_SETTINGS = 'X'
    "Aca los parametros que necesita el smartform
    gp_logo = p_logo
    gp_n_solicitud = p_n_solicitud
    gp_nom_tra = p_nom_tra
    gp_rut_tra = p_rut_tra
    gp_empresa = p_empresa
    gp_fech_ing_emp = p_fech_ing_emp
    gp_sindicato = p_sindicato
    gp_tip_boni = p_tip_boni
    gp_fech_soli = p_fech_soli
    gp_rut_bene = p_rut_ben
    gp_nom_famil = p_nom_hc
    gp_ap_paterno = p_ap_paterno
    gp_ap_materno = p_ap_materno

    IMPORTING
    JOB_OUTPUT_INFO = W_RETURN "aca me devuelve el smartform
    TABLES
    tp_for001 = tp_001
    EXCEPTIONS
    FORMATTING_ERROR = 1
    INTERNAL_ERROR = 2
    SEND_ERROR = 3
    USER_CANCELED = 4
    OTHERS = 5.
    IF SY-SUBRC NE 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *
    * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

    I_OTF[] = W_RETURN-OTFDATA[].

    CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
    FORMAT = 'PDF'
    MAX_LINEWIDTH = 132
    IMPORTING
    BIN_FILESIZE = V_LEN_IN
    TABLES
    OTF = I_OTF
    LINES = I_TLINE
    EXCEPTIONS
    ERR_MAX_LINEWIDTH = 1
    ERR_FORMAT = 2
    ERR_CONV_NOT_POSSIBLE = 3
    OTHERS = 4.
    IF SY-SUBRC EQ 0.
    ENDIF.
  • The_best_for_less
    Junior Member
    • may
    • 7

    #2
    Prueba...

    Estimado prueba con este código, a mi me funko
    Saludos.

    REPORT zkpi0020.
    ***
    TABLES: usr01. "Maestro de usuarios
    *
    DATA: d_lineas LIKE sy-tabix,
    i_pdf LIKE tline,
    fich_p_borrar LIKE tsp01-rqtitle,
    pbyte TYPE i,
    i_spoolreq LIKE rsporq,
    spool_id LIKE tsp01-rqident,
    respuesta LIKE sy-tabix,
    i_otf,
    fecha_w(16),
    indice LIKE sy-tabix,
    datc LIKE rsporq-rqcretime,
    l_comando LIKE sxpgcolist-name.
    * Tablas Internas
    DATA: t_pdf LIKE tline OCCURS 0,
    tspoolreq LIKE rsporq OCCURS 0,
    lista_sel LIKE spopli OCCURS 0 WITH HEADER LINE.

    DATA: BEGIN OF i_output OCCURS 10.
    INCLUDE STRUCTURE btcxpm.
    DATA: END OF i_output.
    DATA: d_status LIKE extcmdexex-status,
    d_exit LIKE extcmdexex-exitcode.

    DATA : p_to(60),
    p_subj(30),
    p_body(50).

    * Include Objetos OLE para envio de mensajes
    INCLUDE ole2incl.

    ***-------------------------------------------------------------------**
    ** PANTALLA DE SELECCION

    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF BLOCK datos WITH FRAME TITLE text-000.
    PARAMETERS:
    p_arch LIKE tsp01-rqtitle,
    p_fich LIKE rlgrap-filename OBLIGATORY
    DEFAULT 'C:\Envios\',
    usernam LIKE sy-uname DEFAULT sy-uname,
    disp LIKE rspotype-device OBLIGATORY,
    datum LIKE sy-datum DEFAULT sy-datum OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK datos.
    *
    INITIALIZATION.
    PERFORM recuperar_impresora.
    ***------------------------------------------------------------------***
    START-OF-SELECTION.
    PERFORM buscar_datos_seleccion.
    *
    IF respuesta NE 0.
    PERFORM tratamiento_pdf.
    DESCRIBE TABLE t_pdf LINES d_lineas.
    IF d_lineas NE 0. "solo hago el download si tengo datos
    PERFORM bajar_archivo.
    PERFORM envia-mail.
    OPEN DATASET p_fich FOR INPUT IN BINARY MODE. "IN TEXT MODE.
    DELETE DATASET p_fich.
    ENDIF.
    ENDIF.

    END-OF-SELECTION.
    *---------------------------------------------------------------------*
    * Form BUSCAR_DATOS_SELECCION
    *---------------------------------------------------------------------*
    FORM buscar_datos_seleccion.
    CONCATENATE sy-datum '00000000' INTO fecha_w.
    CALL FUNCTION 'RSPO_FIND_SPOOL_REQUESTS' " Leemos los spools
    EXPORTING
    allclients = ' '
    authority = 'X'
    datatype = '*'
    has_output_requests = '*'
    rq0name = '*'
    rq1name = '*'
    rq2name = '*'
    rqdest = disp
    rqident = 0
    rqowner = usernam
    * rqcretime = fecha_w
    TABLES
    spoolrequests = tspoolreq
    EXCEPTIONS
    no_permission = 1
    OTHERS = 2.
    IF sy-subrc <> 0.
    MESSAGE ID 'Z1' TYPE 'E' NUMBER 000 WITH text-001.
    respuesta = 4.
    ELSE.
    PERFORM elegir-spool.
    ENDIF.

    ENDFORM. " BUSCAR_DATOS_SELECCION
    *---------------------------------------------------------------------*
    * Form TRATAMIENTO_PDF
    *---------------------------------------------------------------------*
    FORM tratamiento_pdf.
    * Miramos qué tipo de spool tenemos
    CALL FUNCTION 'RSPO_GET_TYPE_SPOOLJOB'
    EXPORTING
    rqident = spool_id
    IMPORTING
    is_otf = i_otf
    EXCEPTIONS
    can_not_access = 1
    OTHERS = 2.
    IF sy-subrc <> 0.
    MESSAGE ID 'Z1' TYPE 'E' NUMBER 000
    WITH text-002.
    ELSEIF i_otf EQ 'X'.
    * Generar PDF de OTF
    CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
    EXPORTING
    src_spoolid = spool_id
    IMPORTING
    pdf_bytecount = pbyte
    TABLES
    pdf = t_pdf
    EXCEPTIONS
    err_no_otf_spooljob = 1
    err_no_spooljob = 2
    err_no_permission = 3
    err_conv_not_possible = 4
    err_bad_dstdevice = 5
    user_cancelled = 6
    err_spoolerror = 7
    err_temseerror = 8
    err_btcjob_open_failed = 9
    err_btcjob_submit_failed = 10
    err_btcjob_close_failed = 11
    OTHERS = 12.
    ELSE. " Generar PDF de Abap
    CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
    EXPORTING
    src_spoolid = spool_id
    IMPORTING
    pdf_bytecount = pbyte
    TABLES
    pdf = t_pdf
    EXCEPTIONS
    err_no_abap_spooljob = 1
    err_no_spooljob = 2
    err_no_permission = 3
    err_conv_not_possible = 4
    err_bad_destdevice = 5
    user_cancelled = 6
    err_spoolerror = 7
    err_temseerror = 8
    err_btcjob_open_failed = 9
    err_btcjob_submit_failed = 10
    err_btcjob_close_failed = 11
    OTHERS = 12.
    IF sy-subrc EQ 0.
    * Iniciamos la traducción por error en la funcion de conversion ABAP-PDF
    LOOP AT t_pdf INTO i_pdf.
    TRANSLATE i_pdf USING ',.'.
    MODIFY t_pdf FROM i_pdf.
    ENDLOOP.
    ENDIF.
    ENDIF. "De if sy-subrc

    ENDFORM. " TRATAMIENTO_PDF

    *---------------------------------------------------------------------*
    * Form BAJAR_ARCHIVO
    *---------------------------------------------------------------------*
    FORM bajar_archivo.
    CONCATENATE p_fich p_arch '.pdf' INTO p_fich.
    CALL FUNCTION 'WS_DOWNLOAD'
    EXPORTING
    bin_filesize = pbyte
    filename = p_fich
    filetype = 'BIN'
    TABLES
    data_tab = t_pdf
    EXCEPTIONS
    invalid_filesize = 1
    invalid_table_width = 2
    invalid_type = 3
    no_batch = 4
    unknown_error = 5
    gui_refuse_filetransfer = 6.

    IF sy-subrc <> 0.
    MESSAGE ID 'Z1' TYPE 'E' NUMBER '000' WITH text-003.
    ENDIF.
    ENDFORM. " BAJAR_ARCHIVO
    *---------------------------------------------------------------------*
    * Form RECUPERAR_IMPRESORA
    *---------------------------------------------------------------------*
    FORM recuperar_impresora.
    SELECT SINGLE spld FROM usr01
    INTO CORRESPONDING FIELDS OF usr01
    WHERE bname = sy-uname.
    IF sy-subrc = 0.
    disp = usr01-spld.
    ENDIF.
    ENDFORM. " RECUPERAR_IMPRESORA
    *---------------------------------------------------------------------*
    * Form ELEGIR-SPOOL
    *---------------------------------------------------------------------*
    FORM elegir-spool.
    * Definimos la lista para elegir la orden spool
    SORT tspoolreq.
    LOOP AT tspoolreq INTO i_spoolreq.
    IF i_spoolreq-rqcretime+0(8) = datum.
    IF i_spoolreq-rqtitle IS INITIAL.
    CONCATENATE i_spoolreq-rqident i_spoolreq-rq0name
    i_spoolreq-rq1name i_spoolreq-rq2name INTO
    lista_sel-varoption SEPARATED BY space.
    ELSE.
    CONCATENATE i_spoolreq-rqident i_spoolreq-rqtitle
    INTO lista_sel-varoption SEPARATED BY space.
    ENDIF.
    APPEND lista_sel.
    ELSE.
    DELETE tspoolreq.
    ENDIF.
    ENDLOOP.

    * Y Pedimos que se seleccione la orden spool
    SORT lista_sel BY varoption+0(10) AS TEXT.
    IF sy-subrc = 0.
    respuesta = 0.
    CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY'
    EXPORTING
    endpos_col = 60
    endpos_row = 10
    startpos_col = 1
    startpos_row = 1
    titletext = text-010
    IMPORTING
    choise = respuesta
    TABLES
    valuetab = lista_sel
    EXCEPTIONS
    break_off = 1
    OTHERS = 2.
    IF ( sy-subrc = 1 ) OR ( sy-subrc = 2 ).
    LEAVE TO SCREEN 0.
    ELSE.
    IF respuesta NE 0.
    MOVE respuesta TO indice.
    ENDIF.
    READ TABLE lista_sel INTO i_spoolreq INDEX indice.
    SHIFT i_spoolreq LEFT DELETING LEADING space.
    spool_id = i_spoolreq-rqident.
    ENDIF.
    ENDIF.

    ENDFORM. " ELEGIR-SPOOL

    *&---------------------------------------------------------------------*
    *& Form ENVIA-MAIL
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    FORM envia-mail.
    DATA: appoutlook TYPE ole2_object.
    DATA: appout2 TYPE ole2_object.
    DATA: appitem TYPE ole2_object.
    DATA: namespace TYPE ole2_object.
    DATA: attachments TYPE ole2_object.
    * Crear objeto OLE : outlook.application
    CREATE OBJECT appoutlook 'outlook.application' .
    * Mensajes vía MAPI
    CALL METHOD OF appoutlook 'GetNameSpace' = namespace
    EXPORTING #1 = 'MAPI'.
    * Crea objeto nuevo ITEM ( nuevo mensaje )
    CALL METHOD OF appoutlook 'CreateItem' = appitem
    EXPORTING #1 = '0'.
    * Propiedades TO , SUBJECT y BODY
    SET PROPERTY OF appitem 'To' = p_to.
    SET PROPERTY OF appitem 'Subject' = p_subj.
    SET PROPERTY OF appitem 'Body' = p_body.

    ****************************************
    *Se adjunta el fichero
    IF NOT p_fich IS INITIAL.
    CALL METHOD OF appitem 'Attachments' = attachments.
    CALL METHOD OF attachments 'Add'
    EXPORTING #1 = p_fich.
    ENDIF.
    ****************************************
    * Envíar directamente
    *call method of appitem 'Send'.
    *Se muestra la pantalla del outlook
    CALL METHOD OF appitem 'Display'.
    * Libera Espacio del objeto
    FREE OBJECT attachments.
    FREE OBJECT appitem.
    FREE OBJECT namespace.
    * Cierra Outlook ( solo si se quiere que quede cerrado )
    *** CALL METHOD OF APPOUTLOOK 'Quit'.
    FREE OBJECT appoutlook.
    ENDFORM. "ENVIA-MAIL

    Comentario

    • Hasurac
      Member
      • nov
      • 41

      #3
      Gracia s por tu ayuda pero no e s lo que estoy buscando en si lo que pasaste usa el Outlook lo cual no necesariamente van a usar, y la parte de pdf ya esta echa solo deseo saber como mandar el mail con el archivo pdf adjunto pero gracias de todas forma XD

      Comentario

      • Hasurac
        Member
        • nov
        • 41

        #4
        Buscando por Internet lo que encuentro es esta función pero no entiendo bien como ago para cargarle el archivo pdf dado que en algunos lados lo convierten a bin y en otros no pero definen siempre una estructura objekpack o algo así pero n entiendo bien donde cargan ahí si me podrían ayudar agradecería

        Comentario

        Trabajando...