Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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 ‘#’).
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:
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.