Contenido orden de spool a Excel
Hola a tod@s!
Tengo un report que genera un ALV. Si lo lanzo en fondo, se genera una orden de spool con el contenido de dicho ALV. Hasta ahí bien. Tengo que pasar el contenido de la orden de spool a Excel y lo que he hecho ha sido lo siguiente: he ejecutado la función 'RSPO_RETURN_SPOOLJOB' con el ID de la orden de spool, y luego me he bajado la tabla interna que devuelve con 'GUI_DOWNLOAD'. Pero me surgen dos problemas: 1) Se me genera un archivo .xls, pero me viene toda la información en bloque, plana, tal y como se ve en la orden de spool. Es decir, no me ajusta las columnas del ALV a las columnas del archivo excel. 2) Si el ALV tiene muchas columnas, la orden de spool no me muestra el ALV completo y de rebote, el excel que se me genera tampoco está completo. ¿Alguna idea? Pq me estoy desesperando y por internet no encuentro nada que me sirva... Gracias de antemano! :D |
Hola, nunca lo he usado pero deberías probar con la función RSPO_DOWNLOAD_SPOOLJOB a ver si te funciona
Saludos. |
Hola!
Gracias por responder. Esa función ya la había probado y tb me lo baja en bloque (todo me lo mete en una única columna de excel). También probé a hacer los mismos pasos que cuando desde la SP01 bajas una orden a excel, pero no funciona la sentencia estándar "SYSTEM-CALL LOAD LISTLEVEL-STACK INTO STACK." (no rellena la variable STACK), así que ya no se qué mas hacer. He optado por crearme una tabla interna dinámica con el contenido de la orden, pero mi problema actual es que si el ALV es muy largo y no salen todas las columnas en la orden de spool, en mi excel tp :( Alguna idea? |
Para crear el excel formateado y que no te lo meta todo en una columna creo que habria 3 posibles caminos
Bueno, lo primero voy a suponer que en tu programa en algun momento tendras una tabla interna con los datos que quieres volcar en el excel 1.- Puedes ir recorriendo cada linea de la tabla y a su vez cada campo y mediante objetos OLE ir metiendo cada valor en una celda del excel, hay muchos ejemplos de manejo de objetos excel mediante OLE pero es complicado 2.- Otra cosa que podria probar es lo siguiente, tienes que implementar el codigo necesario para recorrer la linea y a su vez cada campo de la linea, ir concatenando los valores de los campos en una variable string separandolos mediante un tabulador y asi obtener una tabla en la que cada linea sera un string que tiene todos los valores concatenados y separados por tabulador, despues esa tabla la podrias descargar a fichero mediante la GUI_DOWNLOAD, prueba a bajarlo como ASC y ponerle extension .xls al nombre del fichero, te dejo un codigo de prueba para que te hagas a la idea de lo que quiero decir data: lv_string type string. data: lt_string type table of string. field-symbols: <campo> type any. loop at tabla into linea. clear: lv_string. do. assign component sy-index of structure linea to <campo>. if sy-subrc is initial. concatenate lv_string CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB <campo> into lv_string. else. exit. endif. append lv_string to lt_string. enddo. endloop. Con esto al final tendrias una tabla con todos los campos concatenados y separados por tabulador 3.- La ultima opcion seria descargarte la tabla a fichero igual que lo haces ahora, y te lo deja en un excel pero todo metido en una columna, lo que harias en tu programa en que despues de descargar el fichero a excel ejecutarias una macro que seria la que te formatearia el excel y convertiria lo que hay en una columna a varias columnas Para ejecutar una macro de excel el codigo mas o menos seria INCLUDE OLE2INCL. data: go_Excel type ole2_object. CREATE OBJECT go_Excel 'EXCEL.APPLICATION'. CALL METHOD OF go_Excel 'RUN' EXPORTING #1 = "NombredelaMacro". La macro tendrias que crearla en el libro de macros personales para que este disponible en todos los libros de excel Para la grabacion de la macro tendrias que utilizar la utilidad de texto a columnas de excel |
Es que el problema que tengo es que no parto de una tabla interna completa.
Si el ALV tiene muchas columnas (es muy ancho) en la spool no sale, y al leer su contenido mi tabla interna está también incompleta :( |
Al lanzar procesos de fondo, es posible setear la lontigud del spool de salida para que su contenido no aparezca truncado. ¿De qué manera lo estás ejecutando? |
Hola, creo q lo primero es tener la tabla interna con todas sus columnas, no se porque en la orden spool no te muestra todas las columnas.
Una cosa q se me ocurre es, porque no directamente del report te bajas el excel (aunq luego genere una orden spool cuando lo lanzas en fondo??? con la funcion GUI_DOWNLOAD puedes bajarte el excel perfectamente. dime tu correo o escribeme a y te envio un ejemplo simple de como bajarte el excel (yo veo facil solucion, espero q sea asi :D saludos |
1 Adjunto(s)
Ahy dejo el ejemplo, ojala te pueda ayudar en algo
|
Hola a todos, gracias por responder!
La cosa es que tengo que hacer un "programa lanzador de otros programas". Yo desde mi "programa lanzador" lanzo en fondo otro programa que genera un ALV, de manera que se me genera una orden de spool con dicho ALV. Luego leo esa orden de spool y el usuario puede elegir entre pasar su contenido a PDF o a excel, por eso estoy obligada a leer del spool. Sin más lo que hago es llamar al report que quiero lanzar en fondo mediante un job, pasándole la variante con la que quiero q se lance: SUBMIT (p_report) USING SELECTION-SET p_varna TO SAP-SPOOL SPOOL PARAMETERS pri_params WITHOUT SPOOL DYNPRO VIA JOB gd_jobname NUMBER gd_jobcount AND RETURN. Y los parámetros de impresión de spool que le paso los obtengo mediante la función GET_PRINT_PARAMETERS: CALL FUNCTION 'GET_PRINT_PARAMETERS' EXPORTING in_parameters = pri_params mode = 'CURRENT' no_dialog = 'X' IMPORTING out_parameters = pri_params EXCEPTIONS invalid_print_params = 1 invalid_archive_params = 2 OTHERS = 3. IF pri_params-pdest IS INITIAL. pri_params-pdest = 'LP01'. pri_params-primm = pri_params-prnew = 'X'. ENDIF. ¿Alguna idea para que la spool me recoja todo el ALV y no me lo deje a falta de columnas? |
Revisá los siguientes parámetros de la función GET_PRINT_PARAMETERS: line_count, line_size, layout y default_spool_size. Mediante ellos se pueden setear propiedades de tamaño del spool. |
Husos Horarios son GMT. La hora en este momento es 06:49:38. |
www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web