PDA

Ver la Versión Completa : Mandar un alv por correo en un job


jtristan
17/04/09, 09:55:31
Hola,

queremos ejecutar un programa abap a través de un job, y que el resultado del alv se mandé por correo.
¿Hay que hacer algo en el alv para que el job sepa que tiene que mandar el informe por correo?

Muchas gracias.
Un saludo.

Floren
17/04/09, 10:34:31
Hola,

Lo sencillo sería picar el código en el report para enviar el mail, ¿no?

Un saludo

jtristan
17/04/09, 11:39:32
Esa es la duda que tenía. NO sabía si indicando en el job que se quiere mandar algo por mail ya él recogía el resultado y lo generaba o había que crear código para ello.
Voy a buscar entonces cómo mandar algo por mail desde código.

Muchas gracias.

Jonathan Barrio Rodriguez
17/04/09, 15:54:11
La opción que yo he usado para esto es usar los datos del ALV en un formulario SMARTFORM, luego pasarlo a PDF y a continuación agregar el dicho PDF a un Mail.

SALUDOS.

abaper_biz
17/04/09, 20:30:15
Hola, podrias utilizar esta funcion que permite enviar reportes alv en formato XLS o PDF.

*-----------------------------------------------------------
DESCRIBE TABLE objtxt LINES w_lines.
CLEAR reclist.
reclist-receiver = 'destinatario@correo.com'.
reclist-express = 'X'.
reclist-rec_type = 'U'.
reclist-copy = 'X'.
APPEND reclist. " aqui va la lista de destinatarios.


CONCATENATE
'Sociedad' 'Usuario' 'Fecha Venc' 'Ejercicio' 'Solicitud'
'Secuencia' 'Cliente' 'Razón Social'
'Importe ' 'Banco' INTO
i_contents_bin SEPARATED BY con_tab.


CONCATENATE con_cret i_contents_bin INTO i_contents_bin.
APPEND i_contents_bin.
APPEND i_contents_bin.
APPEND i_contents_bin.
APPEND i_contents_bin.




DESCRIBE TABLE objtxt LINES w_lines.
objpack-transf_bin = ' '.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = w_lines * 255.
objpack-doc_type = 'RAW'.
objpack-obj_name = 'File.Xls'.
objpack-obj_descr = 'Aqui ingresas el mensaje del correo '.
APPEND objpack.
DESCRIBE TABLE i_contents_bin LINES objpack-body_num.
objpack-transf_bin = 'X'.
objpack-head_start = 1.
objpack-head_num = 1.
objpack-body_start = 1.
objpack-doc_size = objpack-body_num * 255.
objpack-doc_type = 'XLS'. " --> aqui le indicas el formato
APPEND objpack.
*------------------------------------------------

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = doc_chng "-> este es el asunto del mail
put_in_outbox = 'X' "-> salida a sapoffice.
commit_work = 'X'
TABLES
packing_list = objpack
object_header = objhead
contents_bin = i_contents_bin " contenido del alv.
contents_txt = objtxt " nombre archivo adjunto
receivers = reclist " lista de destinatarios
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.


Espero te sirva el ejemplo :D

Atlas
17/04/09, 20:48:07
Puedes recuperar el spool on una funcion sap en una tabla interna y esta tabla mandarla por mail con la funcion de enviar mails en formato ALI ( lista abap ).Pero para ello tienes que generar el job por codigo (l resultado es el listado tal cual)

Si puedes generar un segundo paso del job, podrias hacer un programa que recuperara y madara este listado (el resultado es tal cual tambien)

Si el caso es mandar el mail en el propio programa y es este programa es el que se lanza por job simplemente pasandole la tabla del alv como adjunto en formato dat ( el resultado es un fichero de texto tabulado, que se puede habrir con excel, pero no es el listado tal cual)

jtristan
20/04/09, 06:12:58
Muchas gracias a todos.
Voy a probar la función que inicialmente lo veo más sencillo, sobre todo con ese ejemplo tan completo, jeje.

marianoa
20/04/09, 14:36:54
ese alv generalmente se levanta del spool cuando lo generas, el tema es que no se si te va a dejar mandarlo por mail mediante un job, ya que sap restringe salida de datos a otros sistemas mediante jobs (como por ejemplo bajarlo a PC). Esto sucede porque no verifica a donde se manda y que se manda.
Saludos