Conectar excel con SAP

Estimados,
saludos, necesito saber si alguien sabe como conectarme desde Excel a SAP, mas detallado seria si desde un archivo de Excel puedo ejecutar una macro y conectarme a SAP “en SAP ya inicie sesión con mi usuario y clave” y abrir un nuevo modulo en el cual ejecutare un Script

Cualquier ayuda es valiosa ya que estoy he buscado en la red y no encuentro nada aun

Ivan11980

1 me gusta

Claro, he visto plantillas que utilizan RFC y realizan una conexion exitosa a SAP.
Le envian toda la info que solicita la funcion, y luego la funcion sabe que hacer con esa info.
Tenia una planilla de carga de materiales.
RFC es tu punto a desarrollar.
Vere si te consigo el proceso para que lo repliques.

Buenos días,

yo trabajo con macros en excel todos los dias. La cuestion es que no es material propio, es de la empresa.

Amen de que ni te has presentado en el foro

chao

1 me gusta

Efectivamente como dice, paxotio, ni te has presentado…¿?
Cuando hablas de SAP, ¿de que SAP hablas?
Te diré que desde B1 accedes directamente desde excel, pudiendo realizar un BI con excel y tablas dinámicas espectacular. Si además añades conocimientos de visual basic o de sql para manipular o agrupar los datos previamente o posteriormente…resultados espectaculares.

2 Me gusta

Yo tengo mis dudas sobre lo que pretendes hacer.
Puedes ampliar más el requerimiento?
Yo he visto conexiones SAP → Excel, pero nunca que Excel automáticamente lance datos a SAP “en linea”.

Podrías por favor explicar en detalle qué es lo que deseas que haga la conexión entre Excel y SAP ??

Gracias

Hola, yo por ejemplo, si quiero crear una lista de materiales con 5 piezas por ejemplo. En el excel meto el articulo al que se le va a crear la lista de materiales y los 5 articulos que quiero que contenga.
Y listo, lanzo el excel con un botón que tiene y me crea la lista de materiales con esos 5 artículos.
Parte de la macro esta creada con la información que se obtiene con la opción de grabar script que tiene sap y parte con visual basic, creo.

En resumen repite un trabajo rutinario.

Chao

1 me gusta

Por ahi va la cosa, excel permite insertar condigos de visual basic, entonces ahi llamas a la funcion dentro de SAP via RFC.
Ahora mismo no tengo a mano el codigo vb para msotrar pero @paxotio podrias compartir un poco el codigo vb que tiene tu plantilla…

Si, eso que pretendes claro que se puede hacer.

Tiene varios ejemplos publicados el SCN de como hacerlo y un colaborador habitual de este foro que es @felipe.loyola, sabe mucho de este tema, si es con SAP Business One, que todavía no lo has aclarado.

hola, claro.

 If Session.ActiveWindow.Text = "Error" Then Err.Raise 99 ' error detected?
    '
' find the collection object that contains the Message from the bottom of the SAP screen and write the message to Excel
    Info (17)    ' puts the Message in the 17th column on the Excel Spreadsheet - column "Q"
'
    If Session.ActiveWindow.Name = "wnd[1]" And Session.ActiveWindow.Text = "Log Off" Then
        Session.findById("wnd[1]/usr/btnSPOP-OPTION2").press
        Sheets("SAP_DATA").Cells(lDataRow, 16) = "error"
    End If
'-------------------------------------------------------
    Exit Sub
ErrorHandler:
    Sleep (1000)
        'return the error message 3/4/06 - ***
                sMessage = "Error # " & Str(Err.Number) & " was generated by " _
            & Err.Source & Chr(13) & Err.Description '& Err.HelpFile & Err.HelpContext
            Sheets("SAP_DATA").Cells(lDataRow, 21) = sMessage
'---------------------------------
    If StopOnErrors = vbYes Then
        Application.WindowState = xlMaximized
        If lDataRow > 10 Then ActiveWindow.ScrollRow = lDataRow - 5
        StopOnErrors = MsgBox("Do you want to Stop On the next Error ?", vbYesNo, "Error Found")
        Application.WindowState = xlMinimized
    Else
        If Session.ActiveWindow.Name = "wnd[1]" And Session.ActiveWindow.Type = "GuiModalWindow" Then ' Information Pop Up Box exists
            Sheets("SAP_DATA").Cells(lDataRow, 22) = Session.ActiveWindow.PopupDialogText ' capture message
            Session.findById("wnd[0]/tbar[0]/btn[0]").press '- enter key
        End If
        Info iColumn  'capture any SAP message and write to excel
        'test the message
        If Session.ActiveWindow.children.Count > 1 Then ' see if the collection item exists
            If Session.ActiveWindow.children.Item((Session.ActiveWindow.children.Count - 1)).Text <> "" Then 'message exists
                If Session.ActiveWindow.children.Item((Session.ActiveWindow.children.Count - 1)).MessageType <> "E" Then Session.findById("wnd[0]/tbar[0]/btn[0]").press 'enter through warnings and Informational messages
            End If

saludos, esta parte es por si salta algun error en el proceso (creo)

4 Me gusta

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

Cualquier ayuda de antemano muchas gracias

1 me gusta

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

Saludos.

6 Me gusta

Gracias juan por la macro, la voy a probar a ver como me va

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?

1 me gusta

Creo que deberías tener librfc32.dll en Windows\System32.

2 Me gusta

Gracias.
Al final lo he conseguido con:

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"

10 Me gusta

@Salco no me digas que conectaste excel con SAP? uffff Que planeas hacer ahora?

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

3 Me gusta

@Salco dejame saber si logras realizar algo util con es aconexion, para tomarlo en cuenta.

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.

A ver que pasa.

1 me gusta

Exquisito, dejame saber si todo sale bien!

1 me gusta