Problemas de conexión VisualBasic-SAP

,

Hola, buen día para todos.
Estoy de conectarme a SAP desde excel para explotar unas RFCs que hice.
La verdad es que el procedimiento ya lo he hecho y me funciona sin problemas, el caso es que
ahora que estoy tratando de hacerlo sobre SAP 4B, nomas no se quiere conectar.

Tengo todo exactamente igual que en otros casos en los que me he podido conectar de manera exitosa, sin embargo la conexión no se esta dando.
Será que me falta algun dll?, alguien ha batallado con esto en alguna ocasión?
El código que tengo para la conexión es el siguiente:


conn.applicationserver = "XXX.XX.XX.XX" ' IP or DNS-Name of the R/3 Application server
conn.System = "01" ' System ID of the instance, usually 0
conn.Client = "001" ' opt. Client number to logon to
conn.Language = "EN" ' opt. Your login language
conn.User = "USUARIO" ' opt. Your user id
conn.Password = "password" ' opt. Your password

retcd = conn.Logon(0, True) 'True hace que la ventana sea invisible
If retcd <> True Then
    MsgBox " Cannot log on! "
    MsgBox retcd
    MsgBox conn.applicationserver
    Stop
Else
'MsgBox " Logon OK."
End If
End Sub
1 me gusta

Les quiero comentar que el problema lo pude resolver justo antes de publicar mi duda, pero, igualmente me decidi a publicarla para compartirles como fue la solución, por si acaso alguien llegara a estar en la misma situación:
Lo que hice fue hacer un aprueba de conexión modificando la siguiente instrucción:

"retcd = conn.Logon(0, True) 'True hace que la ventana sea invisible " a
“retcd = conn.Logon(0, false) 'False hace que la ventana sea visible”

Con eso me apareció la ventana de logon de manera visible y le di “conectar”, con eso me salio el mensaje de error: “RFC error received:
You are not authoriced to logon to the target system”.
Ya pregunte con el administrador y me dice que el usuario que se use para realizar esa conexión debe ser creado como “CPIC”.
La solución está del lado de BSIS pero supongo que primero uno debe demostrarles su culpabilidad :stuck_out_tongue:

Saludos a todos y espero que el presente caso pueda ser de alguna utilidad.

4 Me gusta

Para aclarar nomás, con SAP 4B a qué te refieres?

Que tal.
Me refiero a la versión de SAP.
4.0B, para ser mas específico.
Saludos.

Tambien quiero volver a aclarar que sigo tratando de corregir el problema :’(…
Cuando supe por donde iba cosa me adelanté a afirmar que ya se iba a corregir, sin embargo no fue asi.
Lo que sí es que no es problema de código. Hay que moverle algo al usuario pero pues ya le igualé los perfiles
con otro usuario para interfases y ni así.
Apenas encuentre una solución la subo, o, si alguien ya la tiene, le agradecería enormemente me la facilitara.

Saludos.

Ok, ya que no se solucionó vuelvo a preguntar lo que estaba por preguntar jejeje.

Esa versión SAP 4B, ¿cuál es?
Dices que antes sí funcionaba, sobre qué versión funcionaba sin problemas?

Cuanto tienes programando en ABAP?
Funcionaba sobre otra 4B y sobre una versión 6.0.
En teoría debería estar funcionando ya que he hecho todo lo que comunmente hago
en estos casos, pero, al parecer me he topado con algun escenario diferente y pues bueno, asi se van aprendiendo los detalles.

Para ese tipo de preguntas, haces clic en mi nick, lees mi presentación. :blush:

Ok, te comento. SAP 4.0B era la versión de SAP mas utilizada en México hace poco mas de 15 o 16 años.

Saludos.

SAP va por una versión bastante “estable” (la versión 6).
Me llama la atención que aún estén en versión 4 en tu empresa.

Igual dejemos a ver si otros @abapers pueden ayudarte.
Disculpa las molestias.

Saludos

Si, es bastante curioso, sobre todo porque fueron los primeros en instalar SAP aca, pero pues se quedaron atras.
De hecho aqui me contrataron precisamente por eso, porque yo comence en SAP desde entonces y necesitaban alguien que estuviera familiarizado con ese entorno de trabajo.

Saludos.

Te agradezco, broh. Esperemos poder encontrar y postear la solución. (y)

Buenas, pero la solución ya las has dado no?. Es necesario para poder conectarse desde Excel a SAP que el usuario de conexión tenga permisos para ejecutar funciones que justo es el puente de unión entre el excel y sap: RFC.

Si, pero no es de donde yo creía. Finalmente es de BSIS pero no es de perfiles, es otra cosa.
Me parece que se va a resolver dentro de poco, apenas salga posteo como se resolvió.
Saludos

@cesar.trevino yo hice un Excel que se conecta a sap y entre otras cosas que tuve que hacer fue dar permisos para ejecutar grupos de funciones al usuario que se conecta:

Qué tal Salco, cómo estás?.
Interesante, en qué transacción o ruta de SPRO se encuentra esa parte?
Esa configuración la hiciste para poder ejecutar la RFC una vez que te conectaste a SAP cierto?
Es bueno que lo menciones por si una vez que me pueda conectar me marca error al querer ejecutar la RFC.

No pude contstar antes porque la pagina no me lo permitió. Me dijo que ya hab{ia excedido mi limite de respuestas
del primer día. (Ya no supe bien si este un foro de consulta y aporte de SAP o una pagina de ligues)

Muchas gracias y saludos!

Hola @cesar.trevino, es por la tx. PFCG para ver los roles que se han creado y luego en la pestaña de autorizaciones. Esto es de un basis, pero nosotros tenemos sap_all así que podemos entrar, pero a lo mejor vos no tenes autorización.

Y efectivamente, primero me conecto a SAP sin problemas y luego ejecuto

Set MyFunc = objBAPIControl.Add("ZPRESTAMOS_TIPOS_INTERES")
Set TAB1 = MyFunc.Tables("ET_EURIBOR")
Set tab2 = MyFunc.Tables("ET_CODRET")
 " aquí relleno la tabla TAB1
returnfunc = MyFunc.Call
"aquí reviso la tab2, que es la de resultados

Si no tienes permisos para ejecutar funciones entonces da un error.

Gracias, Salco. Ahorita ando viendo algunos otros pendientes, en lo que se resuelve este detalle, pero apenas se me pase la solución (Ya que efectivamente no se me permite entrar a move esa parte aunque tenga los permisos), la posteo para que quede documentado.

Saludos!

que tal cesar un gusto saludos y bendiciones desde mexico.

Podrias compartir de favor como hiciste para conectar excel con SAP me gustaria saberlo para sacar provecho de algunos datos que luego necesitamos, gracias de antemano, abrazo

Claro, te paso el ejemplo tal cual:


************************************************
***********Declaracion de datos************
************************************************
Dim LogonControl
Dim conn
Dim funcControl
Dim TableFactoryCtrl
Dim UPDATE_UUID
Dim eDOCUMENT
Dim eUUID
Dim TLOG
************************************************
' Variables para ejecutar S526
Dim v_matnr
Dim v_vkgrp
Dim v_spart
Dim v_gsber
Dim v_vkorg
Dim v_spmon
Dim v_gjahr
Dim v_PCNAM
Dim v_USRDO
Dim v_USRNA
Dim T_OUTPUT
Dim irowaux
************************************************
****MAIN****
*En este punto, cada "CALL" es un llamado a una rutina.
*Solo postearé las rutinas relevantes para
*el objetivo
************************************************
Sub Main()
Set LogonControl = CreateObject("SAP.LogonControl.1")
Set funcControl = CreateObject("SAP.Functions")
Set TableFactoryCtrl = CreateObject("SAP.TableFactory.1")

Call R3Logon

funcControl.Connection = conn

Call Limpia_hojas
Call ZMF_RFC_GET_S526
'Call Z_CE_UPDATE_UUID
Call Resultado
conn.Logoff
'MsgBox " Logged off from R/3! "
End Sub

************************************************
*** Rutina que hace la conexión a SAP***
************************************************
Sub R3Logon()
Set conn = LogonControl.newConnection
'Set conn = LogonControl.newconnection

conn.applicationserver = "xxx.xx.xx.xx" ' IP or DNS-Name of the R/3 Application server
conn.System = "01" ' System ID of the instance, usually 0
conn.Client = "001" ' opt. Client number to logon to
conn.Language = "EN" ' opt. Your login language
conn.User = "USUARIO_SAP" ' opt. Your user id
conn.Password = "PASSWORD" ' opt. Your password

retcd = conn.Logon(0, True) 'True hace que la ventana Logon sea invisible
If retcd <> True Then
    MsgBox " Cannot log on! "
    MsgBox retcd
'    MsgBox conn.applicationserver
    Stop
Else
'MsgBox " Logon OK."
End If
End Sub
***************************************************
** En este paso se cargan valores
** a las variable y/o tablas de se exportaran
** a la RFC; se ejecuta la RFC y se
**recupera el resultado que es desplegado 
** en la workshee 'Display'
****************************************************
Sub ZMF_RFC_GET_S526()

    Set UPDATE_UUID = funcControl.Add("ZMF_RFC_GET_S526")
    
    Set v_matnr = UPDATE_UUID.exports("P_MATNR")
    Set v_vkgrp = UPDATE_UUID.exports("P_VKGRP")
    Set v_spart = UPDATE_UUID.exports("P_SPART")
    Set v_gsber = UPDATE_UUID.exports("P_GSBER")
    Set v_vkorg = UPDATE_UUID.exports("P_VKORG")
    Set v_spmon = UPDATE_UUID.exports("P_SPMON")
    Set v_PCNAM = UPDATE_UUID.exports("PCNAME")
    Set v_USRDO = UPDATE_UUID.exports("USRDOM")
    Set v_USRNA = UPDATE_UUID.exports("USRNAM")

    v_matnr.Value = Range("B2").Value
    v_vkgrp.Value = Range("B3").Value
    v_spart.Value = Range("B4").Value
    v_gsber.Value = Range("B5").Value
    v_vkorg.Value = Range("B6").Value
    v_spmon.Value = Range("B7").Value
    v_PCNAM.Value = Environ("computername") & vbCr
    v_USRDO.Value = Environ("userdomain") & vdcr
    v_USRNA.Value = Environ("username") & vbCr

If UPDATE_UUID.Call = True Then
'    Set p_matnr = update_uuid.exports("P_MATNR")
'    Set p_VKGRP = update_uuid.exports("P_VKGRP")
'    Set p_SPART = update_uuid.exports("P_SPART")
'    Set p_GSBER = update_uuid.exports("P_GSBER")
    Set ts526 = UPDATE_UUID.tables("TS526")
    irowaux = 1
    For irow = 1 To ts526.RowCount
    
    irowaux = irowaux + 1
    
    Range("E2").Value = Environ("computername") & vbCr
    Range("E3").Value = Environ("userdomain") & vbCr
    Range("E4").Value = Environ("username")

'    Range("Display!A" & irowaux).Value = ts526(irow, "SSOUR")
    'Range("Display!B" & irowaux).Value = ts526(irow, "VRSIO")
 '  Range("Display!B" & irowaux).Value = ts526(irow, "SPTAG")
'   Range("Display!C" & irowaux).Value = ts526(irow, "SPWOC")
'   Range("Display!D" & irowaux).Value = ts526(irow, "SPBUP")
    Range("Display!A" & irowaux).Value = ts526(irow, "SPMON")
    Range("Display!B" & irowaux).Value = ts526(irow, "KUNNR")
    Range("Display!C" & irowaux).Value = ts526(irow, "MATNR")
    Range("Display!D" & irowaux).Value = ts526(irow, "MAKTX")
    Range("Display!E" & irowaux).Value = ts526(irow, "MATKL")
    Range("Display!F" & irowaux).Value = ts526(irow, "VKORG")
    Range("Display!G" & irowaux).Value = ts526(irow, "BZIRK")
    Range("Display!H" & irowaux).Value = ts526(irow, "LAND1")
    Range("Display!I" & irowaux).Value = ts526(irow, "VKGRP")
    Range("Display!J" & irowaux).Value = ts526(irow, "SPART")
    Range("Display!K" & irowaux).Value = ts526(irow, "GSBER")
    Range("Display!L" & irowaux).Value = ts526(irow, "BASME")
    Range("Display!M" & irowaux).Value = ts526(irow, "ZZKILOS")
    Range("Display!N" & irowaux).Value = ts526(irow, "ZZVALOR")
    Range("Display!O" & irowaux).Value = ts526(irow, "ZZCOSTO")
    Range("Display!P" & irowaux).Value = ts526(irow, "ZZCMARGINA")
    Range("Display!Q" & irowaux).Value = ts526(irow, "ZZIVA")
    Range("Display!R" & irowaux).Value = ts526(irow, "ZZVALORUSD")
    Range("Display!S" & irowaux).Value = ts526(irow, "ZZCOSTOUSD")
    Range("Display!T" & irowaux).Value = ts526(irow, "ZZCMARGUSD")
    
    
    Next
    
Else
End If


End Sub

************************************************************
************************************************************

Espero haber sido de ayuda. Si te queda alguna duda con toda confianza, pregunta.

Saludos!

1 me gusta