Conectar excel con SAP

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

@smota, he hago saber que ha sido un éxito.
La usuaria cuando ha visto lo sencillo y eficaz que es casi se pone a llorar jajaja.
Dice: " después de 8 años teniendo que ir al pdf que publica el banco central y después teclear a mano los dígitos del tipo de interés mirando al pdf y a la pantalla para no equivocarse usando la incómoda OB83 esto es una maravilla".

Lo único que hemos tenido que hacer adicional a lo ya comentado en post de más arriba, es que hemos creado un usuario con permisos de ejecutar funciones por si no ella no se podía conectar.

3 Me gusta

@Salco disculpa, esta configuracion solo funciona con office 32bits? cierto!

Pues resulta que mi office efectivamente es de 32bits… ¿lo has probado con el de 64?

Menuda maravilla has creado. Me lo guardo como oro en paño