Saludos, gracias por contestarme, te cuento trabajo con SAP BUSSINES 3.0 hice un Script en SAP la cual me descarga varios archivos la cual funciona sin problemas, al igual que en Excel realice una macro la cual me extrae información de esos archivos y me realiza varios reportes la cual funciona sin inconvenientes; el detalle es que ambas macros funcionan por separado, al final quiero es abrir Excel ejecutar la macro que me conecte con SAP y me descargue los archivos para luego me ejecute la macro en Excel
Hola amigo, te pongo un código de una macro que accede a SAP y recupera la información de la descripción de una orden de transporte (Table E07T). Espero que te sirva:
'Para ocultar el proceso
Application.ScreenUpdating = False
'Declaration
Dim objBAPIControl As Object 'Function Control (Collective object)
Dim sapConnection As Object 'Connection object
Dim Total
Dim MyFunc As Object
' Assign.
Set objBAPIControl = CreateObject("SAP.Functions")
Set sapConnection = objBAPIControl.Connection
'Logon with initial values Credenciales de conexcion
sapConnection.Client = "mandante"
sapConnection.User = "usuario"
sapConnection.Password = "contraseña"
sapConnection.SystemNumber = 1
sapConnection.System = "system"
sapConnection.HostName = "hostname"
sapConnection.Language = "ES"
If sapConnection.logon(1, True) <> True Then
MsgBox "No connection to R/3!"
Exit Sub
End If
Dim SEL_TAB, NAMETAB, TABENTRY, ROW As Object
Dim Result As Boolean
Dim iRow, iColumn, iStart, iStartRow As Integer
iStartRow = 4
Sheets("Obj_ORD").Select
Cells.Clear
'*****************************************************
'Call RFC function TABLE_ENTRIES_GET_VIA_RFC
'*****************************************************
Set MyFunc = objBAPIControl.Add("TABLE_ENTRIES_GET_VIA_RFC")
Dim oParam1 As Object
Dim oParam2 As Object
Dim oParam3 As Object
Dim oParam4 As Object
Dim lv_text As String
Dim lv_contador As Integer
'Descripción de la orden
oParam1.Value = "E"
oParam2.Value = ""
oParam3.Value = "E07T"
Dim lv_orden
lv_orden = "TRKORR = '" + orden + "'"
If lv_orden <> "" Then
oParam4.Rows.Add
oParam4.Value(1, "ZEILE") = lv_orden
End If
Result = MyFunc.Call
If Result = True Then
Set NAMETAB = MyFunc.Tables("NAMETAB")
Set SEL_TAB = MyFunc.Tables("SEL_TAB")
Set TABENTRY = MyFunc.Tables("TABENTRY")
Else
MsgBox MyFunc.EXCEPTION
objBAPIControl.Connection.LOGOFF
Exit Sub
End If
If Result <> True Then
MsgBox (EXCEPTION)
Exit Sub
End If
'Display Contents of the table
lv_rango = "D" + CStr(fila)
Range(lv_rango).Select
'Extraemos desde la pos 21, 60 caracteres de la entrada 1
Range(lv_rango).Value = Mid(TABENTRY(1, "ENTRY"), 22, 60)
Range(lv_rango).EntireRow.AutoFit
'*******************************************
'Quit the SAP Application
'*******************************************
objBAPIControl.Connection.LOGOFF
End Sub
Hola @juantomp. He intentado la conexión y no he podido y creo que es porque me falta cargar en referencias la dll necesaria para crear el objeto SAP.Functions ¿sabes cual es dicha dll y si haría falta alguna más para la conexión?
Dim Logoncontrol As Object
Dim objBAPIControl As Object
Dim sapConnection As Object
Dim Total
Dim MyFunc As Object
' Assign.
Set Logoncontrol = CreateObject("SAP.LogonControl.1")
Set objBAPIControl = CreateObject("SAP.Functions")
Set sapConnection = Logoncontrol.NewConnection
'Logon with initial values Credenciales de conexcion
sapConnection.Client = "200"
sapConnection.ApplicationServer = "10.10.0.111"
sapConnection.User = "USUARIO"
sapConnection.Password = "PASSWORD"
sapConnection.SystemNumber = "00"
sapConnection.System = "EMD"
sapConnection.UseSAPLogonIni = False
sapConnection.Language = "ES"
Pues la verdad @smota es que no se muy bien. Tuve un compañero que tenía un Excel que era la caña (vamos genial) que de daba el tiempo que iba a hacer al día siguiente, que se conectaba son sap (aunque no recuerdo muy bien para que) y me dejó tan alucinado que ahora quería yo hacer algo parecido jajaja
Voy a probar el volcado de información desde un Excel con los datos de los tipos de interés para préstamos en la zona euro en la tabla T056P.
La usuaria tiene que introducir los datos todos los días a mano (con la consiguiente fuente de errores) usando una table control que se maneja fatal (tx. OB83) y no querría hacer una transacción y un report para ello.
Voy a investigar que ella se descargue el Excel con la serie histórica de tipos de interés del Banco Central, que seleccione los de la última semana o menos, que lo peque en el Excel que yo le confeccione con la funcionalidad de conexión a sap y le de al botón de subir.
@smota, he hago saber que ha sido un éxito.
La usuaria cuando ha visto lo sencillo y eficaz que es casi se pone a llorar jajaja.
Dice: " después de 8 años teniendo que ir al pdf que publica el banco central y después teclear a mano los dígitos del tipo de interés mirando al pdf y a la pantalla para no equivocarse usando la incómoda OB83 esto es una maravilla".
Lo único que hemos tenido que hacer adicional a lo ya comentado en post de más arriba, es que hemos creado un usuario con permisos de ejecutar funciones por si no ella no se podía conectar.
si @Salco te lo menciono para que lo tengas en cuenta, es por cuestiones del GUI que aun no trabja con arquitectura 64 bit. Siempre que hagas algo como esto, asegurate de que el office sea 32bits, no el OS, bien pudiera ser un OS 64bits con offices 32bits y va a funcionar ^^
Estimados. Buenas noches. Muchas gracias por sus aportes en este tema. Necesito ayuda sobre este tema. He intentado hacer la conexión indicada pero me sale el mensaje: RFC error received, User XXXXXXXXX has no RFC authorization for function group SYST.
Podrían indicarme porqué me sale este mensaje.
Lo que hice fue lo siguiente:
Sub Button3_Click()
Set R3 = CreateObject(“SAP.Functions”) ’ Cargar los parametros de conexion
R3.Connection.MessageServer = “XXXXXXXXXX” ’ Nombre del server
R3.Connection.GroupName = "XXXXXXX"
R3.Connection.System = “XX” ’ Sistema
R3.Connection.Client = “XXX” ’ Mandante
R3.Connection.System = "XXX"
R3.Connection.User = “XXXXXXX” ’ Usuario
R3.Connection.Password = “XXXXXXX” ’ 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"
Exit Sub
Else 'Establecer contacto con la funcion.
MsgBox "Conexión exitosa"
End If
Estaba pensando si había forma, de realizar una conexión desde excel a SAP,que me actualice cada vez que ingreso al archivo de excel los datos de dicha tabla de SAP.
Por ejemplo con la tabla AGR_1521 Consulto roles. Puedo crear una conexión en excel que me actualice los cambios que se van modificando en dicha tabla de SAP.
Perdona @Giovanni, me he perdido un poco.
¿Qué es lo que quieres?
a) que al actualizar el Excel se conecte a sap e inserte lo nuevo del Excel en la tabla AGR_1521?
b) que al actualizar la tabla sap, desde sap se conecte a Excel y sap actualice el Excel?