Está en la página 1de 4

CONECTIVIDAD SAP R/3

Un ejemplo de comunicación entre SAP R/3 y Microsoft Word


mediante tecnología OLE2

INDICE

1. INTRODUCCION
2. REQUERIMIENTOS FUNCIONALES
3. CONSIDERACIONES TÉCNICAS
4. PROCEDIMIENTO A SEGUIR
5. ANEXO A: PROGRAMA SAP R/3

1. INTRODUCCION
Este documento describe un ejemplo de conectividad y programación Word desde
SAP/R3 mediante la tecnología OLE2.
Desde SAP es posible arrancar Word y ejecutar todos sus comandos como abrir
fichero, reemplazar, crear un documento nuevo, etc.
En definitiva, está disponible desde ABAP todo el lenguaje de programación Word
Basic.

2. REQUERIMIENTOS FUNCIONALES
Se desean imprimir desde SAP cartas para enviar a los proveedores, informando
desde el propio SAP algunos de los datos de los proveedores. Para ello se creará un
documento Word de partida con el texto de la carta y con los datos a informar desde
SAP intercalados entre un carácter especial (por ejemplo ‘#’).

Una muestra de este documento sería:

Texto libre #cod_prov# texto libre

Texto libre #nom_prov# texto libre

En este ejemplo los campos a informar desde SAP serían cod_prov y nom_prov que
se corresponderían al código y nombre del proveedor.

3. CONSIDERACIONES TÉCNICAS
Para la comunicación via OLE2 se dispone de las siguientes sentencias ABAP:

CREATE OBJECT
CALL METHOD
SET PROPERTY
GET PROPERTY

Todos los programas que utilicen tecnología OLE2 deberán hacer referencia al
include OLE2INCL, que contiene las definiciones de tipos necesarias para declarar
los objetos.

Asimismo en SAP existe la transacción SOLI que muestra las aplicaciones que
soportan comunicación OLE2 con sus infotipos. Los infotipos son la relación de
verbos (métodos y propiedades) de una aplicación; así en este ejemplo el infotipo
comprende la relación de métodos Word Basic. Otra forma de consultar el infotipo es
mediante la transacción 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 generar las cartas, una vez extraídos los datos de los proveedores de la base de
datos y cargados en un tabla interna se deberá arrancar Word, abrir el fichero plantilla
que contiene el formato de la carta, seleccionar todo y pasar todo el texto al
portapapeles, crear un nuevo documento (‘documento1’) y copiar el texto
seleccionado (la carta completa) al nuevo documento creado. Por último con el
comando reemplazar se informarán los datos del proveedor en los campos
intercalados entre el carácter ‘#’. Con esto se obtiene el documento siguiente a partir
del documento original:

Texto libre 123456 texto libre

Texto libre Mecánica de la Peña texto libre

A continuación se podrían imprimir las cartas solicitadas.

Para generar la siguiente carta se borra todo el texto de ‘documento1’, se pega el


contenido del portapapeles (la carta original con los campos a remplazar) y ya se
puede ejecutar el comando Reemplazar de nuevo.
Para realizar todos estos pasos sólo hay que utilizar los verbos correspondientes en el
infotipo de la aplicación Word. Con el objeto de conocer la sintaxis, la mejor solución
es grabar todas las acciones a realizar en una macro de Word, donde se podrá
consultar a continuación la sintaxis de las diferentes intrucciones Word que se han
ejecutado, pudiendo entonces reproducir este código en ABAP. Por desgracia, los
comandos del lenguaje de macros y el infotipo de Word no suelen coincidir, por lo
que habrá que realizar numerosas pruebas antes de dar con el verbo y la sintaxis
exacta.

A continuación se muestra cómo se procedería para abrir un fichero

Se crea el objeto Word.Basic.


Create object zword 'WORD.BASIC'
Donde zword es una variable de tipo ole2_object

Se abre el archivo ‘c:\Mis documentos\prueba.doc’.


Call method of ZWORD exporting #1 = 'c:\Mis documentos\prueba.doc'

5. ANEXO A: PROGRAMA SAP R/3


Se adjunta el código fuente del programa desarrollado en ABAP para SAP R/3 v4.0b,
"ZWORD".

REPORT zword.
TABLES lfa1.
DATA: BEGIN OF i_lfa1 OCCURS 0.
INCLUDE STRUCTURE lfa1.
DATA: END OF i_lfa1.
***********************************************************************
*
* Include necesario para la declaracion de objetos OLE2
***********************************************************************
*
INCLUDE ole2incl.
***********************************************************************
*
* Declaraciones para la llamada a WORD.
DATA zword TYPE ole2_object.
CLEAR zword.
SELECT * FROM lfa1 UP TO 3 ROWS INTO TABLE i_lfa1.
LOOP AT i_lfa1.
AT FIRST.
CREATE OBJECT zword 'WORD.BASIC'.
* Se llamará a este método sólo si se desea que WORD quede visible
CALL METHOD OF zword 'APPSHOW'.
* Se abre el fichero que contiene la plantilla de la carta
CALL METHOD OF zword 'FILEOPEN' EXPORTING #1 =
'C:\DOCS\PRUEBA.DOC'.
* Se selecciona todo el texto del archivo PRUEBA.DOC
CALL METHOD OF zword 'EDITSELECTALL'.
* Se copia el texto seleccionado al portapapeles
CALL METHOD OF zword 'EDITCOPY'.
* Se crea un documento nuevo, al que WORD llama documento1
CALL METHOD OF zword 'FILENEW'.
* Se pega el texto del portapapeles a documento1
CALL METHOD OF zword 'EDITPASTE'.
ENDAT.
* Posicionar al principio del documento
CALL METHOD OF zword 'STARTOFDOCUMENT'.
* Se reemplazan los campos de la carta por los datos de la tabla I_LFA1
CALL METHOD OF zword 'WW2_EDITREPLACE' EXPORTING #1 = '#cod_prov#'
#2 = i_lfa1-lifnr.
CALL METHOD OF zword 'WW2_EDITREPLACE' EXPORTING #1 = '#nom_prov#'
#2 = i_lfa1-name1.
* Se imprime el documento1 que ya contiene la carta
CALL METHOD OF zword 'FILEPRINT' EXPORTING #1 = 'documento1'.
* Posicionar al principio del documento
CALL METHOD OF zword 'STARTOFDOCUMENT'.
* Se selecciona todo
CALL METHOD OF zword 'EDITSELECTALL'.
* Se borra la selección
CALL METHOD OF zword 'EDITCLEAR'.
*Se incorpora el texto original de PRUEBA.DOC
CALL METHOD OF zword 'EDITPASTE'.
AT LAST.
* Se cierra el documento activo, documento1 con opción de salir sin
salvar
CALL METHOD OF zword 'DOCCLOSE' EXPORTING #1 = 2.
* Se cierra el documento activo PRUEBA.DOC con opción salir sin salvar
CALL METHOD OF zword 'DOCCLOSE' EXPORTING #1 = 2.
* Se cierra WORD
CALL METHOD OF zword 'APPCLOSE'.
* Se libera el objeto ZWORD
FREE OBJECT zword.
ENDAT.
ENDLOOP.

También podría gustarte