En el SAPLOGON 7.30 Connection.logon(0, TRUE) funciona y no aparece el SAPLOGON. Pero en el SAPLOGON 7.70, NO. Tengo error de NO CONEXIÓN. Si utilizo Connection.logon(1, False) aparece el SAPLOGON y deso que NO aparezca. Ya que es un proceso automático.
Disculpa, pero me falta datos para entender qué es lo que estás haciendo.
Espero tus detalles
Buenos días y muchas gracias por su atención.
Trabajo con Access y VBA
Lo que hago es acceder a SAP por RFC y enviar o consultar datos, llamando a una función:
'Ejecutar la conexion en modo invisible.
If R3.Connection.logon(1, False) = False Then "En SAPLOGON 7.30 funciona actualmente. Pero en 7.70 sale por error.
'Enviamos el E-Mail
auxError = "No se ha podido establecer la conexión con SAP"
EnviaCorreoSQL "idAPPSEguridad", fromDefault, toDefault, "Rutina: zet_documentos", "zetOrden : " & auxOE & "-" & auxError
strUser = ""
Exit Sub
End If
-----------------------------------------------------------------------------------------------------------------
'PRUEBAS
'El primer parámetro (1) indica el número de la sesión,
'y el segundo parámetro (true/ false) indica que se debe mostrar la ventana de SAP Logon si no hay una sesión existente.
'--------------------------------------------------------------------------------------------------------------
'Establecer contacto con la funcion.
Set MyFunc = R3.Add("ZET_ACTUALIZAR_ZET_DOCUMENTOS")
'Cargar los parametros a enviar a la funcion - EXPORTING
Set orden = MyFunc.exports("ORDEN")
zetOrden = UCase(zetOrden)
orden.Value = zetOrden
etc.
etc.
etc.
En resumen, R3.Connection.logon(0, False) siempre me está mostrando el SAPLogon.
Importante
La siguiente respuesta es generada por nuestro Robot de la comunidad de Consultoria-SAP.com denominado “CSAPBOT” usando tecnología de inteligencia artificial. Por lo tanto, puede haber datos incorrectos. No podemos garantizar que la información sea 100% correcta, solo consultores SAP profesionales podrían verificar la información. Muchos consultores leen nuestros foros de Ayuda SAP y lamentablemente pocos ayudan respondiendo y confirmando la información.
Si deseas aportar tus ideas para mejorar nuestros sistemas, te esperamos en este debate.
Análisis del problema con SAP Logon 7.70 en VBA (RFC con librería librfc32.dll)
Tu código VBA funcionaba correctamente en SAP Logon 7.30, pero en SAP Logon 7.70 se comporta de manera diferente:
En SAP Logon 7.30,
R3.Connection.logon(0, TRUE)
funcionaba en modo silencioso.
En SAP Logon 7.70,
R3.Connection.logon(0, FALSE)
no establece la conexión sin mostrar la ventana de SAP Logon.
Posibles Causas del Error en SAP Logon 7.70
SAP Logon 7.70 maneja credenciales de forma diferente:
- A partir de esta versión, SAP introdujo mejoras de seguridad que impiden el acceso automático sin una sesión explícita.
El acceso por RFC ya no es compatible con librfc32.dll:
- SAP recomienda usar SAP NetWeaver RFC SDK en lugar de la antigua
librfc32.dll
.
No se está pasando un destino de conexión válido:
logon(0, FALSE)
necesita que la conexión se haga con parámetros explícitos.
Solución: Conectar de forma Automática sin Mostrar SAP Logon
Para evitar que SAP Logon se muestre en SAP Logon 7.70, prueba lo siguiente:
Verifica que tienes una entrada en SAP Logon.ini
Antes de conectarte, revisa que el servidor SAP esté definido en SAP GUI Options.
- Abre SAP Logon 7.70.
- Ve a
Configuración > Administración del SAP Logon
. - Asegúrate de que tu sistema SAP esté registrado con su SID y datos correctos.
Conexión con Parámetros en VBA (Sin Ventana SAP Logon)
Cambia la forma en la que estableces la conexión, en lugar de logon(0, FALSE)
, usa parámetros explícitos:
Dim R3 As Object
Set R3 = CreateObject("SAP.Functions")
Dim conn As Object
Set conn = R3.Connection
' Conexión sin mostrar SAP Logon
With conn
.System = "NOMBRE_DEL_SISTEMA" ' Reemplaza con el ID del sistema SAP
.Client = "100" ' Cliente SAP
.User = "usuario_sap" ' Usuario SAP
.Password = "contraseña_sap" ' Contraseña
.Language = "ES" ' Idioma
.ApplicationServer = "servidor.sap.com" ' Nombre del servidor SAP
.SystemNumber = "00" ' Número de instancia de SAP
End With
If conn.logon(0, False) = False Then
MsgBox "Error: No se pudo conectar a SAP"
Exit Sub
End If
Explicación del código:
- Se evita llamar directamente a
logon(0, FALSE)
, pasando los parámetros manualmente. - Esto permite conectarse sin que aparezca la ventana de SAP Logon.
Alternativa: Usar un Destino Predefinido
Si el código anterior no funciona, prueba definir un destino en sapnwrfc.ini y llamarlo en VBA:
-
Ubica el archivo de configuración
sapnwrfc.ini
en:C:\Program Files (x86)\SAP\FrontEnd\SAPgui\sapnwrfc.ini
-
Agrega un destino SAP:
[MiDestinoSAP] ASHOST=servidor.sap.com SYSNR=00 CLIENT=100 USER=usuario_sap PASSWD=contraseña_sap LANG=ES
-
Modifica el código VBA para llamar al destino:
conn.Destination = "MiDestinoSAP" If conn.logon(0, False) = False Then MsgBox "Error: No se pudo conectar a SAP" Exit Sub End If
Resumen Consultoria-SAP
Si R3.Connection.logon(0, FALSE)
dejó de funcionar en SAP Logon 7.70, sigue estas soluciones:
Define la conexión manualmente con
.System, .User, .Password, .ApplicationServer
.
Crea un destino en
sapnwrfc.ini
y usa .Destination
.
Evita librfc32.dll y usa SAP NetWeaver RFC SDK si es posible.
Con estos cambios, la conexión se hará sin mostrar la ventana de SAP Logon.
¡Estamos aquí para ayudarte!
Buenos días: muchas gracias. Ha sido verdaderamente un milagro. LLevaba más de un mes buscando una solución. Ha sido la opción 2: Conexión con Parámetros en VBA (Sin Ventana SAP Logon). La he puesto en VBA y en VB6. Y ha funcionado perfectamente.
Nuevamente muchas gracias por vuestra atención.
Saludos.
Me alegra muchísimo que la comunidad te ayude.
Por favor, hablarle a tus compañeros de esta comunidad
¡Tu voz nos impulsará más allá!