PDA

Ver la Versión Completa : Conectarme a SAP a través de excel


montsemava
02/03/17, 16:45:43
Hola, me llamo Montse.

Te explico tengo una hoja de excel y quiero pasarla a un archivo txt a traves de una macro, hasta aqui todo bien. Pero luego quiero que ese fichero txt subirlo a una ruta en la al11, entonces necesitaria conectarme a la AL11 para dejar el fichero allí y no tengo idea de como hacerlo.

Alguien me puede ayudar.

Gracias

dabtgn
16/03/17, 11:00:57
prueba con este código



Sub Prueba_AL11()
'
' Prueba AL11 Macro
'
'
Set SAPGuiAuto = GetObject("SAPGUI")
Set Aplicacion = SAPGuiAuto.GetScriptingEngine
Set Connection = Aplicacion.Children(0)
Set Session = Connection.Children(0)

' maximiza la pantalla de SAP
Session.findById("wnd[0]").maximize
' escoge la transición a enviar
Session.findById("wnd[0]/tbar[0]/okcd").text = "/n/AL11"

' llama a la transición
Session.findById("wnd[0]").sendVKey 0

cardama
16/03/17, 13:33:13
Buenas, montsemana

Yo tengo este procedimiento para abrir una conexion con sap:

Private Sub LoginSAP()
user = InputBox("SAP User ID")
If user = "" Then Exit Sub
pass = InputBox("Please, enter your SAP password")
If pass = "" Then Exit Sub
If FindProcess("saplogon.exe") Then
Set SapGui = GetObject("SAPGUI")
Else
Call Shell("C:\Program Files (x86)\SAP\FrontEnd\SAPGUI\saplogon.exe", vbMinimizedFocus)
Esperar 5 ' Funcion para esperar unos segundos a que se ejecute el progama "saplogon"
Set SapGui = GetObject("SAPGUI")
End If
Esperar 2
Set Appl = SapGui.GetScriptingEngine
Set Connection = Appl.Openconnection("Nombre de la Instancia", True)
Set Session = Connection.Children(0)
Session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = user
Session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = pass
Session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "EN"
Session.findById("wnd[0]").sendVKey 0
End Sub

Private Sub Esperar(Tiempo As Integer)
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + Tiempo
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
End Sub

Function FindProcess(ProcessName)
Dim WMIServ, Processes, Process
FindProcess = False
Set WMIServ = GetObject("winmgmts:{impersonationLevel=" & "impersonate}!\\.\root\cimv2")
Set Processes = WMIServ.ExecQuery("Select * from Win32_Process " & _
"Where Name = '" & ProcessName & "'")
For Each Process In Processes
FindProcess = True
Exit Function
Next
End Function

Despues vendría la llamada a la transaccion deseada:

Session.findById("wnd[0]/tbar[0]/okcd").Text = "KSB1"
Session.findById("wnd[0]").sendVKey 0

Para el resto del proceso, mi consejo (que es lo que yo hago) es activar la grabacion de un script y realizo el proceso completo manualmente, cuando acabo, paro la grabacion y ya tengo las sentencias necesarias para realizar el resto de la macro.

Espero que te sirva, un saludo.

Edgar MS
20/07/21, 13:52:38
Ingresa a SAP y entra al icono de dos engranes, ahi esta la Opcion: Grabar y reproducir scrip, le das click a la opcion grabar script y puedes hacer el proceso que gustes, una vez termines la actividad, abres con un bloc de notas la scrip que se grabo en C:\Users\Tu usuario\AppData\Roaming\SAP\SAP GUI\Scripts, el codigo resultante lo colocas en vba anteponiendo las siguientes declaraciones de variable

Dim application
Dim connection

y listo solo ejecutas la macro.