|
Herramientas | Buscar en Tema | Desplegado |
#31
|
|||
|
|||
Hola LAVR:
Entra en la tx. SP02 y ves tus ordenes de Spool. Mira el numero de la que necesitas y ya está.
__________________
Salu2 |
#32
|
||||
|
||||
Aqui mando unas rutinas, esto recupera el número de spool, convierte el spool a PDF, abre el Outlook, y agrega el archivo a un mail.
Lo importante de esta rutina son las funciones utilizadas. Saludos CJOG *&---------------------------------------------------------------------* *& Form OKCODE_CPDF *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM okcode_cpdf. REFRESH i_rsporq. CLEAR vc_user. CONCATENATE 'ZSDSAPMV7' sy-uname(3) INTO vc_user. CALL FUNCTION 'RSPO_FIND_SPOOL_REQUESTS' EXPORTING allclients = '410' rq2name = vc_user "'ZSDSAPMV7CIP' rqowner = sy-uname TABLES spoolrequests = i_rsporq. IF i_rsporq[] IS INITIAL. MESSAGE i998(sp01r) WITH 'Es necesario mandar a imprimir previamente'. ELSE. IF s_kunnr-high NE space. MESSAGE i532(ou) WITH text-m01. sy-lsind = sy-lsind - 1. IF NOT i_rsporq[] IS INITIAL. PERFORM borra_spool. ENDIF. EXIT. ENDIF. LOOP AT i_rsporq. MOVE i_rsporq-rqcretime(8) TO vd_fecha. IF vd_fecha LT sy-datum. DELETE i_rsporq INDEX sy-tabix. CONTINUE. ELSE. MOVE: i_rsporq-rqident TO vi_spool, i_rsporq-rqident TO st_spool-rqident. CONCATENATE 'C:\P' i_rsporq-rqident '.PDF' INTO vc_file. * SUBMIT rstxpdft4 * WITH spoolno = vi_spool * WITH download = 'X' * WITH p_file = vc_file "skip selection-screen * AND RETURN. CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF' EXPORTING src_spoolid = vi_spool no_dialog = ' ' IMPORTING pdf_bytecount = v_lines pdf_spoolid = vc_spool btc_jobname = vc_jobnm btc_jobcount = vi_jobcn TABLES pdf = i_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 <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. CALL FUNCTION 'RSPO_IDELETE_SPOOLREQ' EXPORTING spoolreq = st_spool. CONCATENATE 'C:\' i_rsporq-rqident '.PDF' INTO vc_file. CONDENSE vc_file. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING bin_filesize = v_lines filename = vc_file filetype = 'BIN' TABLES data_tab = i_pdf. IF sy-subrc EQ 0. READ TABLE s_kunnr INDEX 1. MOVE s_kunnr-low TO vc_kunnr. CLEAR: kna1, adr6. SELECT SINGLE adrnr name1 name2 INTO (kna1-adrnr, kna1-name1, kna1-name2) FROM kna1 WHERE kunnr EQ vc_kunnr. IF sy-subrc EQ 0. SELECT SINGLE smtp_addr INTO adr6-smtp_addr FROM adr6 WHERE addrnumber EQ kna1-adrnr AND persnumber EQ space AND date_from GT '00010101' AND consnumber EQ '001'. ENDIF. CLEAR vc_fecha. CONCATENATE sy-datum+6(2) '/' sy-datum+4(2) '/' sy-datum(4) INTO vc_fecha. CONCATENATE 'al' vc_fecha INTO vc_fecha SEPARATED BY space. CONCATENATE text-r01 vc_fecha INTO vc_subject SEPARATED BY space. CONCATENATE kna1-name1 kna1-name2 ':' INTO i_body-line SEPARATED BY space. APPEND i_body. CLEAR i_body. APPEND i_body. MOVE text-r02 TO i_body-line. APPEND i_body. CLEAR i_body. MOVE text-r03 TO i_body-line. APPEND i_body. CLEAR i_body. MOVE text-r04 TO i_body-line. APPEND i_body. CLEAR i_body. MOVE adr6-smtp_addr TO i_address. APPEND i_address. CLEAR i_address. MOVE vc_file TO i_attachs. APPEND i_attachs. CLEAR i_attachs. CALL FUNCTION 'Z_OUTLOOK' EXPORTING subject = vc_subject TABLES email_body = i_body email_address = i_address email_attachments = i_attachs EXCEPTIONS invalid_pathname = 1 download_failed = 2 execution_failed = 3 OTHERS = 4. CLEAR: v_lines, vc_file. REFRESH: i_pdf, i_body, i_address, i_attachs. ENDIF. CLEAR: vd_fecha, v_lines, i_pdf, vc_file. REFRESH i_pdf. ENDIF. EXIT. ENDIF. ENDLOOP. ENDIF. sy-lsind = sy-lsind - 1. ENDFORM. " OKCODE_CPDF ************************************************ ************************************************ FUNCTION z_outlook. *"---------------------------------------------------------------------- *"*"Interfase local *" IMPORTING *" REFERENCE(SUBJECT) TYPE C OPTIONAL *" TABLES *" EMAIL_BODY STRUCTURE SOLI OPTIONAL *" EMAIL_ADDRESS STRUCTURE SOLI OPTIONAL *" EMAIL_ATTACHMENTS STRUCTURE SOLI OPTIONAL *" EXCEPTIONS *" INVALID_PATHNAME *" DOWNLOAD_FAILED *" EXECUTION_FAILED *"---------------------------------------------------------------------- *- Documentación.- * Mediante esta función podemos enviar a través del Outlook un mail * indicando el Asunto, Destinatarios, Cuerpo del mensaje, Archivos adj. * Tan solo es necesario pasar los parámetros que queramos y automát. * nos dejará en la pantalla de envio de mensajes de Outlook con todos * los datos rellenos CONSTANTS: BEGIN OF con_hex, tab(1) TYPE x VALUE '09', END OF con_hex. DATA: g_file(120), g_translate(2), t_vbs LIKE STANDARD TABLE OF soli WITH HEADER LINE, g_last, g_vbs_filename LIKE rlgrap-filename, commandline(1000). *- Prepara un código para traducir una comilla en hexadecimal *- para que pueda ser traducido de nuevo en comillas dobles. CONCATENATE '"' con_hex-tab INTO g_translate. APPEND: 'Dim myolapp ' TO t_vbs, 'Dim olNamespace ' TO t_vbs, 'Dim myItem ' TO t_vbs, 'Dim myRecipient ' TO t_vbs, 'Dim myAttachments ' TO t_vbs, ' ' TO t_vbs, 'Set myolapp = CreateObject("Outlook.Application") ' TO t_vbs, 'Set olNamespace = myolapp.GetNamespace("MAPI") ' TO t_vbs, 'Set myItem = myolapp.CreateItem(olMailItem) ' TO t_vbs, ' ' TO t_vbs. *- Destinatarios del mensaje LOOP AT email_address. IF email_address = space. CONTINUE. ENDIF. CONCATENATE 'Set myRecipient = myItem.Recipients.Add("' email_address '")' INTO t_vbs. APPEND t_vbs. ENDLOOP. *- Asunto del mensaje CONCATENATE 'myItem.Subject = "' subject '"' INTO t_vbs. APPEND t_vbs. *- Archivos adjuntos APPEND 'Set myAttachments = myItem.Attachments' TO t_vbs. *- Chequeo de existencia de archivos adjuntos LOOP AT email_attachments. g_file = email_attachments-line. CALL FUNCTION 'WS_QUERY' EXPORTING filename = g_file query = 'FE' EXCEPTIONS inv_query = 1 no_batch = 2 frontend_error = 3 OTHERS = 4. IF sy-subrc EQ 0. CONCATENATE 'myAttachments.Add("' email_attachments '")' INTO t_vbs. APPEND t_vbs. ELSE. MESSAGE i000(38) WITH 'No se ha podido adjuntar el archivo' email_attachments. ENDIF. ENDLOOP. *- Cuerpo del email CLEAR: g_last, t_vbs. APPEND t_vbs. LOOP AT email_body. AT FIRST. APPEND 'myitem.body = _' TO t_vbs. ENDAT. AT LAST. g_last = 'X'. ENDAT. *- Comillas dobles(") causan un error en VBScript *- Reemplzar con un hexadecimal y luego reemplaza con *- 2 comillas dobles ("") TRANSLATE email_body USING g_translate. WHILE sy-subrc EQ 0. REPLACE con_hex-tab WITH '""' INTO email_body. ENDWHILE. IF g_last = 'X'. CONCATENATE '"' email_body '" &vbCrLf ' INTO t_vbs. ELSE. CONCATENATE '"' email_body '" &vbCrLf &_' INTO t_vbs. ENDIF. APPEND t_vbs. ENDLOOP. APPEND 'myItem.Display' TO t_vbs. * -- Posibilidad de mostrar un MsgBox al abrir el Outlook * APPEND 'Dim myVar' TO t_vbs. * DATA: aux(255). * aux = 'Aquí podemos poner el mensaje que queramos'. * CONCATENATE 'myVar = MsgBox ("' aux '", 0, "Advertencia")' INTO aux. * APPEND aux TO t_vbs. *- Prepara el nombre de archivo vbscript para descargarlo *- y ejecutarlo, llamando a la variable de entorno de Windows *- TEMP CLEAR g_vbs_filename. CALL FUNCTION 'WS_QUERY' EXPORTING environment = 'TEMP' query = 'EN' IMPORTING return = g_vbs_filename EXCEPTIONS inv_query = 1 no_batch = 2 frontend_error = 3 OTHERS = 4. IF sy-subrc GT 0. RAISE invalid_pathname. ENDIF. CONCATENATE g_vbs_filename '\mail.vbs' INTO g_vbs_filename. commandline = g_vbs_filename. PERFORM sapgui_progress(rstxldmc) USING 10 'Realizando download de fichero...'. *- Descarga el archivo vbscript CALL FUNCTION 'WS_DOWNLOAD' EXPORTING filename = g_vbs_filename filetype = 'DAT' mode = 'S' TABLES data_tab = t_vbs EXCEPTIONS file_open_error = 1 file_write_error = 2 invalid_filesize = 3 invalid_table_width = 4 invalid_type = 5 no_batch = 6 unknown_error = 7 OTHERS = 8. IF sy-subrc GT 0. RAISE download_failed. ENDIF. * Abre el Outlook PERFORM sapgui_progress(rstxldmc) USING 50 'Abriendo Outlook... Espere por favor'. CALL FUNCTION 'WS_EXECUTE' EXPORTING commandline = commandline program = 'WSCRIPT.EXE' EXCEPTIONS frontend_error = 1 no_batch = 2 prog_not_found = 3 illegal_option = 4 OTHERS = 5. IF sy-subrc GT 0. RAISE execution_failed. ENDIF. MESSAGE s000(38) WITH 'Abriendo Outlook... Espere por favor'. ENDFUNCTION. |
#33
|
|||
|
|||
Varias Ordenes SPOOL
Habeis conseguido alguno generar un PDF que contengan varias ordenes SPOOL???
|
#34
|
|||
|
|||
Si por cada orden de spool consigues una tabla interna con los datos lo único que tienes que hacer es copiar todas las tablas con las órdenes en una sola.
Debería funcionar... |
#35
|
|||
|
|||
Pues no ya lo intente pero solo me guarda la ultima orden, vamos que me machaca las anteriores
|
#36
|
|||
|
|||
No me has entendido. Lo que tienes que hacer es guardar en diferentes tablas las diferentes órdenes de spool y luego esas tablas las juntas en una sola,
Saludos |
#37
|
|||
|
|||
No no si ya he realizado eso, me he hecho un loop con un append y al final paso la tabla global al la funcion, el tamaño del fichero es el correcto ( la suma de todos) pero solo contiene la ultima orden spool de las anteriores nada de nada. No se si cada fichero contiene un EON y un EOF y al intentar meterlo en uno solo me machaca los anteriores o que....
|
#38
|
|||
|
|||
Vaya, el que no te había entendido era yo.
Pues es muy posible que tengas un principio y fin de fichero. El problema va a ser reconocerlo... ¿Con que función descargas el PDF? Veo que en la GUI download hay un parámetro que es APPEND que por defecto tiene space. Prueba a marcarlo con X y haces tantos downloads como ordenes de spool tengas añadiendo al mismo archivo. Creo que los datasets tambien tenían algún parámetro que indicaba si el archivo se sobreescribía o se anexaba. A ver si así funciona. |
#39
|
|||
|
|||
Vale, y pongamos que adjunto el archivo correctamente, pero como puede hacer para darle un nombre, en que parametro de que tabla pongo el nombre que aparecerá a posteriori en el email??
Y una duda, en la tabla "object_header" que se le pasa? muchas gracias |
#40
|
|||
|
|||
¿Y si lo quiero dejar en el servidor?
Hola.
Creo que en este tema siempre se está hablando de dejar el PDF en local. ¿Alguien sabe como se podría dejar en el servidor? Gracias a todos. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|