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
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
Saludos a todos y espero que el presente caso pueda ser de alguna utilidad.
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.
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.
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.
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)
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.
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
************************************************
***********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.