blog de Floren

SAP HCM y Programación en ABAP

Conexión Excel-SAP

Publicado por 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.

2 comentarios para “Conexión Excel-SAP”

  1. armilso escribió

    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 escribió

    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.

Escribe un comentario

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>