Ver Mensaje Individual
  #3  
Viejo 16/03/17, 12:33:13
cardama cardama is offline
Junior Member
 
Fecha de Ingreso: feb 2017
Localización: Luxembourg
Mensajes: 6
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.
Responder Con Cita