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