Mas de 4000 vistas y no le dan like loco. Si lo miran para hacer algo en el trabajo donde les pagan, por lo menos denle like para que se posicione el video miserables. Muy buena la explicación y muchísimas gracias por compartir tu conocimiento ,sos un crack te deseo el mayor de los éxitos!!!!
Muchas gracias por tu comentario y por el apoyo. Saber que el contenido les sirve es lo que me motiva a poder seguir creando y trayéndoles más, así que nuevamente gracias por tu feedback. Que estés muy bien, Saludos!
Hola Ale Franzoni, muy bien explicado !!! Todo muy claro. Duda.... ¿Se puede realizar un script en donde el Sistema Operativo cierre la sesión del usuario en SAP, todo de forma automática ? Ya que muchas veces el usuario cierra SAP pero su cuenta se encuentra colgada y sigue trabajando desde el Administrador de Tareas.
Hola Daniel, qué tal? En primer lugar, muchas gracias por tu comentario. En cuanto a tu duda, sí, se puede. Si solo quieres cerrar las sesiones que están abiertas es relativamente fácil, podés crear un script para que se ejecute, detecte si hay conexiones abiertas y las cierre. Te dejo un ejemplo bien sencillo: If Not IsObject(application) Then Set SapGuiAuto = GetObject("SAPGUI") Set application = SapGuiAuto.GetScriptingEngine End If Main Sub Main() If application.children.count = 0 Then Exit Sub for i = 0 to (application.children.count - 1) Set connection = application.Children(cint(i)) connection.CloseConnection() next End Sub Lo que va a estar haciendo es detectar si hay conexiones de SAP establecidas y cerrarlas todas. Esto lo puedes guardar en un archivo VBS y ejecutarlo tanto manual como automáticamente, por ejemplo, mediante el Task Scheduler. Saludos.
Excelente aporte Ale, muchas gracias. Te hago una consulta del lado del servidor que se debe habilitar para que se pueda ejecutar este scripting, es decir para que lo permita. Especificamente con el SAPLogon, porque internamente si podemos ejecutar scripts a nivel de transacciones, pero para logear se queda en el seteo de usuario y password, es como si se perdieran el Focus de la ventana del SAPLogon, espero me haya logrado explicar bien.
Muchas gracias Alexander por tu comentario. En cuanto a tu duda, lo único que se debe habilitar es a través de la RZ11 es el atributo sapgui/user_scripting. Estando este último en True, no deberías tener problemas con ninguna pantalla, sea ya habiendo iniciado sesión o en la pantalla de login. Para verificarlo, estando parado en la pantalla de login, deberías poder ver la opción de grabar un script. Saludos.
Hola Hugo, ¿cómo estás? Te comento que para incluir el mandante vas a tener que agregar una línea más con el valor correspondiente antes de hacer el inicio de sesión. Agrega lo siguiente _(antes o después del usuario/contraseña, eso no importa, pero sí tiene que ser antes del _*_".press"_*_ que es el botón para iniciar sesión)_ y volvé a probar: ⬇️ *Mandante* Session.findById("wnd[0]/usr/txtRSYST-MANDT").text = "ACA TU MANDANTE" Espero que te sirva, Saludos.
Hermano que crack, yo automatizo actualmente los procesos en mi empresa por medio de macros y script de sap, no sabia que se podía abrir directamente desde el .vbs, siempre migraba el codigo a visual basic en excel y lo ejecutaba desde allí. te pregunto si quisiera abrir un libro excel desde aqui tambien lo puedo hacer? o cuelquier otra app?
Hola Juan, cómo estás? ¡Que bien que ya estés metido en este mundo! Y en cuanto a tu consulta, sí, puedes abrir un Excel u otros programas desde prácticamente cualquier código, cada uno puede tener sus particularidades, pero la respuesta rápida es un sí. Saludos.
Grande Ale! Una pregunta, en la empresa en donde estoy trabajando el SAP con las credenciales de IT manager ingresamos varias personas por que tiene permisos para ingresar a ciertas transacciones que no todos podemos ver. Recientemente me pidio si podia hacer un automatismo que inicialmente todos los dias descargara los archivos de una cierta transaccion despues del horario laboral. Solo que me paso que una vez estaba dos personas conectadas a su sap y el programa no pudo ejecutarse, ya que ejecutaba (SAP) esa ventana inicial donde te da las opciones de cerrar todas la conexiones activas o simplemente abrir una nueva y mantener las demas activas, yo quisiera la segunda opcion, es posible esto con lineas de codigo usando VBA? Gracias de antemano por todo tu contenido, Un saludo
Hola Jhonatan, sí, podés hacer tranquilamente lo que me estás diciendo, ya que en esa instancia ya contas una conexión establecida y, por lo tanto, podés usar Scripting para seleccionar la opción que desees. Lo que vas a tener que hacer es, en el código, después de que presiones para ingresar con tu usuario, verificar si apareció esta ventana emergente (If Not session.findById("wnd[1]", False) Is Nothing Then ...) y si apareció, presionar la opción que necesites y continuar con la ejecución. Para saber como hacer referencia a esta pantalla que te aparece, inicia la grabadora de script desde el momento que te vas a loguear y cuando aparezca el cartel, graba tu decisión. Con esto ya podrías solucionar tu problema. Saludos.
Hola Julio, ¿cómo estás? Sí, sin ningún problema, podrías obtener los datos de un fichero auxiliar/externo y utilizarlos en conjunto con el script. Saludos.
Muy util y bien explicado todo, estoy tratando de crear una herramienta de consulta en 15 instancias distintas donde se logea una a una y ectrae una corta inf, pero me encuentro que los objetos tienen nombres distintos en alginas instancias, entonces entra en uno me devielve lonque necesito y cuando intenta en otro, el objeto se llama diferente y se para, no se como o saltar el error o que valide de alguna manera, si se te ocurre algo, mil gracias de antemano
Buenas, podrías usar varias cosas dependiendo de tu caso. Una sería hacer una verificación de si existe el elemento que estás buscando y si es así, seguir con lo que sea necesario. Otra es, si tenés el nombre de todos los posibles elementos, colocarlos todos y agregar antes de estos un (On Error Resume Next) para manejar los errores y que los omita si ocurren y siga con la ejecución. Eso lo vas a tener que definir dependiendo del flujo de tu código. Saludos.
Interesantísimo Ale, me funciona a la perfección. ¿Qué modificación tendría que hacer al código para que una vez ejecutado me cierre totalmente la aplicación de SAP después de cerrar sesion y conexión?
Muchas gracias por tu comentario. Para cerrar la aplicación por completo, SAP no nos proporciona un método directo, pero dependiendo si estás trabajando directamente desde un Script (vbs) o Excel (VBA), podrías utilizar lo siguiente: ⬇️ *VBS* Set WshShell = CreateObject("WScript.Shell") WshShell.Run "taskkill /f /im saplogon.exe", 0, True ⬇️ *VBA* Shell "taskkill /f /im saplogon.exe", vbHide Colocando ese código al final de toda tu ejecución, cerrará por completo la aplicación. Recordá que si la cerras y tenías sesiones abiertas sin datos guardados, los perderás. Espero haberte podido ayudar, Saludos.
@@alefranzoni Impresionante Ale, muchísimas gracias, de verdad. Me interesaría muchísimo recibir formación on-line, en castellano, de SAP, ¿me podrías recomendar algún lugar al que recurrir?. Greetings from Spain 😉
@@feraldi8145 Me alegro de haber podido ayudarte 😁. Sobre tu consulta, hoy en día no sabría recomendarte realmente ningún sitio ni formación, porque la realidad es que tampoco hay mucha información al respecto, y aún menos en español, motivo por el cual empecé a publicar este tipo de contenido para que haya un poco más de conocimiento del campo en nuestro idioma. Así que, eso te lo voy a deber… Lo que sí te puedo recomendar es que te apoyes mucho en la documentación de Scripting, si aún no lo haces o no la has revisado, donde podrás encontrar muchísima información y ejemplos sobre todos los objetos, sus propiedades y métodos. La docu la puedes encontrar aquí: bit.ly/ScriptingDocumentation. Saludos.
Hola Diego, cómo estás? Te cuento que no hay manera nativa de ocultar todas las ventanas de SAP, si podrías utilizar algunos workarounds para realizarlo. Sino lo único que está disponible a nivel scripting es la opción iconify, mediante la cual vas a poder minimizar una ventana dada. Te dejo un ejemplo de cómo se debería utilizar: *Session.findById("wnd[0]").iconify* Eso sí, cómo te dije esto lo que hace es minimizar la ventana, no ocultarla (y no siempre funciona del todo bien). Si te parece qué puede ser interesante saber cómo correr un proceso con las ventanas ocultas, me lo anoto como un tema a traer al canal en próximos videos. Saludos.
Ale, disculpa la molestia como puedo visualizar el SSO para realizar la conexión. En los parámetros que tengo está descripción, id sistema, servidor de mensajes grupo/servidor sirve alguno o debo hacer algo que no pillo
Carlos, cómo estás? Es el nombre de la conexión si te fijas bien en el video. Así que si no la ves en las propiedades, al igual que muestro en el video, puedes usar el del campo *descripción* que seguramente te funcione, ya que debería ser el mismo. Saludos.
Buenísimo tu vídeo amigo me suscribo, tengo una duda como puedo implementar esto en una macro de excel? Tengo que hacer algo extra estoy intentando pero no puedo
¡Muchas gracias Cesar por el comentario y por apoyarme con la sub, me ayuda un montón! En cuanto a lo que me consultas, para pasar esto a Excel efectivamente tienes que hacer varios cambios para adaptarlo. Lo que se refiere a los cambios de los objetos de SAP es bastante sencillo, puedes observarlo en este video que lo explique en detalle (ua-cam.com/video/MU4Yye5BfDM/v-deo.html) y después quedaría cambiar el método de *WScript Run* por *Shell* e importar una _librería_ para poder utilizar la función *Sleep* . De todas maneras, si no te queda muy claro como hacer todo esto, no te preocupes porque ya tengo listo un video, que subiré en estos días, en donde todo lo que te describo ya está realizado y funcionando y vas a poder bajarte el archivo completo para usarlo o para guiarte como hacerlo. Saludos.
Gracias por el aporte, funciona perfecto, una pregunta adicional como le paso argumentos en la línea WScript.CreateObject("WScript.Shell").Run Chr(34) & SAP_GUI_PATH & Chr(34), 2
Hola Hernan, me alegro de que te haya servido! En cuanto a tu consulta, si querés pasarle parámetros a la hora de ejecutar SAP, solo tenes que incluirlos luego del último *Chr(34)* concatenándolo con el amp (&) y luego tus argumentos. Por ejemplo: WScript.CreateObject("WScript.Shell").Run Chr(34) & SAP_GUI_PATH & Chr(34) & " --myarg", 2 Saludos.
Hola Sonia, qué tal? Lo que deberías hacer si entras sin autenticarte, es decir, por SSO, es lo que se muestra a partir del minuto 14:50. Solo deberías colocar en la variable *lk0_sso* el nombre del servidor que vas a querer ingresar. Saludos.
estuve intntando cerrar la ventana de sap logon al terminar el codigo, pero no parece surtir efecto, yo he usado esta WScript.CreateObject("WScript.Shell").Run "taskkill /f /im" & Chr(34) & SAP_BIN & Chr(34),0,False
Te esta faltando un espacio luego de "im". Sería: WScript.CreateObject("WScript.Shell").Run "taskkill /f /im " & Chr(34) & SAP_BIN & Chr(34), 0, False Por eso no te lo cerraba, con ese pequeño cambio funcionará. Saludos.
Una consulta, como puedo obtener el element del GUI? No entiendo esa parte y no sé como.obtienes el.identificador del usuario, contraseña, o de otros campos cuando ingresas al sap. Gracias
Hola Julio, ¿cómo estás? Si te referís al objeto de SAP GUI, lo que hago es asociar en la variable *root* mediante el método *GetObject()* dicho objeto para luego poder obtener el motor de scripting (Scripting Engine) del mismo y almacenarlo en la variable *Application*. Por supuesto que para esto debes tener el SAP GUI abierto previamente, de lo contrario esto fallará al intentar inicializar las variables. En cuanto a los campos, para identificarlos podes utilizar una simple grabación para saber como se identifican y poder manipularlos desde el código. Todo eso lo explico en el video introductorio a Scripting, te lo dejo a continuación: ua-cam.com/video/jRLYmbzAOOE/v-deo.html Saludos.
Excelente video, super bien explicado. En mi caso me aparece un mensaje de error "The enumerator of the collection cannot find an element with the specified index." Revisando, se refiere a la línea de: Set Session = Connection.Children(0) Me puedes ayudar porfavor. Saludos,
Muchas gracias por tu comentario Carlos! Sobre tu consulta, ese error te está saliendo porque al momento de querer inicializar el objeto session no hay ninguna sesión activa. Te sugiero que te fijes si el resto del código está bien y si se está abriendo bien el sap y la sesión antes de llegar a esa línea. Cualquier inquietud no dudes en consultarme. Saludos.
@@alefranzoni Hola Ale! Gracias por tu respuesta, he revisado el código y todo está igual al ejemplo que explicas, incluso te lo comparto, he cambiado el nombre del servidor por "nombre" y los demás datos los he dejado igual, el programa inicia perfecto una vez inicia la interfaz de ingresar usuario y contraseña, aparece el mensaje de error.. 'SAP SAP_BIN = "saplogon.exe" SAP_GUI_PATH = "C:\Program Files (x86)\SAP\FrontEnd\SapGui\" & SAP_BIN ' Connections lk0_sso = "nombre" lk0_auth = "nombre" ' Auth user = "username" password = "pw" Main Sub Main() If Not FileExists(SAP_GUI_PATH) Then MsgBox "El archivo no existe en la ruta especificada.", vbExclamation, "Archivo no encontrado" Exit Sub End If ExecuteAndWaitForSAP ' SapGuiApplication Set root = GetObject("SAPGUI") Set Application = root.GetScriptingEngine ' Open sync connection ' ' Without SSO Set Connection = Application.OpenConnection(lk0_auth, True) Set Session = Connection.Children(0) Session.findById("wnd[0]/usr/txtRSYST-BNAME").text = user Session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = password Session.findById("wnd[0]/tbar[0]/btn[0]").press ' Open any tx Session.StartTransaction("IW32") MsgBox "Ok!" ' Shutdown the connection Set Session = Nothing Connection.CloseSession("ses[1]") Set Connection = Nothing Set Application = Nothing End Sub Sub ExecuteAndWaitForSAP() ' Run saplogon bin WScript.CreateObject("WScript.Shell").Run Chr(34) & SAP_GUI_PATH & Chr(34), 2 ' Wait to be initialized isSapInitialized = False Do While Not isSapInitialized isSapInitialized = IsProcessRunning(SAP_BIN) Loop WScript.Sleep 3000 End Sub Function IsProcessRunning(targetProcess) Set WMIService = GetObject("winmgmts:\\. oot\cimv2") query = "SELECT * FROM Win32_Process" Set items = WMIService.ExecQuery(query) For Each item In items If item.Name = targetProcess Then IsProcessRunning = True Exit Function End If Next IsProcessRunning = False End Function Function FileExists(filePath) Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(filePath) Then FileExists = True Else FileExists = False End If End Function El mensaje de error sale para la linea 29, ¿Cómo puedo verificar si la sesión está activa? Saludos,
@@CARLOSRAMIREZ-eb8kd Bien, es bastante raro, pero estoy seguro de que en realidad lo que está pasando es que te está mostrando ese error por las credenciales. Asegúrate de estar colocando las credenciales correctas acá: ' Auth user = "username" password = "pw" Recordá que tenés que cambiar lo que puse yo por tu usuario y contraseña correcta. Otra cosa que podés hacer, como veo que estás intentando usar el método por autenticación, es cambiarlo e intentar por SSO si lo tenés habilitado y probar así (como muestro en el video, la segunda alternativa donde no coloco user ni password). Manteneme al tanto, Saludos.
Bro, la verdad No se porque no me agarra los codigos cuando ejecuto el script me sale un error. Siento que la extensión no me quedo bien agregada, tendras un vídeo explicando mejor esa conexión ?
Hola Alejandro, cómo estás? No sé exactamente a que te referís. Podrías dejarme más detalles de qué error te da y cuando ejecutas que comando? Así tengo más contexto para intentar ayudarte. Saludos!
Hola Ronald, no cuento con ningún manual para hacer eso, pero en Internet hay bastante contenido de como realizarlo. Demás está decir que tenés que ser el owner de la instalación de SAP de tu empresa para poder efectuarlo. Si no, podrías directamente pedírselo al área de IT. Saludos.
Hola Giovani, cómo estás? Me podrías decir en que parte y cuál es el error que te aparece? Para poder ubicarme mejor y darte una mejor respuesta. Saludos.
Hola Jose, si utilizas SAP mediante interfaz web, lamentablemente scripting no es compatible. Tendrías que usar alguna otra alternativa para automatizar las tareas. Saludos.
hola amigo de nuevo yo 😁, queri preguntarte como hago para pasar este script a excel segui tu otro tutorial, pero alli no hay tantas condiciones como lo es este caso, esto lo quiero hacer poder programar ya sea el script o el excel con el programador de tareas para que se ejecute a una hora determinada, saludos desde Colombia
Derick, cómo estás? Bien, para poder pasar este script a código VBA para ejecutarlo dentro de un Excel tienes que hacer algunas modificaciones más que nada para adaptar los métodos Shell y Sleep. En este video ua-cam.com/video/YQq8wnDB2HU/v-deo.html ya está migrado esto mismo a Excel, asique puedes echarle un vistazo y/o bajarte el archivo final para ver como es que se hace. Una vez hecho eso, ahí si puedes automatizar el excel para que se ejecute desde argumentos externos y podrás programar el script para que ejecute tu libro a la hora deseada desde el programador de tareas de windows. Espero que te sirva, Saludos.
@@alefranzoni hola Ajeandro de verdad eres un crack, te agradezco mucho tu ayuda en verdad me ha servido mucho, pero quisiera hacerte otras dos consultas; sabes que código o que debo hacer para que en el script tome la fecha del equipo osea que cuando lo ejecute tome la fecha presente y no la grabada, y la otra consulta es si sabes porque cuabdo exportó los archivos en formato xlsx excel me indica que el archivo está roto o que la extensión está dañada, en verdad agradezco mucho tu ayuda saludos desde Colombia😊
@@derickmendivelso7173 Hola nuevamente Derick, gracias a vos en primer lugar por tus comentarios y apoyo. En cuanto a tus consultas, vamos por la primera, para poder tomar la fecha actual es muy sencillo, te voy a dejar dos ejemplos, uno si estás ejecutando el script directamente desde un archivo .vbs y otra si lo estás haciendo dentro de un Excel. ➡️ *VBS - Obtener fecha actual* Con la función Now podrás obtener el día y hora actuales y con las funciones Day, Month y Year puedes darle el formato que quieras, en este caso sería "DD.MM.AAAA", pero tú puedes usarlos para darle el formato que quieras. De la misma manera, con Hour, Minute y Second podrías obtener también las horas, minutos y segundos por si quisieras incluirlas. _Day(Now) & "." & Month(Now) & "." & Year(Now)_ ➡️ *VBA (Excel)- Obtener fecha actual* Con la función Now podrás obtener el día y hora actuales al igual que en VBS, pero ahora con la función Format puedes darle el formato deseado, en este caso sería "DD.MM.AA_HHmmss", pero tú puedes darle el formato que quieras. _Format(Now, "dd.MM.aa_HHmmss")_ En cuanto a tu *segunda duda* te digo que si, si le pones la extensión *.xlsx te va a fallar, es un error de SAP, tienes que exportarlo con extensión *.xls y listo, como se muestra en el video de exportación y no tendrás problemas. Saludos.
@@alefranzoni amigo eres un crack en verdad e buscado esa información por otras partes y en verdad no la he encontrado así de clara, te agradezco mucho en verdad. Saludos desde Colombia
Hola Ale. Muchas gracias, he logrado muchas cosas con tus videos. Una duda, si tengo acceso a sap gui desde un ejecutable “tx.sap” entra directo. Sin password. Hay manera de hacer que el script desde el inicio abra el script y lo ejecute?
Hola Mark, en primer lugar, me alegro mucho de que te hayan servido los videos. En cuanto a tu consulta, sí, sería como abrir cualquier tipo de archivo. Si estás en VBS, podrías abrirlo creando el objeto WScript.Shell y pasándole la ruta, y en el caso de VBA, simplemente con Shell y pasándole la ruta del archivo. Lo que tienes que tener en cuenta es que esto debería ejecutarse si o si al inicio de tu automatización, dejar un tiempo para que inicie y luego comenzar con el seteo de las variables necesarias para la automatización. De lo contrario, si lo haces sin hacer una pausa entre operaciones, lo más probable es que te falle al intentar inicializar los objetos de SAP que aún no están disponibles. Espero haberte podido ayudar a aclarar tu duda, Saludos.
Hola Ale, tengo una duda que no se resolver y que te propongo como posible idea para un futuro vídeo, si te apetece, claro. Estoy generando pedidos en SAP con un script a partir de datos en un excel, cada cierto tiempo un pop-up con el que he de interactuar interrumpe la ejecución, el típico de "Han aparecido mensajes, ¿Desea grabar el documento o tratar los datos?" y ello me obliga a lanzar de nuevo mi script. Seguro que deben haber estructuras de control de ejecución en vba que permitan resolver estas situaciones sin que se detenga el código, no se si me podrías echar una mano con ellas. Muchas gracias por tu ayuda. Un saludo.😄
Hola, ¿cómo estás? Entiendo que este mensaje que me comentas aparece en SAP en algunas ocasiones mientras estás ejecutando tu script. Esto es muy fácil de solucionar, de hecho, he comentado como hacerlo en este video, por ejemplo, ua-cam.com/video/FX2gWTDIy9E/v-deo.html que te deje el momento exacto que explico como detectar esa ventana y accionar con la misma. En resumen, básicamente lo que vas a tener que hacer es, detectar en qué momento del flujo podría aparecer esa ventana y agregar el código para saber si efectivamente se está mostrando o no. Si es así, que se presione la acción necesaria para continuar, de lo contrario, seguirá el código su ejecución sin tener que interactuar con dicho elemento. Saludos.
Hola Oscar, cómo estás? Te comento que para replicar este funcionamiento y ejecutar scripting en Python es bastante sencillo, tan solo tienes que importar las librerías *win32com.client, sys, subprocess y time* (esta última es opcional, pero te sirve para hacer el sleep) y luego adaptar un poco el código para: 1. Abrir SAP GUI (con subprocess) 2. Esperar que SAP se termine de ejecutar completamente (puedes usar el método sleep de la librería time) 3. Setear las variables necesarias (sapgui, application, connection y session) 4. Ahora ya podrías ejecutar código perfectamente, por ejemplo, estas líneas: session.findById("wnd[0]").maximize session.findById("wnd[0]/usr/txtRSYST-BNAME").text = "ID" Espero que te haya podido guiar un poco sobre como realizarlo, de lo contrario y si te parece bien, me apunto la idea para hacer un video próximo sobre como realizar todo esto que te comento en un script de Python. Saludos.
Gracias Ale, aun no habilitan el scripting para sap en el servidor, asi que por mientras estoy usando la libreria pyautogui de python bro, va bien hasta el momento.
@@oscareliasdelacruzcotrina3944 Genial y no hay problema, cuando lo habiliten si te surge alguna inquietud, no dudes en consultarme que te doy una mano en lo que pueda.
📚 *Documentación*
🔹Shell.Run - VBScript: bit.ly/3b8mnlB
Mas de 4000 vistas y no le dan like loco. Si lo miran para hacer algo en el trabajo donde les pagan, por lo menos denle like para que se posicione el video miserables.
Muy buena la explicación y muchísimas gracias por compartir tu conocimiento ,sos un crack te deseo el mayor de los éxitos!!!!
Muchas gracias por tu comentario y por el apoyo. Saber que el contenido les sirve es lo que me motiva a poder seguir creando y trayéndoles más, así que nuevamente gracias por tu feedback. Que estés muy bien, Saludos!
Muy completo y detallado, gracias!
@@cochogod muchas gracias por tu comentario!
Excelente... mas claro no puede ser... lo adecue a excel VBA y funciona perfectamente. Gracias Ale.
Me alegro de que te haya servido y gracias por tu comentario!
Excelente información!
Saludos desde Perú.
Gracias. Saludos
Hola Ale Franzoni, muy bien explicado !!!
Todo muy claro.
Duda....
¿Se puede realizar un script en donde el Sistema Operativo cierre la sesión del usuario en SAP, todo de forma automática ?
Ya que muchas veces el usuario cierra SAP pero su cuenta se encuentra colgada y sigue trabajando desde el Administrador de Tareas.
Hola Daniel, qué tal? En primer lugar, muchas gracias por tu comentario. En cuanto a tu duda, sí, se puede. Si solo quieres cerrar las sesiones que están abiertas es relativamente fácil, podés crear un script para que se ejecute, detecte si hay conexiones abiertas y las cierre. Te dejo un ejemplo bien sencillo:
If Not IsObject(application) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
Main
Sub Main()
If application.children.count = 0 Then Exit Sub
for i = 0 to (application.children.count - 1)
Set connection = application.Children(cint(i))
connection.CloseConnection()
next
End Sub
Lo que va a estar haciendo es detectar si hay conexiones de SAP establecidas y cerrarlas todas. Esto lo puedes guardar en un archivo VBS y ejecutarlo tanto manual como automáticamente, por ejemplo, mediante el Task Scheduler.
Saludos.
Excelente aporte Ale, muchas gracias. Te hago una consulta del lado del servidor que se debe habilitar para que se pueda ejecutar este scripting, es decir para que lo permita. Especificamente con el SAPLogon, porque internamente si podemos ejecutar scripts a nivel de transacciones, pero para logear se queda en el seteo de usuario y password, es como si se perdieran el Focus de la ventana del SAPLogon, espero me haya logrado explicar bien.
Muchas gracias Alexander por tu comentario. En cuanto a tu duda, lo único que se debe habilitar es a través de la RZ11 es el atributo sapgui/user_scripting. Estando este último en True, no deberías tener problemas con ninguna pantalla, sea ya habiendo iniciado sesión o en la pantalla de login. Para verificarlo, estando parado en la pantalla de login, deberías poder ver la opción de grabar un script. Saludos.
Hola Ale, gracias por la explicación. Tengo el inconveniente al entrar por auth, como incluir el mandante?
Hola Hugo, ¿cómo estás? Te comento que para incluir el mandante vas a tener que agregar una línea más con el valor correspondiente antes de hacer el inicio de sesión.
Agrega lo siguiente _(antes o después del usuario/contraseña, eso no importa, pero sí tiene que ser antes del _*_".press"_*_ que es el botón para iniciar sesión)_ y volvé a probar:
⬇️ *Mandante*
Session.findById("wnd[0]/usr/txtRSYST-MANDT").text = "ACA TU MANDANTE"
Espero que te sirva,
Saludos.
Hermano que crack, yo automatizo actualmente los procesos en mi empresa por medio de macros y script de sap, no sabia que se podía abrir directamente desde el .vbs, siempre migraba el codigo a visual basic en excel y lo ejecutaba desde allí. te pregunto si quisiera abrir un libro excel desde aqui tambien lo puedo hacer? o cuelquier otra app?
Hola Juan, cómo estás? ¡Que bien que ya estés metido en este mundo! Y en cuanto a tu consulta, sí, puedes abrir un Excel u otros programas desde prácticamente cualquier código, cada uno puede tener sus particularidades, pero la respuesta rápida es un sí.
Saludos.
@@alefranzoni un nuevo sub colega
Es una herramienta muy potente, me encargo de automatizar procesos dentro de mi organización por medio de estas script de SAP
@@xjuandax55 Muchas gracias por tu apoyo!
Perfecto! Ya mismo voy a ver el próximo!
¡Muchas gracias por tu comentario!
Muy bueno este tipo de contenido debería tener más likes pero mucha gente no le da
Grande Ale!
Una pregunta, en la empresa en donde estoy trabajando el SAP con las credenciales de IT manager ingresamos varias personas por que tiene permisos para ingresar a ciertas transacciones que no todos podemos ver. Recientemente me pidio si podia hacer un automatismo que inicialmente todos los dias descargara los archivos de una cierta transaccion despues del horario laboral.
Solo que me paso que una vez estaba dos personas conectadas a su sap y el programa no pudo ejecutarse, ya que ejecutaba (SAP) esa ventana inicial donde te da las opciones de cerrar todas la conexiones activas o simplemente abrir una nueva y mantener las demas activas, yo quisiera la segunda opcion, es posible esto con lineas de codigo usando VBA?
Gracias de antemano por todo tu contenido,
Un saludo
Hola Jhonatan, sí, podés hacer tranquilamente lo que me estás diciendo, ya que en esa instancia ya contas una conexión establecida y, por lo tanto, podés usar Scripting para seleccionar la opción que desees.
Lo que vas a tener que hacer es, en el código, después de que presiones para ingresar con tu usuario, verificar si apareció esta ventana emergente (If Not session.findById("wnd[1]", False) Is Nothing Then ...) y si apareció, presionar la opción que necesites y continuar con la ejecución.
Para saber como hacer referencia a esta pantalla que te aparece, inicia la grabadora de script desde el momento que te vas a loguear y cuando aparezca el cartel, graba tu decisión. Con esto ya podrías solucionar tu problema.
Saludos.
Excelente contenido, Funciona perfecto, gracias!
Muchas gracias por tu comentario!
Muito bom conteúdo, sou do Brasil e estou gostando sobre esse assunto de SAP Script.
Muito obrigado! Fico feliz que esteja gostando do conteúdo. Muito mais em breve!
se podria hacer iterando entre una lista de servidores? por ejemplo tomandolos de un fichero auxiliar la ip, usuario y pass...para recopilar datos?
Hola Julio, ¿cómo estás? Sí, sin ningún problema, podrías obtener los datos de un fichero auxiliar/externo y utilizarlos en conjunto con el script. Saludos.
Muy util y bien explicado todo, estoy tratando de crear una herramienta de consulta en 15 instancias distintas donde se logea una a una y ectrae una corta inf, pero me encuentro que los objetos tienen nombres distintos en alginas instancias, entonces entra en uno me devielve lonque necesito y cuando intenta en otro, el objeto se llama diferente y se para, no se como o saltar el error o que valide de alguna manera, si se te ocurre algo, mil gracias de antemano
Buenas, podrías usar varias cosas dependiendo de tu caso. Una sería hacer una verificación de si existe el elemento que estás buscando y si es así, seguir con lo que sea necesario. Otra es, si tenés el nombre de todos los posibles elementos, colocarlos todos y agregar antes de estos un (On Error Resume Next) para manejar los errores y que los omita si ocurren y siga con la ejecución. Eso lo vas a tener que definir dependiendo del flujo de tu código. Saludos.
Interesantísimo Ale, me funciona a la perfección. ¿Qué modificación tendría que hacer al código para que una vez ejecutado me cierre totalmente la aplicación de SAP después de cerrar sesion y conexión?
Muchas gracias por tu comentario. Para cerrar la aplicación por completo, SAP no nos proporciona un método directo, pero dependiendo si estás trabajando directamente desde un Script (vbs) o Excel (VBA), podrías utilizar lo siguiente:
⬇️ *VBS*
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "taskkill /f /im saplogon.exe", 0, True
⬇️ *VBA*
Shell "taskkill /f /im saplogon.exe", vbHide
Colocando ese código al final de toda tu ejecución, cerrará por completo la aplicación. Recordá que si la cerras y tenías sesiones abiertas sin datos guardados, los perderás.
Espero haberte podido ayudar,
Saludos.
@@alefranzoni Impresionante Ale, muchísimas gracias, de verdad. Me interesaría muchísimo recibir formación on-line, en castellano, de SAP, ¿me podrías recomendar algún lugar al que recurrir?. Greetings from Spain 😉
Y si, sin duda me has ayudado y mucho
@@feraldi8145 Me alegro de haber podido ayudarte 😁. Sobre tu consulta, hoy en día no sabría recomendarte realmente ningún sitio ni formación, porque la realidad es que tampoco hay mucha información al respecto, y aún menos en español, motivo por el cual empecé a publicar este tipo de contenido para que haya un poco más de conocimiento del campo en nuestro idioma. Así que, eso te lo voy a deber… Lo que sí te puedo recomendar es que te apoyes mucho en la documentación de Scripting, si aún no lo haces o no la has revisado, donde podrás encontrar muchísima información y ejemplos sobre todos los objetos, sus propiedades y métodos. La docu la puedes encontrar aquí: bit.ly/ScriptingDocumentation.
Saludos.
Genial, Ale. De nuevo, muchas gracias por todo.
Excelente día Ale,
¿Podemos mantener las ventanas de SAP minimizadas u ocultas mientras se ejecuta el script? Un tipo ejecutar en fondo.
Hola Diego, cómo estás? Te cuento que no hay manera nativa de ocultar todas las ventanas de SAP, si podrías utilizar algunos workarounds para realizarlo. Sino lo único que está disponible a nivel scripting es la opción iconify, mediante la cual vas a poder minimizar una ventana dada.
Te dejo un ejemplo de cómo se debería utilizar:
*Session.findById("wnd[0]").iconify*
Eso sí, cómo te dije esto lo que hace es minimizar la ventana, no ocultarla (y no siempre funciona del todo bien). Si te parece qué puede ser interesante saber cómo correr un proceso con las ventanas ocultas, me lo anoto como un tema a traer al canal en próximos videos.
Saludos.
@@alefranzoni
Perfecto, muchas gracias Ale.
Un saludo.
Ale, disculpa la molestia como puedo visualizar el SSO para realizar la conexión. En los parámetros que tengo está descripción, id sistema, servidor de mensajes grupo/servidor sirve alguno o debo hacer algo que no pillo
Carlos, cómo estás? Es el nombre de la conexión si te fijas bien en el video. Así que si no la ves en las propiedades, al igual que muestro en el video, puedes usar el del campo *descripción* que seguramente te funcione, ya que debería ser el mismo. Saludos.
Excelente contenido. Un subcriptor mas...
¡Gracias por el apoyo, me ayuda mucho!
Buenísimo tu vídeo amigo me suscribo, tengo una duda como puedo implementar esto en una macro de excel? Tengo que hacer algo extra estoy intentando pero no puedo
¡Muchas gracias Cesar por el comentario y por apoyarme con la sub, me ayuda un montón! En cuanto a lo que me consultas, para pasar esto a Excel efectivamente tienes que hacer varios cambios para adaptarlo. Lo que se refiere a los cambios de los objetos de SAP es bastante sencillo, puedes observarlo en este video que lo explique en detalle (ua-cam.com/video/MU4Yye5BfDM/v-deo.html) y después quedaría cambiar el método de *WScript Run* por *Shell* e importar una _librería_ para poder utilizar la función *Sleep* .
De todas maneras, si no te queda muy claro como hacer todo esto, no te preocupes porque ya tengo listo un video, que subiré en estos días, en donde todo lo que te describo ya está realizado y funcionando y vas a poder bajarte el archivo completo para usarlo o para guiarte como hacerlo.
Saludos.
Gracias por el aporte, funciona perfecto, una pregunta adicional como le paso argumentos en la línea WScript.CreateObject("WScript.Shell").Run Chr(34) & SAP_GUI_PATH & Chr(34), 2
Hola Hernan, me alegro de que te haya servido! En cuanto a tu consulta, si querés pasarle parámetros a la hora de ejecutar SAP, solo tenes que incluirlos luego del último *Chr(34)* concatenándolo con el amp (&) y luego tus argumentos. Por ejemplo:
WScript.CreateObject("WScript.Shell").Run Chr(34) & SAP_GUI_PATH & Chr(34) & " --myarg", 2
Saludos.
Hola cómo estás? me podrías decír qué debería cambiar si es que entro directo a SAP sin autenticar? Muchas gracias
Hola Sonia, qué tal? Lo que deberías hacer si entras sin autenticarte, es decir, por SSO, es lo que se muestra a partir del minuto 14:50. Solo deberías colocar en la variable *lk0_sso* el nombre del servidor que vas a querer ingresar.
Saludos.
estuve intntando cerrar la ventana de sap logon al terminar el codigo, pero no parece surtir efecto, yo he usado esta
WScript.CreateObject("WScript.Shell").Run "taskkill /f /im" & Chr(34) & SAP_BIN & Chr(34),0,False
Te esta faltando un espacio luego de "im". Sería:
WScript.CreateObject("WScript.Shell").Run "taskkill /f /im " & Chr(34) & SAP_BIN & Chr(34), 0, False
Por eso no te lo cerraba, con ese pequeño cambio funcionará.
Saludos.
Una consulta, como puedo obtener el element del GUI? No entiendo esa parte y no sé como.obtienes el.identificador del usuario, contraseña, o de otros campos cuando ingresas al sap. Gracias
Hola Julio, ¿cómo estás? Si te referís al objeto de SAP GUI, lo que hago es asociar en la variable *root* mediante el método *GetObject()* dicho objeto para luego poder obtener el motor de scripting (Scripting Engine) del mismo y almacenarlo en la variable *Application*. Por supuesto que para esto debes tener el SAP GUI abierto previamente, de lo contrario esto fallará al intentar inicializar las variables.
En cuanto a los campos, para identificarlos podes utilizar una simple grabación para saber como se identifican y poder manipularlos desde el código. Todo eso lo explico en el video introductorio a Scripting, te lo dejo a continuación: ua-cam.com/video/jRLYmbzAOOE/v-deo.html
Saludos.
Q excelente video sigue así saludos
¡Muchas gracias! Me alegro de que te haya gustado y pronto se viene más contenido.
Saludos.
Excelente video, super bien explicado.
En mi caso me aparece un mensaje de error "The enumerator of the collection cannot find an element with the specified index."
Revisando, se refiere a la línea de:
Set Session = Connection.Children(0)
Me puedes ayudar porfavor.
Saludos,
Muchas gracias por tu comentario Carlos! Sobre tu consulta, ese error te está saliendo porque al momento de querer inicializar el objeto session no hay ninguna sesión activa. Te sugiero que te fijes si el resto del código está bien y si se está abriendo bien el sap y la sesión antes de llegar a esa línea.
Cualquier inquietud no dudes en consultarme.
Saludos.
@@alefranzoni Hola Ale! Gracias por tu respuesta, he revisado el código y todo está igual al ejemplo que explicas, incluso te lo comparto, he cambiado el nombre del servidor por "nombre" y los demás datos los he dejado igual, el programa inicia perfecto una vez inicia la interfaz de ingresar usuario y contraseña, aparece el mensaje de error..
'SAP
SAP_BIN = "saplogon.exe"
SAP_GUI_PATH = "C:\Program Files (x86)\SAP\FrontEnd\SapGui\" & SAP_BIN
' Connections
lk0_sso = "nombre"
lk0_auth = "nombre"
' Auth
user = "username"
password = "pw"
Main
Sub Main()
If Not FileExists(SAP_GUI_PATH) Then
MsgBox "El archivo no existe en la ruta especificada.", vbExclamation, "Archivo no encontrado"
Exit Sub
End If
ExecuteAndWaitForSAP
' SapGuiApplication
Set root = GetObject("SAPGUI")
Set Application = root.GetScriptingEngine
' Open sync connection
'
' Without SSO
Set Connection = Application.OpenConnection(lk0_auth, True)
Set Session = Connection.Children(0)
Session.findById("wnd[0]/usr/txtRSYST-BNAME").text = user
Session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = password
Session.findById("wnd[0]/tbar[0]/btn[0]").press
' Open any tx
Session.StartTransaction("IW32")
MsgBox "Ok!"
' Shutdown the connection
Set Session = Nothing
Connection.CloseSession("ses[1]")
Set Connection = Nothing
Set Application = Nothing
End Sub
Sub ExecuteAndWaitForSAP()
' Run saplogon bin
WScript.CreateObject("WScript.Shell").Run Chr(34) & SAP_GUI_PATH & Chr(34), 2
' Wait to be initialized
isSapInitialized = False
Do While Not isSapInitialized
isSapInitialized = IsProcessRunning(SAP_BIN)
Loop
WScript.Sleep 3000
End Sub
Function IsProcessRunning(targetProcess)
Set WMIService = GetObject("winmgmts:\\.
oot\cimv2")
query = "SELECT * FROM Win32_Process"
Set items = WMIService.ExecQuery(query)
For Each item In items
If item.Name = targetProcess Then
IsProcessRunning = True
Exit Function
End If
Next
IsProcessRunning = False
End Function
Function FileExists(filePath)
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(filePath) Then
FileExists = True
Else
FileExists = False
End If
End Function
El mensaje de error sale para la linea 29, ¿Cómo puedo verificar si la sesión está activa?
Saludos,
@@CARLOSRAMIREZ-eb8kd Bien, es bastante raro, pero estoy seguro de que en realidad lo que está pasando es que te está mostrando ese error por las credenciales. Asegúrate de estar colocando las credenciales correctas acá:
' Auth
user = "username"
password = "pw"
Recordá que tenés que cambiar lo que puse yo por tu usuario y contraseña correcta.
Otra cosa que podés hacer, como veo que estás intentando usar el método por autenticación, es cambiarlo e intentar por SSO si lo tenés habilitado y probar así (como muestro en el video, la segunda alternativa donde no coloco user ni password).
Manteneme al tanto,
Saludos.
Bro, la verdad No se porque no me agarra los codigos cuando ejecuto el script me sale un error. Siento que la extensión no me quedo bien agregada, tendras un vídeo explicando mejor esa conexión ?
Hola Alejandro, cómo estás? No sé exactamente a que te referís. Podrías dejarme más detalles de qué error te da y cuando ejecutas que comando? Así tengo más contexto para intentar ayudarte. Saludos!
hola, de casualidad tienes un manual para habilitar SSO en SAP?
Hola Ronald, no cuento con ningún manual para hacer eso, pero en Internet hay bastante contenido de como realizarlo. Demás está decir que tenés que ser el owner de la instalación de SAP de tu empresa para poder efectuarlo. Si no, podrías directamente pedírselo al área de IT. Saludos.
Buen día me aparece el mismo error que comentas al final para la ejecución, como se puede resolver o la parte 2
Hola Giovani, cómo estás? Me podrías decir en que parte y cuál es el error que te aparece? Para poder ubicarme mejor y darte una mejor respuesta. Saludos.
Si se entra modo SSO mediante un portal web cambia, he estado intentando pero no he tenido éxito
Hola Jose, si utilizas SAP mediante interfaz web, lamentablemente scripting no es compatible. Tendrías que usar alguna otra alternativa para automatizar las tareas. Saludos.
@@alefranzoni muchas gracias amigo, te felicito eres muy bueno
@@josemanuelvillanuevalopezj435 gracias a vos por el apoyo 🙌🏻
hola amigo de nuevo yo 😁, queri preguntarte como hago para pasar este script a excel segui tu otro tutorial, pero alli no hay tantas condiciones como lo es este caso, esto lo quiero hacer poder programar ya sea el script o el excel con el programador de tareas para que se ejecute a una hora determinada, saludos desde Colombia
Derick, cómo estás? Bien, para poder pasar este script a código VBA para ejecutarlo dentro de un Excel tienes que hacer algunas modificaciones más que nada para adaptar los métodos Shell y Sleep. En este video ua-cam.com/video/YQq8wnDB2HU/v-deo.html ya está migrado esto mismo a Excel, asique puedes echarle un vistazo y/o bajarte el archivo final para ver como es que se hace.
Una vez hecho eso, ahí si puedes automatizar el excel para que se ejecute desde argumentos externos y podrás programar el script para que ejecute tu libro a la hora deseada desde el programador de tareas de windows.
Espero que te sirva,
Saludos.
@@alefranzoni hola Ajeandro de verdad eres un crack, te agradezco mucho tu ayuda en verdad me ha servido mucho, pero quisiera hacerte otras dos consultas; sabes que código o que debo hacer para que en el script tome la fecha del equipo osea que cuando lo ejecute tome la fecha presente y no la grabada, y la otra consulta es si sabes porque cuabdo exportó los archivos en formato xlsx excel me indica que el archivo está roto o que la extensión está dañada, en verdad agradezco mucho tu ayuda saludos desde Colombia😊
@@derickmendivelso7173 Hola nuevamente Derick, gracias a vos en primer lugar por tus comentarios y apoyo.
En cuanto a tus consultas, vamos por la primera, para poder tomar la fecha actual es muy sencillo, te voy a dejar dos ejemplos, uno si estás ejecutando el script directamente desde un archivo .vbs y otra si lo estás haciendo dentro de un Excel.
➡️ *VBS - Obtener fecha actual*
Con la función Now podrás obtener el día y hora actuales y con las funciones Day, Month y Year puedes darle el formato que quieras, en este caso sería "DD.MM.AAAA", pero tú puedes usarlos para darle el formato que quieras. De la misma manera, con Hour, Minute y Second podrías obtener también las horas, minutos y segundos por si quisieras incluirlas.
_Day(Now) & "." & Month(Now) & "." & Year(Now)_
➡️ *VBA (Excel)- Obtener fecha actual*
Con la función Now podrás obtener el día y hora actuales al igual que en VBS, pero ahora con la función Format puedes darle el formato deseado, en este caso sería "DD.MM.AA_HHmmss", pero tú puedes darle el formato que quieras.
_Format(Now, "dd.MM.aa_HHmmss")_
En cuanto a tu *segunda duda* te digo que si, si le pones la extensión *.xlsx te va a fallar, es un error de SAP, tienes que exportarlo con extensión *.xls y listo, como se muestra en el video de exportación y no tendrás problemas.
Saludos.
@@alefranzoni amigo eres un crack en verdad e buscado esa información por otras partes y en verdad no la he encontrado así de clara, te agradezco mucho en verdad. Saludos desde Colombia
Hola Ale. Muchas gracias, he logrado muchas cosas con tus videos. Una duda, si tengo acceso a sap gui desde un ejecutable “tx.sap” entra directo. Sin password. Hay manera de hacer que el script desde el inicio abra el script y lo ejecute?
Hola Mark, en primer lugar, me alegro mucho de que te hayan servido los videos. En cuanto a tu consulta, sí, sería como abrir cualquier tipo de archivo. Si estás en VBS, podrías abrirlo creando el objeto WScript.Shell y pasándole la ruta, y en el caso de VBA, simplemente con Shell y pasándole la ruta del archivo.
Lo que tienes que tener en cuenta es que esto debería ejecutarse si o si al inicio de tu automatización, dejar un tiempo para que inicie y luego comenzar con el seteo de las variables necesarias para la automatización. De lo contrario, si lo haces sin hacer una pausa entre operaciones, lo más probable es que te falle al intentar inicializar los objetos de SAP que aún no están disponibles.
Espero haberte podido ayudar a aclarar tu duda,
Saludos.
Hola Ale, tengo una duda que no se resolver y que te propongo como posible idea para un futuro vídeo, si te apetece, claro.
Estoy generando pedidos en SAP con un script a partir de datos en un excel, cada cierto tiempo un pop-up con el que he de interactuar interrumpe la ejecución, el típico de "Han aparecido mensajes, ¿Desea grabar el documento o tratar los datos?" y ello me obliga a lanzar de nuevo mi script.
Seguro que deben haber estructuras de control de ejecución en vba que permitan resolver estas situaciones sin que se detenga el código, no se si me podrías echar una mano con ellas.
Muchas gracias por tu ayuda. Un saludo.😄
Hola, ¿cómo estás? Entiendo que este mensaje que me comentas aparece en SAP en algunas ocasiones mientras estás ejecutando tu script. Esto es muy fácil de solucionar, de hecho, he comentado como hacerlo en este video, por ejemplo, ua-cam.com/video/FX2gWTDIy9E/v-deo.html que te deje el momento exacto que explico como detectar esa ventana y accionar con la misma.
En resumen, básicamente lo que vas a tener que hacer es, detectar en qué momento del flujo podría aparecer esa ventana y agregar el código para saber si efectivamente se está mostrando o no. Si es así, que se presione la acción necesaria para continuar, de lo contrario, seguirá el código su ejecución sin tener que interactuar con dicho elemento.
Saludos.
Ale, como hago esto pero con python Y_Y
Hola Oscar, cómo estás? Te comento que para replicar este funcionamiento y ejecutar scripting en Python es bastante sencillo, tan solo tienes que importar las librerías *win32com.client, sys, subprocess y time* (esta última es opcional, pero te sirve para hacer el sleep) y luego adaptar un poco el código para:
1. Abrir SAP GUI (con subprocess)
2. Esperar que SAP se termine de ejecutar completamente (puedes usar el método sleep de la librería time)
3. Setear las variables necesarias (sapgui, application, connection y session)
4. Ahora ya podrías ejecutar código perfectamente, por ejemplo, estas líneas:
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/txtRSYST-BNAME").text = "ID"
Espero que te haya podido guiar un poco sobre como realizarlo, de lo contrario y si te parece bien, me apunto la idea para hacer un video próximo sobre como realizar todo esto que te comento en un script de Python.
Saludos.
Gracias Ale, aun no habilitan el scripting para sap en el servidor, asi que por mientras estoy usando la libreria pyautogui de python bro, va bien hasta el momento.
@@oscareliasdelacruzcotrina3944 Genial y no hay problema, cuando lo habiliten si te surge alguna inquietud, no dudes en consultarme que te doy una mano en lo que pueda.