Sei sulla pagina 1di 4

02/03/12

Ejemplo de comunicacion entre SAP R/3 y Microsoft Excel

SAP Plant Maintenance


www.guixt.com

Simplify PM, scheduling, time entry Download case study.

BI Director

Excellence in Design, Documentation and Analysis of BI Applications


bi-director.com

CONECTIVIDAD SAP R/3 Ejemplo de comunicacin entre SAP R/3 y Microsoft Excel mediante tecnologa OLE2

INDICE 1. INTRODUCCION 2. REQUERIMIENTOS FUNCIONALES 3. CONSIDERACIONES TCNICAS 4. PROCEDIMIENTO A SEGUIR 5. ANEXO B: PROGRAMA SAP R/3

1. INTRODUCCION Este documento describe un ejemplo de conectividad y programacin Excel desde SAP/R3 mediante la tecnologa OLE2. Desde SAP es posible arrancar Excel y ejecutar todos sus comandos como crear objetos como filas, libros, rangos de celdas, etc; sobre los cuales se pueden ejecutar mtodos como insertar, copiar, asignar propiedades a una celda (como formato numrico con separador de miles), asignar texto a una celda, etc. En definitiva, est disponible desde ABAP todo el lenguaje de programacin Excel. 2. REQUERIMIENTOS FUNCIONALES Se desea volcar a Excel un listado obtenido desde SAP. Se puede generar un fichero de texto que luego podr ser abierto desde Excel (donde habr que formatearlo cuidadosamente de forma manual) o se puede abrir Excel y mostrar la informacin en un archivo ya formateado directamente desde SAP. 3. CONSIDERACIONES TCNICAS Para la comunicacin via OLE2 se dispone de las sentencias ABAP:

CREATE OBJECT CALL METHOD SET PROPERTY GET PROPERTY Todos los programas que utilicen tecnologa OLE2 debern hacer referencia al include OLE2INCL, que contiene las definiciones de tipos necesarias para declarar los objetos. Asimismo en SAP existe la transaccin SOLI que muestra las aplicaciones que soportan comunicacin OLE2 con sus infotipos. Los infotipos son la relacin de verbos (propiedades y mtodos) de una aplicacin;

www.abap.es/centro_OLE_Excel.html

1/4

02/03/12

Ejemplo de comunicacion entre SAP R/3 y Microsoft Excel

as en este ejemplo el infotipo comprende la relacin de mtodos y propiedades de Excel. Otra forma de consultar el infotipo es mediante la transaccin SE16 sobre la tabla OLELOAD. De cualquiera de las dos formas se pueden consultar las acciones a ejecutar sobre aplicaciones externas mediante OLE, accesibles desde un programa ABAP. 4. PROCEDIMIENTO A SEGUIR Para volcar la informacin de un listado SAP a formato Excel, se crear una tabla interna con todo el contenido del listado, teniendo en cuenta que se declararn en la tabla interna de trabajo los valores numricos como campos de tipo numrico (puesto que en caso de que se declaren de tipo texto, una vez en Excel no se podr efectuar clculos con dichos campos). Una vez informada la tabla interna se grabar en un fichero local con la funcin WS_DOWNLOAD, siendo el formato del fichero destino WK1 (formato para hoja de clculo). A continuacin se deber arrancar Excel, abrir el fichero, crear un libro nuevo, copiar los datos del fichero al libro y cerrar el fichero. Despus se puede formatear las columnas numricas con punto en los miles, insertar la cabecera del listado con los textos correspondientes en la fila uno del libro y aplicar al libro una presentacin en rejilla. Para realizar todos estos pasos slo hay que utilizar los verbos correspondientes en el infotipo de la aplicacin Excel. Con el objeto de conocer la sintaxis exacta, la mejor solucin es grabar todas las acciones a realizar en una macro de Excel, donde se podr consultar a continuacin la sintaxis de las diferentes intrucciones Excel que se han ejecutado, pudiendo entonces reproducir este cdigo en ABAP. A continuacin se muestra cmo se procedera para abrir un fichero Se crea el objeto Hoja Excel Create object hoja_excel Excel.Sheet Donde hoja_excel es una variable de tipo ole2_object. Para tener acceso a todos los verbos EXCEL desde el programa se debe crear el objeto aplicacin excel como un mtodo del objeto hoja_excel CALL METHOD OF hoja_excel Application = excel La macro grabada en Excel al abrir el fichero contiene la siguiente instruccin Workbooks.Open FileName:="C:\Mis documentos\P2210.xls", Se identifica Workbooks como objeto y OpenFileName como el mtodo que se ejecuta sobre el objeto Workbooks, con el nombre del archivo como un parmetro del mtodo OpenFileName. Se localiza en la la tabla OLELOAD el verbo WORKBOOKS, que es un mtodo del objeto aplicacin Excel creado (a esta conclusin se llega consultado la ayuda de Visual Basic para Excel). Por tanto se puede crear el objeto libros_trabajo aplicando el mtodo WORKBOOKS sobre el objeto excel del modo siguiente: CALL METHOD OF excel WORKBOOKS = libros_trabajo Finalmente ya se puede aplicar el mtodo OpenFileName sobre el objeto libros_trabajo CALL METHOD OF libros_trabajo = libro EXPORTING 1# = C:\Mis documentos\P2210.xls. 5. ANEXO A: PROGRAMA SAP R/3 Se adjunta el cdigo fuente del programa desarrollado en ABAP para SAP R/3 v4.0b, "ZEXCEL".

REPORT zexcel. ************************************************************************ * Include necesario para la declaracion de objetos OLE2 ************************************************************************ INCLUDE ole2incl. ************************************************************************ ************************************************************************ * Declaraciones para la llamada a EXCEL. DATA hoja_excel TYPE ole2_object. DATA excel TYPE ole2_object. DATA libro TYPE ole2_object. DATA ole_sheets TYPE ole2_object. DATA ole_sheet TYPE ole2_object. DATA ole_libro TYPE ole2_object. DATA libros_trabajo TYPE ole2_object.

www.abap.es/centro_OLE_Excel.html

2/4

02/03/12

Ejemplo de comunicacion entre SAP R/3 y Microsoft Excel

DATA DATA DATA DATA DATA DATA DATA

ole_datasheet TYPE ole2_object. ole_datacells TYPE ole2_object. l_lines TYPE i. l_lineas(10) TYPE c. rango TYPE ole2_object. row TYPE ole2_object. ventana TYPE ole2_object.

DATA end(10) TYPE c. * Se crea el objeto Hoja Excel. CREATE OBJECT hoja_excel 'Excel.Sheet'. * Se llama a la aplicacin Excel. CALL METHOD OF hoja_excel 'Application' = excel. * Se hace visible la aplicacin Excel SET PROPERTY OF excel 'Visible' = 1. CALL METHOD OF excel 'Workbooks' = libros_trabajo. * Se abre el archivo con los datos del listado CALL METHOD OF libros_trabajo 'Open' = libro EXPORTING #1 = 'C:\DOCS\PRUEBA.XLS'. CALL METHOD OF libro 'Worksheets' = ole_sheets. * Se crea un nuevo libro y se copian los datos del fichero al libro CALL METHOD OF ole_sheets 'Item' = ole_datasheet EXPORTING #1 = 1. CALL METHOD OF ole_datasheet 'Copy'. ! * Se cierra el fichero de trabajo con los datos. call method of libro 'Close' exporting #1 = 0. GET PROPERTY OF excel 'ACTIVESHEET' = ole_sheet. CALL METHOD OF ole_sheet 'RANGE' = rango EXPORTING #1 = 'C1' #2 = 'H1'. * Se formatea el ancho de columna SET PROPERTY OF rango 'COLUMNWIDTH' = 21. GET PROPERTY OF excel 'ACTIVEWINDOW' = ventana. * Se muestra el libro con el formato en rejilla SET PROPERTY OF ventana 'DISPLAYGRIDLINES' = -1. FREE OBJECT rango. * Se obtiene el total de lneas de la tabla para crear * un rango con todas las celdas nmericas y formatearlas DESCRIBE TABLE i_detmedi LINES l_lines. WRITE l_lines TO l_lineas. TRANSLATE l_lineas USING '. '. * Se aplica el formato numrico con decimales en los miles a * las celdas que contienen importes. CONCATENATE 'H' l_lineas INTO end. CONDENSE end NO-GAPS. CALL METHOD OF ole_sheet 'RANGE' = rango EXPORTING #1 = 'C1' #2 = end. SET PROPERTY OF rango 'NUMBERFORMAT' = '#,##0'. FREE OBJECT rango. *Se informa la cabecera del listado, insertando una fila en blanco al principio del mismo CALL METHOD OF ole_sheet 'RANGE' = rango EXPORTING #1 = 'A1'. CALL METHOD OF rango 'ENTIREROW' = row. CALL METHOD OF row 'INSERT'. FREE OBJECT rango. FREE OBJECT row. * Creando un rango con cada una de las celdas e informando el texto * en las celdas se obtiene la cabecera call method of ole_sheet 'RANGE' = rango exporting #1 = 'A1'. SET PROPERTY OF rango 'FORMULAR1C1' = text-003. FREE OBJECT rango. CALL METHOD OF ole_sheet 'RANGE' = rango EXPORTING #1 = 'B1'. SET PROPERTY OF rango 'FORMULAR1C1' = text-012. FREE OBJECT rango. CALL METHOD OF ole_sheet 'RANGE' = rango EXPORTING #1 = 'C1'.

www.abap.es/centro_OLE_Excel.html

3/4

02/03/12

Ejemplo de comunicacion entre SAP R/3 y Microsoft Excel

SET PROPERTY OF rango 'FORMULAR1C1' = text-007. FREE OBJECT rango. CALL METHOD OF ole_sheet 'RANGE' = rango EXPORTING #1 = 'D1'. SET PROPERTY OF rango 'FORMULAR1C1' = text-008. FREE OBJECT rango. CALL METHOD OF ole_sheet 'RANGE' = rango EXPORTING #1 = 'E1'. SET PROPERTY OF rango 'FORMULAR1C1' = text-013. FREE OBJECT rango. CALL METHOD OF ole_sheet 'RANGE' = rango EXPORTING #1 = 'F1'. SET PROPERTY OF rango 'FORMULAR1C1' = text-010. FREE OBJECT rango. CALL METHOD OF ole_sheet 'RANGE' = rango EXPORTING #1 = 'G1'. SET PROPERTY OF rango 'FORMULAR1C1' = text-011. FREE OBJECT rango. CALL METHOD OF ole_sheet 'RANGE' = rango EXPORTING #1 = 'H1'. SET PROPERTY OF rango 'FORMULAR1C1' = text-013. FREE OBJECT rango. * Se liberan todos los objetos creados FREE OBJECT libro. FREE OBJECT libros_trabajo. FREE OBJECT ventana. FREE OBJECT ole_sheet. FREE OBJECT rango. FREE OBJECT ole_sheets. FREE OBJECT ole_datasheet. FREE OBJECT hoja_excel. FREE OBJECT excel.

www.abap.es/centro_OLE_Excel.html

4/4

Potrebbero piacerti anche