blog de Floren

SAP HCM y Programación en ABAP

Conexión Excel-SAP

Posted by Floren en abril 28, 2008

Report en Excel que usa una RFC para capturar la información de SAP. Esto se consigue con VBA (Visual Basic para Aplicaciones)  de Excel y ABAP para crear la función RFC.

Aquí os pongo un ejemplillo de cómo se ha hecho la conexión Excel-SAP, por si sirve de algo en un futuro o por si hay alguien aburrido sin asignación y quiere curiosear un poco… Con esto se puede deducir que aparte de hacerlo con VBA de Excel, se puede hacer lo mismo con VBA Word/Access, Visual Basic 6, VBScript en alguna pagina web, etc.

 

SAP

Crear una funcion RFC que tenga de entrada PI_CODIGO, de tablas PT_TABLA y PT_OUTPUT.

Microsoft Excel:

Tools / Macro / Visual Basic Editor

Visual Basic Editor:

Insert / Module

Creáis una subrutina (por ej. Conectar) con el siguiente código. Esto luego se lo asignáis a un botón como los macros.

Sub Conectar()

‘************************************************************************

‘ Declaración de datos

‘************************************************************************

‘ Conectores a SAP.Functions.

Dim R3 As Object

Dim MyFunc As Object

‘ Parametros para exportar a la función RFC

Dim PI_CODIGO As Object

‘ Tablas para exportar a la función RFC

Dim PT_TABLA As Object

‘ Tablas para importar de la función RFC

Dim PT_OUTPUT As Object

‘ Resultado de la conexión con SAP

Dim Result As Boolean

‘ Otras variables

Dim iRow, iRowAux As Integer

‘************************************************************************

‘ Flujo de proceso

‘************************************************************************

‘ Establecer la conexión con los SAP add-ins

Set R3 = CreateObject(“SAP.Functions”)

‘ Ejecutar la función RFC en modo visible (te saldrá el popup de SAP GUI para poner usuario y contraseña

If R3.Connection.logon(0, False) <> True Then

    MsgBox(“Error conectando al sistema”)

    End

Else

‘   Indicar la función RFC

    Set MyFunc = R3.Add(“ZFUNCION_RFC”)

‘   Cargar parametros a ser enviados a la RFC – EXPORTING

    Set PI_CODIGO = MyFunc.exports(“PI_CODIGO”)

    PI_CODIGO.Value = Range(“A1”).Value

‘   Cargar tablas a ser enviadas a la RFC – TABLES

    Set PT_ TABLA = MyFunc.Tables(“PT_ TABLA “)

    PT_ TABLA.Rows.Add

    PT_ TABLA.Value(1, “CAMPO1”) = Range(“B1”).Value

    PT_ TABLA.Value(1, “CAMPO2”) = Range(“B2”).Value

    PT_ TABLA.Value(2, “CAMPO1”) = Range(“C1″).Value

    PT_ TABLA.Value(2, ” CAMPO2″) = Range(“C2”).Value

‘   Llamar a la función RFC y guardar el resultado

    Result = MyFunc.CALL

    If Result = False Then

        MsgBox (“Error llamando a la función”)

    Else

‘       Recuperar las tablas de salida – TABLES

        Set PT_OUTPUT = MyFunc.Tables(“PT_OUTPUT”)

        For iRow = 1 To PT_OUTPUT.RowCount

            Range(“F” & iRowAux).Value = PT_OUTPUT(iRow, “VALOR1”)

            Range(“F” & iRowAux).Value = PT_OUTPUT(iRow, “VALOR2”)

            Range(“F” & iRowAux).Value = PT_OUTPUT(iRow, “VALOR3”)

        Next

‘       Salir del sistema SAP

        R3.Connection.logoff

    End If   

End If

End Sub.

Anuncios

7 comentarios to “Conexión Excel-SAP”

  1. armilso said

    Buenas tardes;

    Me sirvio mucho el código.para desarrollar un programa que envia los parametros a SAP, par cargar unos archivos locales…
    Me funciona bien el llamado pero no me exporta el archivo de errores, ¿ requiere algo especial para que SAP devuelva el archivo?..
    tengo el siguiente código en VB 6.0
    Sub carguesap()
    nombrearchivo = servidorinterface & “\AEPSIN1581020080606.txt”
    archicuentas = servidorinterface & “\CEPSIN1581020080606.txt”
    Set R3 = CreateObject(“SAP.Functions”) ‘ Cargar los parametros de conexion
    R3.Connection.MessageServer = “serverR3” ‘ Nombre del server
    R3.Connection.GroupName = “”
    R3.Connection.System = “00” ‘ Sistema
    R3.Connection.client = “” ‘ Mandante
    R3.Connection.User = “” ‘ Usuario
    R3.Connection.Password = “” ‘ Password
    R3.Connection.language = “ES” ‘ Idioma ‘ Ejecutar la conexion en modo visible.

    If R3.Connection.Logon(0, False) True Then
    MsgBox “No se ha podido establecer la conexión”

    Else ‘ Establecer contacto con la funcion.

    Set oMyFunc = R3.Add(“Z_CALL_ZTRFIAP012_ACR”)
    Set PARSERAC = oMyFunc.Exports(“PARSERAC”)
    Set PERRTACR = oMyFunc.Exports(“PERRTACR”)
    Set PBINACR = oMyFunc.Exports(“PBINACR”)
    PARSERAC.Value = nombrearchivo ‘ Nombre y ubicacion del archivo a cargar
    PERRTACR.Value = servidorerror & “\Err_Acreedor.txt” ‘ Nombre y ubicación del archivo salida de errores
    ‘AQUI NO EXPORTA EL ARCHIVO
    PBINACR.Value = servidorerror & “\Acre_Cargados.txt” ‘ Nombre y ubicación del archivo salida de errores
    Result = oMyFunc.Call

    If Result = False Then

    MsgBox (“Error en el llamado a la transacción”)

    Else
    Set PT_OUTPUt = oMyFunc.Tables(“messtab”)
    For irow = 1 To PT_OUTPUt.RowCount

    coderroR = PT_OUTPUt(irow, “MSGID”)
    MsgBox (” se ejecuto el cargue de Acreedores y genero el código de respuesta ” & coderroR)

    Next…

    Aqui el programa continua con otra RFC

  2. Anónimo said

    saludos a todos.

    tengo q hacer la descarga de un report de PA en formato excel, ahora como hago q VB lo tome de la ruta donde lo coloque?

    he intentado una RFC en sap, haciendo una batch input pero al lanzar la peticion desde vb me manda un dump donde me dice: El error se produjo durante un proceso de batch input.

    muchas gracias, saludos.

  3. vigrx said

    Opinion is the medium between knowledge and ignorance.
    Quotation of Plato

  4. Pablo said

    Gente, Buenas Tardes

    Tengo una base de datos en access que administra una flota de camiones. (Viajes, facturacion, vencimientos de documentacion, etc, etc)

    Todos los choferes y camiones se cargan en SAP (R/3) y todos los vencimientos de la documnetacion de cada uno. Ejemplo :

    Vencimiento de Seguro del Tractor, vencimiento del carnet de conducir, etc,etc.

    Actualmente yo realizo los siguientes pasos para pasar al info de SAP a Access :

    Entre en SAP y ejecuto la consulta zlo001 (F8) luego cuando me muestra los datos, los exporto a excel y los guardo en una carpeta ya prederminada que tengo, donde access va a buscar esa info para exportarla.

    Asi funciona perfecto, lo que sucede es que toda la info que tengo en SAP se actualiza constantemente desde varios puntos del pais y tengo que estar realizando todo ese proceso constantemente para manterner el access actualizado.

    Como podria hacer para que access conecte directamente a SAP y a esa consulta ??

    No soy un experto en SAP por ende pido un poco de paciencia …..

  5. manuel said

    buenas tardes
    alguien puede facilitarme un ejemplo de macro en visual basic 2010 que permita conectar con SAP R/3 y ejecutar una transacción para posteriormente “bajar” los datos de la tabla resultante a una hoja de Excel 2010
    ¿qué otros requisitos necesito en mi sistema para que funcione?
    gracias a quien me pueda ayudar

  6. Anónimo said

    buenas tardes
    alguien puede facilitarme un ejemplo de macro en visual basic 2010 que permita conectar con SAP R/3 y ejecutar una transacción para posteriormente “bajar” los datos de la tabla resultante a una hoja de Excel 2010
    ¿qué otros requisitos necesito en mi sistema para que funcione?
    gracias a quien me pueda ayudar

  7. Diego said

    Hola estoy siguiendo tu tutorial y me sale el error :

    Set R3 = CreateObject(“SAP.Functions”) –Aqui da el error

    Runtime error 429 Activex component can´t create object.

    Tengo Excel 2010 y SAP GUI 7.4

    Espero me puedas ayudar.

    Muchas gracias.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: