Ver Mensaje Individual
  #2  
Viejo 18/12/09, 12:31:30
The_best_for_less The_best_for_less is offline
Junior Member
 
Fecha de Ingreso: may 2009
Mensajes: 7
Thumbs up 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
Responder Con Cita