Muchas gracias René por tu comentario. Este último tiempo estuve algo complicado con los tiempos, pero en breve se viene mucho más contenido 😉. Saludos.
Hola excelente video, pero me surgió un problema al aplicarlo, me podrías ayudar por favor, quisiera que la acción se ejecutara en segundo plano pero al activar la macro las transacciones se abren en la primera ventana abierta, como se haría para que ejecute todo en la última ventana que se abre o solamente en la sesión que abre la macro?
Hola Hugo, muchas gracias por tu comentario. Sobre tu consulta, me resulta raro lo que me decís, ya que si seguiste todo como en el tutorial lo que debería hacer tu script es en caso de ya contar con conexiones, crear una sesión nueva (nuevo modo) y esta setearla a la variable *session* en la línea siguiente del método manageConnection: Set session = connection.Sessions(connection.Sessions.Count - 1) Y en caso de no contar con ninguna conexión, abrirte una nueva y ya luego, todo lo demás lo ejecuta sobre esta sesión. Fijate de tener bien esas variables. De lo contrario, si entendí mal tu inconveniente, detállame mejor que es lo que está sucediendo para poder darte una mano. Saludos.
@@alefranzoni muchas gracias por tu respuesta pero e revisado y no encuentro el error, las variables están bien y e utilizado el mismo archivo que has compartido y me sucede lo mismo, la sesion que tengo abierta abre la transacción y se cierra dejándome la nueva sesión abierta
@@alefranzoni si interrupto la ejecución en session.CreateSession y lo continuo manual se ejecuta todo bien, pero dejándolo automático sucede lo que comento
@@hugoandresgonzalezbarriga1409 Qué raro, la verdad que no debería suceder eso, debería ejecutarse en la sesión que crea. Podrías probar con setear la sesión luego del CreateSession de esta manera (sacandole el -1): Set session = connection.Sessions(connection.Sessions.Count) No sería lo correcto, pero puedes probar a ver si de esa manera te la asocia a la sesión generada en último lugar. De todas maneras, voy a estar haciendo unas pruebas para ver si he cometido algún error y en tal caso, te comentaré. Gracias por tu feedback Hugo, Saludos.
@@alefranzoni Muchas gracias por la respuesta y el interés, logre solucionar el problema agregando un Sleep después de session.CreateSession, por si alguien tiene el mismo problema con esto queda funcionando todo perfectamente. queda de esta forma session.CreateSession Sleep 1000 Set session = connection.Sessions(connection.Sessions.Count - 1)
Muchas gracias por el comentario Juan. Te hago una consulta, ¿a qué te referís específicamente con si se podría hacerlo con credenciales de SQL? Poneme un poco en contexto de lo que quisieras hacer así te puedo contestar más acertadamente.
¡Hola Ale! Excelente video. me ayudo muchísimo en la gestión de las sesiones. Te escribo por una duda que encontré al manejar sesiones. Necesito que el script se ejecute en la última sesión abierta (sea que yo la haya iniciado o tomar la última iniciada si llego al límite). Al buscar esto me he encontrado con la situación de que si, por ejemplo, en algún momento cerré la sesión 1 y me quedé con la 2 y 3 abiertas (de un límite de 3), al usar el método que explicas me toma la sesión 3 y no la 1. En este caso la última sesión sería la 1, no la 3. Mi consulta es existe alguna forma de saber cuál fue la última sesión abierta? Perdón por lo largo de comentario, pero quería explicar lo mejor que pudiera la situación. Mucha gracias por compartir tus conocimientos. ¡Saludos!
Primero que nada, gracias por tu comentario Raul. En cuanto a tu consulta, no hay manera de hacerlo con los métodos que nos provee SAP, es decir, nativamente. Como bien decís y has podido apreciar, de la manera en que lo he explicado, siempre tendrá en cuenta a la “última” sesión a la de mayor número, ya que lo hace desde el Count. Para perfeccionar esto y que funcione más correctamente, por decirlo de alguna manera, habría que guardar en algún objeto el nombre y número de sesión así como la hora de instanciación, siempre y cuando se mantengan activas para que, luego, al pedirle al método que nos devuelva la última sesión activa, nos traiga la última creada, sea la numero 1, 2 o 3. Obviamente, para hacer todo el proceso que te acabo de contar, habría que codearlo de manera artesanal porque SAP no nos provee de estos datos ni de un manager, si estás interesado podría hacerlo en cuanto tenga tiempo y compartir un video sobre eso. Saludos.
Muchas gracias por tus videos, me han ayudado bastante para darme una idea, alguien me podria recomendar un curso para profundizar ya que soy suuuuper nuevo en la parte de SAP y tengo que realizar una serie de automatizaciones de reportes
Hola Ale, todo un crack, tu vídeo me soluciona una gran duda que tenía. Por cierto, me surge otra duda: Será posible que el script se ejecute de manera automática a una hora determinada y que se ejecute de fondo? Saludos desde Nicaragua 👍
Hola Isa, muchas gracias por tu comentario. En cuanto a tu duda, si se puede. Si lo tienes todo en un Excel, lo que podrías hacer es crear un archivo Batch (*.bat) con el cual abres el Excel y le mandas un argumento, y al recibirlo, ejecutar tu script de manera automática. Esto lo expliqué en este video: th-cam.com/video/5PsIjnEZqqU/w-d-xo.html Una vez que tengas tu archivo bat creado, tan solo resta crear la tarea para que se ejecute a la hora y los días deseados. Para eso te vas al *Task Scheduler* (Programador de Tareas) de Windows y creas una tarea que desencadene la ejecución del script, donde vas a tener que indicarle que tu script es el archivo bat generado anteriormente y listo! Entonces, a la hora que le indiques, se correrá la tarea, esta última ejecutara el bat y este abrirá el Excel para hacer todo el proceso automáticamente. Te dejo un enlace para que veas como crear tareas programadas también por si nunca lo has hecho, pero es muy sencillo. www.genbeta.com/paso-a-paso/como-programar-tareas-en-windows-10 La otra alternativa, pero menos recomendada, es crear un timer dentro del archivo Excel para que se ejecute tu macro que contiene todo el proceso a una determinada hora del día, pero en este caso deberías dejar el archivo abierto para que se ejecute de manera correcta. Yo te recomiendo hacer lo que te comente primero, pero por si le queres dar una mirada, te dejo este otro video del canal: th-cam.com/video/tR_j5NbsSlE/w-d-xo.html Espero haberte podido ayudar, Saludos!
Excelete día Ale, Me he topado que cuando ejecutamos un Script mediante un VBA no puedo seguir trabajando en Excel (ya que esta ejecutando la macro) ¿haz encontrado alguna opción para ejecutarlo en fondo y permita seguir trabajando en Excel, SAP , etc?
Buenas tardes, Diego. Te comento que en Excel no hay manera nativa de seguir trabajando mientras se está ejecutando la tarea, ya que por defecto es single-threaded, es decir, que trabaja solo con un hilo. Por lo tanto, hasta que la tarea no finalice no puedes tener interacción con el mismo. Obviamente, hay alternativas a esto, como por ejemplo, crear una dll en C#.NET que te permita crear subprocesos y hacer referencia a ellos desde VBA como lo hacemos con otras librerías externas. En cuanto a SAP, lo que hace la ejecución es correr las automatizaciones contenidas en el script en la ventana en cuestión, pero si tienes otros modos generados los puedes usar en paralelo sin ningún problema. Inclusive, si te fijas, mientras se está corriendo un script puedes interactuar de todas maneras con la ventana de SAP sobre la que se está ejecutando porque no se congela la UI. Por supuesto que en este caso no es algo deseado, ya que si interactuamos con la misma y modificamos algo podemos hacer que falle el script que se está ejecutando. Espero haber podido aclarar tus inquietudes, de lo contrario, no dudes en consultarme, Saludos.
@@alefranzoni Excelente noche Ale, me surgio una nueva duda, no se si tengas algun tutorial sobre eso. Pero al momento de iniciar un script, este solo se ejecuta con la sessión[0]. Te comparto una fracción del codigo (como puedes ver se ejecuta con wnd[0] y wnd[1] para las ventanas auxiliares) : If Application.Connections.Count = 0 Then Set Connection = Application.OpenConnection(SAP_SSO, Ture) Set Session = Connection.Sessions(0) Else Set connection =Application.Connections(0) Set session = connection.Sessions(0) If connection.Sessions.Count > 6 Then MsgBox "Se han alcanzado el número máximo de sessiones" Exit Sub
End If session.CreateSession Set session = connection.Sessions(connection.Sessions.Count - 1) End If 'Minimizar pantallas Session.findById("wnd[0]").iconify 'Entra a la transacción Session.StartTransaction("IW29") 'Ejecuta variante de entrada session.findById("wnd[0]/tbar[1]/btn[17]").press session.findById("wnd[1]/usr/txtV-LOW").text = "/PBI_TAGS" session.findById("wnd[1]/usr/txtENAME-LOW").text = "" session.findById("wnd[1]/usr/txtV-LOW").caretPosition = 9 session.findById("wnd[1]").sendVKey 8
@@diegovicentejuarezrueda7721 Hola Diego, cómo estás? Según la porción de código que me compartís ahí se ejecutara en la session[0] cuando no tengas conexiones activas, de lo contrario, hará un CreateSession y session pasara a tomar el valor de session[connection.Sessions.Count - 1]. Si cuando ya tienes sesiones activas, sigue tomándote la 0 es porque después del *session.CreateSession* deberías agregarle un Sleep(1000), por ejemplo. Esto es para darle tiempo (en el ejemplo que te di sería 1 segundo) a que se cree la sesión nueva y esta misma sea inicializada en la variable correspondiente, de lo contrario, puede pasar que siempre la inicialice en una incorrecta por no darle el tiempo al GUI de SAP de crear la sesión de manera efectiva. Otro detalle por las dudas: en la línea 2 tenés un error, es True y no Ture, pero no sé si fue un error de copy/paste o un real realmente. Saludos.
@@alefranzoni Muchas gracias Ale, me encuentro muy bien, espero que vos igual. Ya verifique, si contaba con un error en Ture=True, además verifique y estendí el Sleep hasta 5000 y 10000, sin embargo, me sigue ejecutando el script en la primer sesión que tenga abierta (ses[0]). También estoy tratando de aplicar el connection.CloseSession(sessionName) en un vbs pero no logro hacer que lo roconozca. Y otra pregunta ¿tienes algún curso completo de VBScript y VBA posteado en alguna plataforma? Trabajo mucho con reportes de SAP, EXCEL, POWER BI, y toda la información que haz subido a tu canal me ha sido de gran ayuda.
David, cómo estás? Me podrías dar un ejemplo de a que te referís con los atajos entre SAP y Excel? Para poder entender mejor y ver si te puedo ayudar en algo. Saludos.
@@davidaviles5264 Sí, podes tanto enviar como recibir información de Excel a SAP y viceversa, todo eso lo explico en los diversos videos sobre SAP Scripting que tengo en el canal. Te dejo el primero para que los vayas mirando si te interesa: th-cam.com/video/jRLYmbzAOOE/w-d-xo.html Saludos.
Tus vídeos eran lo mejor que he visto en TH-cam sobre Excel, lástima que ya no publiques, saludos.
Muchas gracias René por tu comentario. Este último tiempo estuve algo complicado con los tiempos, pero en breve se viene mucho más contenido 😉. Saludos.
Súper claro y práctico!!! Felicitaciones Ale
Excelente como siempre
👏👏👏
Hola excelente video, pero me surgió un problema al aplicarlo, me podrías ayudar por favor, quisiera que la acción se ejecutara en segundo plano pero al activar la macro las transacciones se abren en la primera ventana abierta, como se haría para que ejecute todo en la última ventana que se abre o solamente en la sesión que abre la macro?
Hola Hugo, muchas gracias por tu comentario. Sobre tu consulta, me resulta raro lo que me decís, ya que si seguiste todo como en el tutorial lo que debería hacer tu script es en caso de ya contar con conexiones, crear una sesión nueva (nuevo modo) y esta setearla a la variable *session* en la línea siguiente del método manageConnection:
Set session = connection.Sessions(connection.Sessions.Count - 1)
Y en caso de no contar con ninguna conexión, abrirte una nueva y ya luego, todo lo demás lo ejecuta sobre esta sesión.
Fijate de tener bien esas variables. De lo contrario, si entendí mal tu inconveniente, detállame mejor que es lo que está sucediendo para poder darte una mano.
Saludos.
@@alefranzoni muchas gracias por tu respuesta pero e revisado y no encuentro el error, las variables están bien y e utilizado el mismo archivo que has compartido y me sucede lo mismo, la sesion que tengo abierta abre la transacción y se cierra dejándome la nueva sesión abierta
@@alefranzoni si interrupto la ejecución en session.CreateSession y lo continuo manual se ejecuta todo bien, pero dejándolo automático sucede lo que comento
@@hugoandresgonzalezbarriga1409 Qué raro, la verdad que no debería suceder eso, debería ejecutarse en la sesión que crea. Podrías probar con setear la sesión luego del CreateSession de esta manera (sacandole el -1):
Set session = connection.Sessions(connection.Sessions.Count)
No sería lo correcto, pero puedes probar a ver si de esa manera te la asocia a la sesión generada en último lugar. De todas maneras, voy a estar haciendo unas pruebas para ver si he cometido algún error y en tal caso, te comentaré.
Gracias por tu feedback Hugo,
Saludos.
@@alefranzoni Muchas gracias por la respuesta y el interés, logre solucionar el problema agregando un Sleep después de session.CreateSession, por si alguien tiene el mismo problema con esto queda funcionando todo perfectamente.
queda de esta forma
session.CreateSession
Sleep 1000
Set session = connection.Sessions(connection.Sessions.Count - 1)
Excelente! Saludos y muchas gracias.
¿Será posible hacerlo también con credenciales de SQL?
Muchas gracias por el comentario Juan. Te hago una consulta, ¿a qué te referís específicamente con si se podría hacerlo con credenciales de SQL? Poneme un poco en contexto de lo que quisieras hacer así te puedo contestar más acertadamente.
¡Hola Ale! Excelente video. me ayudo muchísimo en la gestión de las sesiones. Te escribo por una duda que encontré al manejar sesiones. Necesito que el script se ejecute en la última sesión abierta (sea que yo la haya iniciado o tomar la última iniciada si llego al límite). Al buscar esto me he encontrado con la situación de que si, por ejemplo, en algún momento cerré la sesión 1 y me quedé con la 2 y 3 abiertas (de un límite de 3), al usar el método que explicas me toma la sesión 3 y no la 1. En este caso la última sesión sería la 1, no la 3. Mi consulta es existe alguna forma de saber cuál fue la última sesión abierta? Perdón por lo largo de comentario, pero quería explicar lo mejor que pudiera la situación. Mucha gracias por compartir tus conocimientos. ¡Saludos!
Primero que nada, gracias por tu comentario Raul. En cuanto a tu consulta, no hay manera de hacerlo con los métodos que nos provee SAP, es decir, nativamente. Como bien decís y has podido apreciar, de la manera en que lo he explicado, siempre tendrá en cuenta a la “última” sesión a la de mayor número, ya que lo hace desde el Count.
Para perfeccionar esto y que funcione más correctamente, por decirlo de alguna manera, habría que guardar en algún objeto el nombre y número de sesión así como la hora de instanciación, siempre y cuando se mantengan activas para que, luego, al pedirle al método que nos devuelva la última sesión activa, nos traiga la última creada, sea la numero 1, 2 o 3.
Obviamente, para hacer todo el proceso que te acabo de contar, habría que codearlo de manera artesanal porque SAP no nos provee de estos datos ni de un manager, si estás interesado podría hacerlo en cuanto tenga tiempo y compartir un video sobre eso.
Saludos.
@@alefranzoni muchas gracias por la respuesta Ale!
Muchas gracias por tus videos, me han ayudado bastante para darme una idea, alguien me podria recomendar un curso para profundizar ya que soy suuuuper nuevo en la parte de SAP y tengo que realizar una serie de automatizaciones de reportes
Hola Ale, todo un crack, tu vídeo me soluciona una gran duda que tenía. Por cierto, me surge otra duda: Será posible que el script se ejecute de manera automática a una hora determinada y que se ejecute de fondo? Saludos desde Nicaragua 👍
Hola Isa, muchas gracias por tu comentario. En cuanto a tu duda, si se puede. Si lo tienes todo en un Excel, lo que podrías hacer es crear un archivo Batch (*.bat) con el cual abres el Excel y le mandas un argumento, y al recibirlo, ejecutar tu script de manera automática. Esto lo expliqué en este video: th-cam.com/video/5PsIjnEZqqU/w-d-xo.html
Una vez que tengas tu archivo bat creado, tan solo resta crear la tarea para que se ejecute a la hora y los días deseados. Para eso te vas al *Task Scheduler* (Programador de Tareas) de Windows y creas una tarea que desencadene la ejecución del script, donde vas a tener que indicarle que tu script es el archivo bat generado anteriormente y listo! Entonces, a la hora que le indiques, se correrá la tarea, esta última ejecutara el bat y este abrirá el Excel para hacer todo el proceso automáticamente.
Te dejo un enlace para que veas como crear tareas programadas también por si nunca lo has hecho, pero es muy sencillo.
www.genbeta.com/paso-a-paso/como-programar-tareas-en-windows-10
La otra alternativa, pero menos recomendada, es crear un timer dentro del archivo Excel para que se ejecute tu macro que contiene todo el proceso a una determinada hora del día, pero en este caso deberías dejar el archivo abierto para que se ejecute de manera correcta. Yo te recomiendo hacer lo que te comente primero, pero por si le queres dar una mirada, te dejo este otro video del canal: th-cam.com/video/tR_j5NbsSlE/w-d-xo.html
Espero haberte podido ayudar,
Saludos!
@@alefranzoni Mil gracias, voy a intentarlo. Desde ahora un suscriptor ganado. Todo un grande Ale 🫡
@@isaiassoza5197 Muchas gracias por el apoyo! Cualquier duda o consulta, avisame. Saludos.
Excelete día Ale,
Me he topado que cuando ejecutamos un Script mediante un VBA no puedo seguir trabajando en Excel (ya que esta ejecutando la macro) ¿haz encontrado alguna opción para ejecutarlo en fondo y permita seguir trabajando en Excel, SAP , etc?
Buenas tardes, Diego. Te comento que en Excel no hay manera nativa de seguir trabajando mientras se está ejecutando la tarea, ya que por defecto es single-threaded, es decir, que trabaja solo con un hilo. Por lo tanto, hasta que la tarea no finalice no puedes tener interacción con el mismo. Obviamente, hay alternativas a esto, como por ejemplo, crear una dll en C#.NET que te permita crear subprocesos y hacer referencia a ellos desde VBA como lo hacemos con otras librerías externas.
En cuanto a SAP, lo que hace la ejecución es correr las automatizaciones contenidas en el script en la ventana en cuestión, pero si tienes otros modos generados los puedes usar en paralelo sin ningún problema. Inclusive, si te fijas, mientras se está corriendo un script puedes interactuar de todas maneras con la ventana de SAP sobre la que se está ejecutando porque no se congela la UI. Por supuesto que en este caso no es algo deseado, ya que si interactuamos con la misma y modificamos algo podemos hacer que falle el script que se está ejecutando.
Espero haber podido aclarar tus inquietudes, de lo contrario, no dudes en consultarme,
Saludos.
@@alefranzoni
Muchisimas gracias Ale, excelente información.
@@alefranzoni
Excelente noche Ale, me surgio una nueva duda, no se si tengas algun tutorial sobre eso.
Pero al momento de iniciar un script, este solo se ejecuta con la sessión[0].
Te comparto una fracción del codigo (como puedes ver se ejecuta con wnd[0] y wnd[1] para las ventanas auxiliares) :
If Application.Connections.Count = 0 Then
Set Connection = Application.OpenConnection(SAP_SSO, Ture)
Set Session = Connection.Sessions(0)
Else
Set connection =Application.Connections(0)
Set session = connection.Sessions(0)
If connection.Sessions.Count > 6 Then
MsgBox "Se han alcanzado el número máximo de sessiones"
Exit Sub
End If
session.CreateSession
Set session = connection.Sessions(connection.Sessions.Count - 1)
End If
'Minimizar pantallas
Session.findById("wnd[0]").iconify
'Entra a la transacción
Session.StartTransaction("IW29")
'Ejecuta variante de entrada
session.findById("wnd[0]/tbar[1]/btn[17]").press
session.findById("wnd[1]/usr/txtV-LOW").text = "/PBI_TAGS"
session.findById("wnd[1]/usr/txtENAME-LOW").text = ""
session.findById("wnd[1]/usr/txtV-LOW").caretPosition = 9
session.findById("wnd[1]").sendVKey 8
@@diegovicentejuarezrueda7721 Hola Diego, cómo estás? Según la porción de código que me compartís ahí se ejecutara en la session[0] cuando no tengas conexiones activas, de lo contrario, hará un CreateSession y session pasara a tomar el valor de session[connection.Sessions.Count - 1]. Si cuando ya tienes sesiones activas, sigue tomándote la 0 es porque después del *session.CreateSession* deberías agregarle un Sleep(1000), por ejemplo. Esto es para darle tiempo (en el ejemplo que te di sería 1 segundo) a que se cree la sesión nueva y esta misma sea inicializada en la variable correspondiente, de lo contrario, puede pasar que siempre la inicialice en una incorrecta por no darle el tiempo al GUI de SAP de crear la sesión de manera efectiva.
Otro detalle por las dudas: en la línea 2 tenés un error, es True y no Ture, pero no sé si fue un error de copy/paste o un real realmente.
Saludos.
@@alefranzoni
Muchas gracias Ale, me encuentro muy bien, espero que vos igual.
Ya verifique, si contaba con un error en Ture=True, además verifique y estendí el Sleep hasta 5000 y 10000, sin embargo, me sigue ejecutando el script en la primer sesión que tenga abierta (ses[0]).
También estoy tratando de aplicar el connection.CloseSession(sessionName) en un vbs pero no logro hacer que lo roconozca.
Y otra pregunta ¿tienes algún curso completo de VBScript y VBA posteado en alguna plataforma? Trabajo mucho con reportes de SAP, EXCEL, POWER BI, y toda la información que haz subido a tu canal me ha sido de gran ayuda.
Alguien sabe trucos(atajos) de tecleado entre SAP y EXCELL para hacer mas facil y rapido el trabajo entre ellos?
David, cómo estás? Me podrías dar un ejemplo de a que te referís con los atajos entre SAP y Excel? Para poder entender mejor y ver si te puedo ayudar en algo. Saludos.
@@alefranzoni Se puede intercambiar informacion de execel a sap con un escript?
@@davidaviles5264 Sí, podes tanto enviar como recibir información de Excel a SAP y viceversa, todo eso lo explico en los diversos videos sobre SAP Scripting que tengo en el canal. Te dejo el primero para que los vayas mirando si te interesa: th-cam.com/video/jRLYmbzAOOE/w-d-xo.html
Saludos.
@@alefranzoni cuantos videos son?
@@davidaviles5264 por el momento son solo 6 videos, los podes encontrar en este playlist: th-cam.com/play/PLEALJWIWX5iIGG8ZjZA74SZxPh5IItEvS.html
Das clases o algo ?
Hola, ¿cómo estás? Por el momento no estoy dando clases por falta de tiempo 😔