SAP y Visual Basic
Leer el peso de una báscula conectada al puerto serie del PC mediante una DLL de Visual Basic llamada por OLE.
Visual Basic 6 y las DLL ActiveX están obsoletos y no funcionan fuera de SAP GUI para Windows. Hoy este tipo de integración con dispositivos se hace con un pequeño servicio local que SAP llama por RFC o HTTP, o con SAP Cloud Connector e Integration Suite.
- Excel, Word y Visual Basic
- 4 de 4
- Anterior
- SAP y Word con OLE
1. Introducción
Este documento describe un ejemplo de conectividad de SAP R/3 con máquinas externas. En esta ocasión se desea realizar, desde una aplicación desarrollada en SAP R/3, una lectura de la información que una báscula externa a SAP envía al puerto serie de un pc. Para acceder al puerto serie se desarrolla un programa en Visual Basic, que transfiere la información a la aplicación de SAP mediante la tecnología OLE2.
2. Requerimientos funcionales
Se desea desarrollar una aplicación en SAP R/3, que registre los movimientos de los camiones a la entrada y salida de una fábrica, en cuya portería se halla ubicada una báscula. Dicha báscula obtiene el peso de los camiones (información fundamental para la aplicación) y lo envía al puerto serie del pc. El objetivo es registrar este dato en la aplicación de SAP R/3.
3. Requerimientos técnicos
3.1. Programa de lectura del peso para la báscula: Visual Basic
El programa que lee el puerto serie deberá ser desarrollado en Visual Basic de tal manera que pueda ser ejecutado desde SAP R/3 vía OLE2 para obtener el peso recibido desde la báscula. Es decir, el programa de Visual Basic es un mero comunicador entre la báscula y SAP R/3, de forma que su misión es transmitir la información de un lugar a otro.
Especificaciones técnicas del programa Visual Basic “Bascula.vbp”
- El objetivo de este programa es leer un peso dejado por la báscula en el puerto serie.
- Este programa deberá ser generado como una dll (“bascula.dll”)para poder ser ejecutado luego desde SAP R/3.
3.2. Programa de lectura del peso para la báscula: SAP R/3
El programa que finalmente registra la pesada en SAP R/3 deberá comunicarse con el programa desarrollado en Visual Basic para leer la información que éste le transfiere. Para poder utilizar la tecnología OLE desde SAP R/3 se deben tener en cuenta las siguientes premisas:
- Una DLL es un objeto y como tal tiene propiedades y métodos. La DLL se ejecuta desde SAP R/3 con la sentencia CREATE OBJECT. En este ejemplo la DLL es “bascula.dll” y se genera en Visual Basic; el objeto es “bascula” y se define en SAP R/3.
- Una función o subrutina visual basic es un método del objeto “bascula”. Desde SAP R/3 se ejecutan con la sentencia CALL METHOD, con la diferencia que la función devuelve un valor y la subrutina no. En este ejemplo la función es “strDevolverPesoAzk” y su contenido se informa en la variable de SAP R/3 “d_peso_bruto”.
- Una variable visual basic es una PROPIEDAD del objeto “bascula”. Desde SAP R/3 se leerá con la sentencia GET PROPERTY. En este ejemplo no se empleará esta sentencia porque la función ya devuelve un valor ella misma y no era precisa variable alguna en visual basic.
Especificaciones técnicas del programa SAP R/3
- Declarar el include OLE2INCL.
- Declarar el objeto ole: una variable (“bascula”) de tipo ole2_object.
- Declarar una variable de tipo char (“d_peso_bruto”), receptora del peso buscado.
- Ejecutar el programa “Bascula.dll” con la sentencia “CREATE OBJECT bascula 'bascula.Class1'”
- Ejecutar la función “strDevolverPesoAzk” del programa “Bascula.dll” con la sentencia “CALL METHOD OF bascula 'strDevolverPesoAzk' = d_peso_bruto”. Con esta sentencia se transmite el peso obtenido por la función del programa de Visual Basic a la variable del programa SAP R/3.
3.3. Requisitos adicionales en SAP R/3
Para que SAP R/3 pueda trabajar con un objeto externo vía OLE, se debe registrar éste en SAP R/3. Es decir, se debe registrar la DLL “bascula.dll” en la tabla TOLE (independiente de mandante), mediante la transacción SOLE.

Pulsando el icono de modificar y posteriormente el botón “Entradas Nuevas” se registra la DLL en SAP R/3 informando los campos:
• Aplicación OLE (“BASCULA”)
• CLSID (“Bascula.class1”, que es como windows registra la dll, como se puede comprobar ejecutando el programa regedit).
• Clave infotipo (“NO_TYPELIB”)
Para rellenar el campo CLSID se debe ejecutar el programa de windows regedit, donde se buscará el identificador con el que windows ha registrado el programa ‘Bascula’. Este identificador aparecerá en el camino HKEY_CLASSES_ROOT / CLSID.
4. Anexo A: programa en Visual Basic
Se adjunta el fuente del programa desarrollado en Visual Basic, “Bascula.vbp” con todos los archivos necesarios para su edición desde Microsoft Visual Basic 6.0, empaquetados en el archivo "Bascula.zip"
4.1. Archivos de Visual Basic incluidos en "Bascula.zip"
• Bascula.cls: Módulo que incluye las dos funciones que llaman a las básculas. Fuentes editables.
• Form1.frm: Módulo que incluye el control para las comunicaciones por el puerto serie. Fuentes editables.
• Bascula.vbp: Módulo de proyecto de Visual Basic.
• Bascula.dll: Librería dinámica con el código ejecutable, generada desde Microsoft Visual Basic a partir de “Bascula.vbp”.
• El resto de archivos son ficheros de apoyo o configuración internos de Visual Basic.
5. ANEXO B: PROGRAMA SAP R/3
Se adjuntan los trozos de código fuente del programa desarrollado en ABAP para SAP R/3 v4.0b, "ZBASCULA".
PROGRAM zbascula.
(...)
************************************************************************
*Definición de variables
************************************************************************
*Variable en la que se almacena la lectura del peso bruto
data: d_peso_bruto(20).
(...)
************************************************************************
*Definición de includes
************************************************************************
* Include para utilizar OLE2
include ole2incl.
************************************************************************
*Definición de objetos OLE
************************************************************************
* Objeto OLE2 para poder ejecutar la función de la dll
DATA: bascula TYPE ole2_object.
(...)
************************************************************************
*START-OF-SELECTION
************************************************************************
* Llamada al form que lee el peso del puerto serie vía la dll
perform obtener_peso.
(...)
************************************************************************
*Forms adicionales
************************************************************************
*----------------------------------------------------------------------*
* FORM OBTENER_PESO *
*----------------------------------------------------------------------*
* Vía comunicación OLE2 se lee el peso bruto *
*----------------------------------------------------------------------*
form obtener_peso.
CLEAR d_peso_bruto.
* Se arranca la dll creando una instancia (BASCULA) en el programa SAP
CREATE OBJECT bascula 'bascula.Class1'.
IF sy-subrc <> 0.
MESSAGE ID 'ZM' TYPE 'E' NUMBER '028'.
* Error en la conexión con la báscula
ENDIF.
* Se ejecuta la función de la dll (strDevolverPesoAzk) informando
* D_PESO_BRUTO con el valor que devuelve la función
CALL METHOD OF bascula 'strDevolverPesoAzk' = d_peso_bruto.
IF sy-subrc <> 0.
MESSAGE ID 'ZM' TYPE 'E' NUMBER '029'.
* Error en la lectura del peso
ENDIF.
ENDFORM. " OBTENER_PESO