Problemas de conexión VisualBasic-SAP

,

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

ok, gracias.

Ahora preguntas generales:

Este codigo lo inserto como un modulo de Visual Basic para Excel?

Me funciona para .net?

Gracias de antemano por las respuestas

Primero tienes que guardar un documento de excel como .xlsm
Ya en el excel, pones por ejemplo un botom y le asignas una macro, en el caso del ejemplo
que te pasé, esa macro es la MAIN pero puede ser cualquiera, ya es cuestion de la lógica
que se requiera.
Una vez que haces eso solo pulsa ALT+F11 para que te abra el editor de Visual Basic y ahi es donde
vas codificando.
Saludos.

1 me gusta

ok muchas gracias.

Hago lo que me dices y cualquier duda te posteo pregunta excelente miercoles

Claro, suerte con eso!!

1 me gusta

ya capture en una macro de excel con el tipo de archivo que me dijiste el codigo que publicaste lo asocie a un boton el procedimiento MAIN pero nada no me hace nada es necesario tiener tambien estos llamados a rutinas?

Call Limpia_hojas
Call ZMF_RFC_GET_S526

Call Resultado
conn.Logoff

Ah! lo que sucede es que tienes que sustituir los datos del logon por los del lugar donde trabajas y tambien debe de existir la RFC. En este caso es una RFC que yo hice por eso no va a existir.
Yo te recomiendo que simplifiques el ejemplo haciendo una RFC que reciba un dato cualquier y te arroje algun otro.
Digamos que solo pases el valor de nua celda al parametro de la RFC y que esta te regregrese otro dato que muestres en la celda de abajo o la de un lado. O cualquier otra…

Saludos.

1 me gusta

Es decir cesar con la transaccion se37 creo una funcion desde SAP?

1 me gusta

Sí, pero en la pestaña de atributos, le tienes que especificar que es una RFC. Ahi viene la opcion en los primeros radiobuttons. Es la seguna opción de arriba hacia abajo. Y en cada parametro de import y export o change, seleccionar los checks que dicen: “traspaso de valores”. Saludos.

2 Me gusta

A todos, por favor cuando vayan a copiar y pegar códigos muy extensos, usen las etiquetas de “código” correspondientes. Más info aquí: cómo formatear código en el foro.

@cesar.trevino Esta muy buena está información, puede ser muy útil, gracias por compartila

Hola amigo recién estoy aprendiendo sobre los RFC, me puedes dar una mano con la definición que realizaste de esta función ZMF_RFC_GET_S526. Ejecuto el excel por pasos y todo va bien hasta esta definición, como puedo crearla en SAP:

Ah! lo que sucede es que tienes que sustituir los datos del logon por los del lugar donde trabajas y tambien debe de existir la RFC. En este caso es una RFC que yo hice por eso no va a existir.
Yo te recomiendo que simplifiques el ejemplo haciendo una RFC que reciba un dato cualquier y te arroje algun otro.
Digamos que solo pases el valor de nua celda al parametro de la RFC y que esta te regregrese otro dato que muestres en la celda de abajo o la de un lado. O cualquier otra…

Saludos.

Este tema se cerró automáticamente 89 días después del último post. No se permiten nuevas respuestas.