Espectacular Ale, por trabajo estoy muy interesado en el SAP Scripting y me cuesta mucho encontrar recursos de calidad por la web, por suerte, con tus videos, estoy aprendiendo muchísimo. Muchas gracias.
Hola Feraldi, me alegro mucho de lo que me comentas. Tal cual, hay muy poca información sobre estos temas, así que desde mi lugar un gusto aportar mi granito de arena. Pronto ya vendrá mucho más contenido super interesante. Saludos.
Hola Maxi, muchísimas gracias a vos por tu comentario, se aprecia mucho. Desde acá encantado y un gusto poder compartir estos temas con ustedes. Saludos.
Muchas gracias Marco por tu comentario y por apoyarme, es lo que me motiva a seguir creando contenido para ustedes y me alegro que les pueda ser de ayuda. Nuevamente gracias y si, atentos porque próximamente se viene mucho más contenido!
Hola Ale, me ha conmovido que respondas tan bien cada uno de los comentarios, no cualquiera hace eso, estoy agradecido por ello, además soy nuevo suscriptor. Tengo una consulta, *¿Sabes si existe alguna restricción por parte de SAP en el uso de esta herramienta?**¿Existe documentación de SAP que especifíque que se puede utilizar el script en una Macro?* Me sería muy útil tu respuesta porque tengo ya muchas automatizaciones pero quiero estar seguro de que todo irá bien y sin problemas antes de desplegarlas.
Muchas gracias por tu comentario y por suscribirte, me ayuda muchísimo. La verdad que trato en la medida de lo posible y cuando tengo un ratito libre de ir contestándoles a todos y tratando de ayudarles. Ahora sí, en cuanto a tu consulta; no hay ningún tipo de restricción de parte de SAP por utilizar esta herramienta, dado que es una función *legacy* de SAP, es decir, que ya viene incluida por la misma empresa. Por lo tanto, no te preocupes que no vas a tener ningún inconveniente. En cuanto a la documentación, no hay una que diga específicamente "se puede usar con tal o cual cosa" pero sí hay una oficial, la cual siguen teniendo y manteniendo actualizada a día de hoy, donde ellos explican el uso de cada uno de los objetos y demás, con lo cual respalda su uso. Te dejo el link: bit.ly/ScriptingDocumentation. Cualquier consulta estoy a disposición, a seguir automatizando! Saludos.
Hola buenas tardes muy buen video una consulta en el sap mm se puede hacer ordenes de compras de manera masiva jalando solpeds y otros datos de una tabla excel? Porque en donde trabajo son varias solped y es dificil trabajarlas una por una? Porfavor le estaria muy agradecido si me responde
Hola Alvaro, ¿cómo estás? Desconozco de la operatoria que me estás comentando, pero asumo que sí puedes hacerlo sin ningún problema. Tendrías que tener los datos a ingresar en la transacción en cuestión en un Excel y luego desde el script, manipularlos para colocarlos donde los desees. Puedes personalizar las ejecuciones a tu gusto para adaptarlas a tus requisitos. Saludos.
Muchisimas gracias por la Info. Muy buenos los videos. Tengo una consulta puntual : ¿ Explicas en alguno de ellos como hacer para modificar antes de cada ejecucion del script las fechas de inicio y final que desee utilizar como filtro?
Muchas gracias por tu comentario Giuliano. No, no tengo un video explicando exactamente esa variante, pero es muy sencillo. Deberías grabar el/los campos que querés cambiar y luego, en el script, adecuarlos al valor que vos desees según tus necesidades. Saludos.
@@alefranzoni Ale, con respecto a la consulta del colega, hay alguna forma de automatizar el año presente con fecha de hoy y dos meses atrás?. Saludos desde Valparaíso en Chile.
@@juanruzchamorro4196 Juan, que tal? Si, es muy sencillo de hacer eso en VBA, simplemente tenés que utilizar el siguiente código en lugar de la fecha que desees: Format(DateAdd("m", -2, Now), "dd.MM.yyyy") De esta manera, le pasamos Now (que es la fecha actual) a la función DateAdd y le indicamos con los parámetros "m" y -2 que le reste dos meses a la fecha actual. Y con Format lo que finalmente hace es, a esta fecha resultante pasarla a formato SAP (fecha con puntos de separador). Con eso ya estaría todo, Saludos.
Hola, yo también soy nuevo en tu canal, muy claras y prolijas tus explicaciones. Me asombra lo fácil de aprender de tu método. Mi consulta es como hacer una captura de pantalla de la ventana sap activa ya que se requiere para respaldo. Si ya lo respondiste te agradecería si fueses tan amable de redirijirme a la respuesta. Un abrazo desde Valparaíso en Chile.
Hola Juan Cruz, muchas gracias por tu comentario, me alegra mucho saber que les están sirviendo los videos y que se entiende lo que quiero trasmitirles. En cuanto a tu consulta, no tengo ningún video sobre ese tema, pero es relativamente sencillo hacerlo y justamente estoy preparando un tutorial. Estate atento al canal que en breve se viene dicho video. Saludos hacía Chile!
Hola Ale! Muchas gracias por tu aporte, es excelente. Actualmente estoy necesitando copiar la info con la que lleno los campos de la transacción MB1B a un excel con columnas. Cómo puedo hacer? Tenés algún tutorial? OTRA VEZ GRACIAS!
Muchas gracias por tu comentario. En cuanto a tu consulta, vos los que querés hacer es: *1.* Llenar la transacción con datos desde tu Excel *2.* Llenar tu Excel con los datos que ya completaste en la tx Comentame así te puedo dar una mano, Saludos.
La declaración de variables, en el caso que me consultas, de tipo Object, sirven para luego poder inicializar y guardar una referencia a un objeto en la misma y poder utilizarla en la ejecución del código para realizar las diversas tareas que necesitemos. Saludos.
Hola Guillermo, cómo estás? Muy fácil, fíjate que hay una línea en donde la fecha la ponemos manualmente, bueno reemplaza ese código por el necesario para obtener la fecha del día y listo. Si estás en *Excel* sería: Format(Now, "dd.MM.yyyy") Si estás en *VBS* sería: Day(Now) & "." & Month(Now) & "." & Year(Now) Saludos.
Al fin un tuto en Argentino jaja me re sirvió, pero en mi caso mi rango de datos de excel va de A2 hasta B30, y esos valores tengo que copiarlos y pegarlos en SAP. Cómo accederías al valor de cada columna dentro del For?
jaja, muchas gracias por tu comentario y me alegro mucho que te haya servido 🙌🏻. Para hacer lo que comentas es bastante sencillo, tendrías que recorrer tu rango en Excel y para cada uno de los valores, saber en qué posición del contenedor en SAP ir insertandolos. Lo que es un poco más complejo quizá es saber en qué índice arrancarías a pegar el contenido de Excel en sap, pero para eso tengo varios videos en mi canal sobre recorrer contenedores y podrías apoyarte en los mismos para resolver esa parte. Dicho esto, supongamos que tenés una tabla en sap y el índice donde vas a empezar a pegar los valores es el 5 y tu rango en Excel es A1:A10, entonces, tendrías que hacer algo así: private sub Example() Dim r as range, c as range Dim i as Integer ' Indice donde comenzaremos a insertar los datos en sap ' En este caso, como es un ejemplo, lo pongo a mano, pero tendrás que obtenerlo con algún método i = 5 ' Seteamos el rango de Excel a recorrer Set r = Sheets(1).Range("A1:A10") ' Recorremos y vamos insertando valores en sap For Each c in r session.findById("wnd[0]/containerExample/txtControlExample[" & CInt(i) & ",1]").Text = c.Value ' Vamos subiendo el indice objetivo de SAP i = i + 1 Next c end sub Es un ejemplo y claramente lo tendrás que adaptar a lo que necesites. Saludos.
@@alefranzoni mil gracias, voy a probar el método que decis, si bien algo similar había podido hacer (salvo lo que mencionas de Clint para el iterador), solo se me pega el primer valor y luego no avanza. Quizás tenga que ver con lo que mencionas de líndice.
Seguramente sea por eso o también la conversión explícita a entero del índice (función CInt) ya que SAP muchas veces pide esa conversión, por más que ya le estemos pasando una variable de ese tipo. Éxitos Lucas!
Hola Ale, muchas gracias por este excelente video. Quiero preguntarte, ¿cuántas filas es posible copiar y pegar en Excel utilizando este método?, ya que estoy intentado copiar cerca de 1000 filas de la transacción MB51 pero el script solo trae 121 filas.
Hola Camilo, ¿cómo estás? Puedes traer tantas filas como desees, no hay ningún tipo de restricción. Pero, por lo que me comentas, lo que debe estar pasando es que al ser una lista tan larga, vas a necesitar hacer scroll e ir iterando entre el listado para poder traer todos y no solo los 121, que seguramente sean los primeros visibles y por eso “solo te está trayendo estos”. Saludos.
Hola Carlos, se puede, pero hay que ingeniárselas un poco. ¿Por qué? Porque si lanzamos un script, como sabrás, el código se quedará "esperando" que termine la ejecución para continuar con lo siguiente. Entonces, para poder lanzar códigos en paralelo, tendríamos que crear una especie de "launcher" que se encargue de manejar las sesiones y lanzar los scripts independientes en su sesión correspondiente. Esto lo puedes hacer desde VBS o VBA. Si interesa, podría anotármelo para hacer un video sobre eso y traerlo al canal. Saludos.
Increíble el contenido y la calidad de la explicación. Pregunta técnica: Si al trabajar dentro de una transacción tengo una tabla con muchas filas, ¿Cómo se programaría para indicar que seleccione una fila particular, la cual no siempre estaría en la misma posición?
¡Muchas gracias por tu comentario! Sobre tu consulta, lo mejor que podrías hacer es recorrer tu tabla/contenedor (por lo general son objetos GuiGridView) e ir comprobando por cada iteración algún valor de referencia (por ejemplo, un texto que contenga la fila) para poder saber cuando estás parado sobre la fila deseada y, así, poder seleccionarla y realizar las acciones que necesites. Si no sabes como hacer esto o tenés alguna duda, no te preocupes, porque el próximo video (que voy a estar publicando en estos días) trata exactamente sobre eso; como recorrer y obtener los valores de un listado o contenedor. Saludos!
Hola que tal , donde ubico en mi maquina ese programa de editor? donde ves lo hecho en el script del sap?, ademas tendras un video de scripts donde explique como poner datos de excel a SAP de forma automatizada?? me comentas porfa que este video es bueno pero explica otro tema que estoy buscando
No tengo un video que diga específicamente "pasar datos de Excel a SAP", pero si podés mirar la lista de reproducción que tenga creada de SAP Scripting que ahí tengo todos los videos que hablo sobre este tema y vas a poder encontrar la información que me estás comentando, ya que lo hago en reiteradas ocasiones 😉. Básicamente, lo que necesitas es grabar un script escribiendo en el campo que querés rellenar desde tu Excel y luego, cambiar lo que escribiste a mano por el contenido del Excel que desees. Saludos!
@alefranzoni si basicamente eso, he estado viendo tus videos pero solo hay ejemplos de script del mismo y otro donde haces lo opuesto que yo quiero, porque hago mi script con el.excel, luego le agrego los codigos de la conexion de sap a excel que son los mismos para todos creo, y cambio los nobres de los codigos de excel por el nombre de hoja1 A , y asi en oos campos que voy a cambiar la info, pero al finalizar me sale que los datos agregados son erroneos
En este video ruclips.net/video/MU4Yye5BfDM/видео.html si te fijas en el último tramo, lo que hago es modificar un texto de SAP desde Excel, con eso te puede servir para lo que quieres hacer. Saludos.
Hola, soy nuevo en el canal. Sap tiene la transaacion ME80FN, desde donde se saca la OT (Orden de Traslado) y OC (Orden de Compra), lo busco colocando el centro en 2 lugares distintos, uno para OT y otro pa OC, mas el rango de fecha que quiero. Se puede extraer esa data con este tipo de scrip y guardarlo sea en formato TXT o EXCEL?
Hola Joan, bienvenido al canal! Sí, seguramente se pueda. Si la transacción te devuelve un listado con la OT/OC, vas a poder guardarlo. Te invito a que mires este video que te puede ser de mucha ayuda para tu caso: ruclips.net/video/86HYlK_r4R8/видео.html. De lo contrario, avisame que podría mirar en cuanto pueda la transacción y ver que se puede hacer. Saludos.
Hola Ale! Mucho gusto! Muy interesante tus videos! Gracias por compartir tanta info! Quisiera preguntarte si hay posibilidad de programar un script para que se ejecute diariamente cada 10 minutos por ejemplo. Es un script sencillo, que no se vincula a Excel ni nada por el estilo. Solo entra a una transacción, ejecuta un par de pasos y listo. Quedo atenta a tus comentarios. Desde ya muchas gracias!
Hola Melina, muchas gracias por tu comentario, un gusto compartir esta info con ustedes. En cuanto a tu consulta, si, es posible. Si solo es un script sencillo, podés guardar el archivo *.vbs y mediante el Programador de tareas de Windows, programar para que se ejecute con la frecuencia que desees y listo, es muy sencillo. Cualquier consulta, me avisas. Saludos.
Hola, muchas gracias por compartir tu conocimiento, muy valioso en verdad. Queria preguntarte algo referente a este código, vi que declaraste las variables "r" y "c" de tipo rango, pero solo fue seteada la "r". Por que no seteaste la "c" y como es que te funciono sin setearla? De atemano gracias. Prospero 2023!
Hola, muchas gracias por tu comentario. En cuanto a lo que me consultas, te explico. Si te fijas, la variable *c* la estamos usando en el bucle *For Each* para recorrer la colección r, que en este caso, es un listado de rangos. Si observamos la sintaxis de dicho bucle es: *For Each* _element_ *In* _group_ Donde _element_ es una variable se utiliza para recorrer los elementos de la colección dada, como te comente, en este caso, es un grupo de rangos, por lo tanto, para recorrer cada valor necesitamos que la variable sea de este tipo. En consecuencia, en cada iteración lo que va haciendo internamente es asignar el valor actual del rango que está siendo recorrido a la variable *c* para que podamos manipularlo de la forma deseada. Es por esto que funciona sin "declarar o inicializar" la variable *c* previamente. Espero que se haya entendido un poco mejor y cualquier inquietud no dudes en preguntar, Saludos y feliz año.
@@alefranzoni muchisimas gracias, te entendi perfectamente. Tienes algun sitio web o brindas asesorias personalizadas. Creo que valdria mucho la pena pagar alguna asesoria o clases por tu conocimiento. Saludos
@@lycanprosociety790 Excelente, me alegro 🙌. Mira, no tengo nada formal por el momento, pero si estás interesado en alguna clase/asesoría personalizada podemos charlar por correo o LinkedIn, lo que te quede más cómodo, y coordinar para armar algo sin problemas. Mi correo y redes los podés encontrar en mi web o en la descripción de cualquier video de mi canal. Saludos.
Excelente video Ale, te hago una consulta, cuando copio el scrip de SAP en la macro de excel y lo ejecuto, me da el error en la linea dos que dice Set Application = SapGuiAuto.GetScriptingEngine, el error que me arroja es "error de compilacion: el uso de la propiedad no es valido" sabes como puedo solucionarlo para correr el script de manera exitosa?
Gracias Dario por tu comentario. En cuanto a tu consulta, sí, es porque como podrás observar en el video para llevar un script a Excel hay que hacer unos pequeños cambios. Uno de ellos es que no podés usar ni setear una variable con el nombre Application, porque es una palabra reservada dentro del entorno de VBA. Cambia dicho nombre por app, por ejemplo, o cualquiera de tu gusto y en los lugares donde estés haciendo referencia a la misma, también coloca el nuevo nombre app (o el que hayas elegido colocarle). Saludos.
Disculpa me faltó algo, la captura de pantalla es a través de sap y poder guardarla en un excel, que es el archivo que recoge los datos desde Sap. Gracias por tu ayuda.
Hola Ale, buenas tardes, este vídeo me a sido de mucha utilidad, sin embargo, debo llevarlo al siguiente nivel y no se como hacerlo, me puedes ayudar???... Te explico lo que quiero hacer: Yo exporte un reporte de la CR05 (Los puestos de trabajos en los centros de trabajo), entonces voy recorriendo cada puesto de trabajo pero cuando debo de cambiar el valor del centro no se como hacerlo, es decir, el valor for each debe incluir el valor del puesto de trabajo + el centro donde esta ese puesto de trabajo y por ultimo y no menos importante en este video dices que el rango puede ser dinámico, como se puede hacer en ese caso. Gracias por tus aportes
Hola David, cómo estás? Te hago una consulta para ver si entendí bien, ¿el valor del centro que necesitas también está en el reporte (CR05) que exportas? ¿Necesitas ingresarlo, luego, dentro de SAP? Por otro lado, para hacer un rango dinámico y no dejarlo “fijo” o “hardcodeado” tienes varias maneras de hacerlo, pero la más cómoda es adaptar el rango desde el principio hasta la última fila con valor. Para que lo entiendas mejor, te lo voy a explicar con un ejemplo. Supongamos que vos querés hacer un rango dinámico de la columna A (o columna 1), es decir, desde el primer valor hasta el último de dicha columna. Entonces setearias el objeto rango de la siguiente manera: Dim r as Range Set r = Sheets("Hoja1").Range("A1:A" & Sheets("Hoja1").Cells(Rows.Count, 1).End(XlUp).Row) Donde *_Sheets("Hoja1").Cells(Rows.Count, 1).End(XlUp).Row_* es la parte del código que te devuelve la última fila con valor de la columna 1 o A. (También recordá cambiar _Hoja1_ por el nombre de tu hoja) Cualquier cosa no dudes en consultarme, Saludos.
@@alefranzoni Hola Ale, gracias por responder y apoyarme. Con respecto a tu pregunta: SI, del reporte de la CR05, necesito luego ir a la CA80, para poder introducir el puesto de trabajo y el centro asociado. Yo lo puedo hacer por parte es decir, una corrida por centro pero quiero saber SÍ es posible hacerlo colocando ambos datos en el bucle "for each"; con respecto al rango dinámico voy a escribirlo y probar👍
@@davidnatera8923 Hola David, cómo estás? No estoy seguro de entender al 100% el flujo que querés lograr y sumado a no conocer las transacciones que me nombras se me complica un poco más imaginármelo. Pero bien, si del reporte CR05 ya obtenés todos los datos que necesitas tranquilamente, lo podés hacer. Solo tendrías a la vez que vas recorriendo el rango para los puestos, copiar también el centro de trabajo (que asumo por lo que me comentas que está presente en cada fila que estás recorriendo, pero en otra columna) y pasárselo a la transacción de ser necesario. Con hacer eso para cada iteración dentro del bucle *For Each* ya estaría. Sí es así, para obtener otro dato de la misma fila que estás iterando dentro del bucle For Each, podés utilizar la propiedad *Next* del objeto Range. Es decir, supongamos que en la fila A1 tenés el puesto, en la B1 otro dato y en la C1 el centro, entonces para obtener B o C sería así: For Each cell in Range 'Obtener el valor de cell e imprimirlo en ventana de inmediato Debug.Print(cell) 'Obtener el valor de B1 e imprimirlo en ventana de inmediato Debug.Print(cell.Next(1,1)) 'Obtener el valor de C1 e imprimirlo en ventana de inmediato Debug.Print(cell.Next(1,2)) Next cell Obviamente en el ejemplo de arriba puse B1 y C1, pero seria B y C de la fila que el bucle esté iterando. Esto también siempre y cuando estes iterando sobre los datos en Excel (ya exportados), si lo que queres hacer es obtener el valor del centro directamente del listado de SAP vas a tener que llamar a la columna correspondiente y hacer lo que tengas que hacer. Cualquier consulta avisame, Saludos.
estimado una consulta, como puedo exporta una hoja de excel y guardarlo automaticamente, tengo la transacción mcp6 que al exportar me abre una hoja de excel pero se debe guardar manualmente o si no se borra, gracias.
Hola Ramiro, cómo estás? Te comento que tengo un video en el canal en el cual explico en detalle como hacer lo que me estas consultando. Te dejo el link acá: ruclips.net/video/86HYlK_r4R8/видео.html Cualquier cosa no dudes en consultarme. Saludos!
@@alefranzoni estimado el problema que tengo es cuando exporto y se me abre una tabla en Excel de nombre HOJA DE CALCULO EN BASIS (1), esa es la que necesito por que el método que explicaste es para guardar como fichero y yo necesito exportar. Gracias estimado amigo.
@@ramirocareaga6692 Perfecto, entonces si ninguna de las funciones de guardado te sirven, lo que puedes hacer es automatizar el proceso hasta que presionas el botón de exportar. Este script llevarlo a un Excel para poder ejecutarlo desde el mismo y luego de eso, cuando finalice la exportación automática, desde código VBA puedes buscar por el libro en cuestión abierto y guardarlo en el lugar y con el nombre que quieras 😉.
Duda mi script si me abre la pantalla para grabar, y cuando lo detengo se crea el script, pero al momento de iniciar la grabación no me deja manipular sap, como puedo solucionarlo?
Hola Jose, ¿cómo estás? Que raro lo que me comentas, nunca me paso lo que me estas diciendo. ¿Qué versión de SAP GUI tenes? ¿Probaste reiniciando y conectándote a diferentes entornos? Saludos.
Hola Ale, me surgió un comentario que estoy tratando de replicar, ya que deseo copiar el nombre de un cliente en un pedido en va03 pero no obtengo el script para copiar el nombre, me podrías apoyar con esta duda por favor
Hola Modesto, cómo estás? Te voy a pedir que me envíes un correo (lo podés encontrar en la sección de información de mi canal o en mi sitio web) con una captura de lo que estás viendo en dicha transacción para poder ayudarte, ya que en mi entorno de pruebas no cuento con datos para poder visualizarlo hoy en día. Saludos.
Hola Ale. Muchas gracias por tu video. Tengo una consulta para hacerte si podes ayudarme.. Quiero realizar un script con una transacción de SAP para ver documentos posteados (fb03). Según el tipo de documento posteado, la transacción me permite utilizar un layout para visualizar los datos del documento. Es decir, entro con un documento y puedo elegir un layout, entro con otro distinto y ni siquiera aparece la opción en la barra. Cómo podría hacer para que logre que elija un layout determinado para aquellos documentos que permiten la opción? Yo quiero algo como “si tal session find by id está disponible en sap, hacé esto y si no está.. seguí con esto otro”. Como se hace para decir que un session by id blabla no está disponible? Me ayudaría mucho tu guía. Muchas gracias
Hola Bárbara, como estas? Para realizar lo que me comentas es muy sencillo, primero tenes que identificar el nombre del botón que querés chequear (lo podes hacer muy fácil con una grabación), luego tenes que comprobar la existencia del mismo con *session.FindById(objeto, False) Is Nothing* que te va a devolver True si no existe y por el contrario, False si esta disponible y con eso ya podrías hacer lo que consultas. Pará darte un ejemplo y que quede bien claro, supongamos que el botón se identifica como *btn[1]* entonces la lógica para presionarlo, solo si existe, sería: If Not session.FindById("wnd[0]/btn[1] ", False) Is Nothing Then session.FindById("wnd[0]/btn[1] ").press Listo! Espero que te sirva y cualquier duda me consultas. Saludos.
@@alefranzoni que genio Ale, muchas gracias por responder!!! El nombre del botón es este: session.findById("wnd[0]/tbar[1]/btn[33]" Intenté replicar lo que me mostraste de la siguiente forma: If Not session.findById("wnd[0]/tbar[1]/btn[33]", False) Is Nothing Then session.findById("wnd[0]/tbar[1]/btn[33]").press session.findById("wnd[1]/tbar[0]/btn[71]").press session.findById("wnd[2]/usr/txtGS_SEARCH-VALUE").Text = "/PINKSENVE" session.findById("wnd[2]/tbar[0]/btn[0]").press session.findById("wnd[2]/tbar[0]/btn[12]").press session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").selectedRows = "1020" session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").clickCurrentCell Else … Funciona con los documentos en los cuales está la opción, pero no con los documentos donde no está. En esos casos a mi me gustaría que lea la primera sentencia y se dé cuenta que como no aplica, vaya al Else. Pero no estaría sucediendo. Sabes por qué puede ser y como puedo solucionarlo?
@@barbaraacunasiviero9908 Bien, seguramente este pasando eso porque la línea que comprueba por la existencia del botón da siempre “que existe” porque cuando no está el botón en cuestión, otro debe tomar la posición [33]. Por lo tanto, lo primero que te aconsejo hacer es verificar si esto es así, para eso podes simplemente imprimir un mensaje y ver que te arroja en ambos casos (tanto cuando está el correcto, como cuando no). result = Not session.findById("wnd[0]/tbar[1]/btn[33]", False) Is Nothing MsgBox result Si con lo anterior observas que siempre te arroja el mismo resultado es que está sucediendo lo que te comentaba. Para solucionarlo, deberías hacer alguna comprobación más. Lo que se me ocurre rápidamente es que podrías revisar el Tooltip del botón para corroborar que sea exactamente el que vos deseas. El _tooltip_ es el mensaje que aparece cuando posicionas el cursor por encima del botón, por lo tanto, fíjate que es lo que dice y puedes hacer lo siguiente: ❗Suponiendo que el Tooltip sobre el botón dice _«Cambiar layout»_ Dim result As Boolean, tooltip As String result = Not session.findById("wnd[0]/tbar[1]/btn[33]", False) Is Nothing If result Then tooltip = session.findById("wnd[0]/tbar[1]/btn[33]").Tooltip If tooltip Like "Cambiar layout*" Then doSomeActionWhenButtonIsCorrect session.findById("wnd[0]/tbar[1]/btn[33]").press ... Else doSomeActionWhenButtonIsIncorrect End If Else 'No se encontro el botón doSomeActionWhenButtonIsIncorrect End If Con esto ya deberías tener tu problema resuelto, confírmame si es así. Saludos.
@@alefranzoni buenas noches Ale. Aprecio mucho que me ayudes con esto. Tenías razón, en ambos casos el botón parece estar disponible ya que en ambos me dio como True el msgbox. Intenté replicar tu código para corregirlo con el tooltip del botón (select different display variant*) y me sale el siguiente error: Sub or function not defined Y me selecciona la línea de dosomeactionwhenbuttoniscorrect Puede ser que falta definir aparte los pasos para esa función? No quiero cagar el código. Bueno muchas gracias de nuevo. Saludos
@@barbaraacunasiviero9908 Claro, exactamente es eso. Está funcionando bien pero te está indicando que ese procedimiento no está definido. Podes borrar los _doSomeActionWhen..._ y reemplazarlos por lo que quieras hacer, tanto cuando lo encuentra, cómo cuando no. Cualquier cosa si tenés dudas de algo, avísame que te ayudo a resolverlo, pero ya ahora con colocar lo que desees hacer en cada caso debería funcionar bien. Saludos.
Hola Pablo, cómo estás? Te comento que lamentablemente la única posibilidad que tenés de poder hacerlo, es si lo que haces es conectarte a una máquina virtual (donde corres sap) y podes grabar y ejecutar el script desde la misma. Si no, desde tu máquina local no vas a poder.
Hola Luis, como estas? Vos te referís a procesar una transacción y luego, una vez finalizado el proceso, guardar/exportar el reporte generado en alguno de los formatos opcionales? Saludos!
Hola Pedro, te recomiendo que mires los demás videos del canal sobre SAP Scripting, hay varios que te pueden llegar a servir para lo que estás necesitando. Saludos.
Pueden ser diversas las causas por las que podría estar fallando. Por lo tanto, para poder ayudarte necesitaría más información, por ejemplo, que tipo de error le tira, si se llega a ejecutar parte del script o no, si tiene la misma versión de SAP GUI que tú, si estás seguro que su servidor tiene activado SAP Scripting, etc. Saludos.
Hola Shayuri, cómo estás? A que te referís específicamente con _"traer un rango de filas de Excel a SAP"_ ? Poneme un poco en contexto así te puedo dar una mejor respuesta. Saludos.
Hola amigo como vas, gracias por la info me sirvio mucho, pero quisiera saber como iniciar y logerame en SAP desde codigo VBA en excel, como se explica en este tutorial tuyo ruclips.net/video/cvDxz05Og6E/видео.html en realidad me seria de gran ayuda, debido a que en otros tutoriales explicar como ejecutar el script mas no como abrir y logerse desde el codigo en VBA, te agradezco la atencion, saludos desde Colombia.
Hola Derick, cómo estás? No hay problema, fijate que en este video que te voy a dejar a continuación ya está integrado en Excel la parte de loguearse: ruclips.net/video/YQq8wnDB2HU/видео.html. En el mismo vas a poder bajarte el archivo, ver como lo hice e integrarlo a tus proyectos. Saludos.
buenisimo, estoy tratando de usarlo con la trasaccion "zufsodvta005", pero no me toma la fecha session.findById("wnd[0]/usr/tabsPARAMETROS/tabpPARAMETROS_FC1/ssubPARAMETROS_SCA:ZSOD_SD00_R_TOTALVTAAMPL:0103/ctxtSO_FKDAT-LOW").Text = Worksheets("Hoja1").Range("A" & indice).Value session.findById("wnd[0]/usr/tabsPARAMETROS/tabpPARAMETROS_FC1/ssubPARAMETROS_SCA:ZSOD_SD00_R_TOTALVTAAMPL:0103/ctxtSO_FKDAT-HIGH").Text = Worksheets("Hoja1").Range("B" & indice).Value que estaria haciendo mal?
Hola Alexis, ¿cómo estás? Podrías fijarte, en primer lugar, poniendo los valores a mano, por ejemplo: session.findById("wnd[0]/usr/tabsPARAMETROS/tabpPARAMETROS_FC1/ssubPARAMETROS_SCA:ZSOD_SD00_R_TOTALVTAAMPL:0103/ctxtSO_FKDAT-LOW").Text = "01.03.22" session.findById("wnd[0]/usr/tabsPARAMETROS/tabpPARAMETROS_FC1/ssubPARAMETROS_SCA:ZSOD_SD00_R_TOTALVTAAMPL:0103/ctxtSO_FKDAT-HIGH").Text = "03.03.22" Con esto vas a estar validando si está funcionando bien el script y si lo que falla es el valor que le estás pasando. Si esto funciona, podés probar que el índice que le pasas sea correcto y además, el formato de la fecha, ya que SAP a veces molesta con el formato. Intenta usando la función *Replace* y reemplazando las “/” con puntos (.) en la fecha, así: session.findById("wnd[0]/usr/tabsPARAMETROS/tabpPARAMETROS_FC1/ssubPARAMETROS_SCA:ZSOD_SD00_R_TOTALVTAAMPL:0103/ctxtSO_FKDAT-LOW").Text = Replace(Worksheets("Hoja1").Range("A" & indice).Value, "/", ".") Saludos.
muy bueno, yo tengo un curso de scripting en udemy, pero está explicado a grandes rasgos, me gustó tu vídeo, está my bien explicado, me parece genial
Me alegro de que te haya gustado y gracias por tus comentarios!
Espectacular Ale, por trabajo estoy muy interesado en el SAP Scripting y me cuesta mucho encontrar recursos de calidad por la web, por suerte, con tus videos, estoy aprendiendo muchísimo. Muchas gracias.
Hola Feraldi, me alegro mucho de lo que me comentas. Tal cual, hay muy poca información sobre estos temas, así que desde mi lugar un gusto aportar mi granito de arena. Pronto ya vendrá mucho más contenido super interesante. Saludos.
@@alefranzoni Grandísimas noticias Ale, mil gracias.
Es un Maestro !! 👏👏👏
Hola Ale, felicidades por los videos y gracias por compartir tus conocimientos.
Hola Juli, es un placer compartir este contenido con ustedes y que puedan disfrutarlo. ¡Muchas gracias por tu comentario!
Que capo! saludos desde Perú!
Saludos!
Muchas Gracias!!!!! te felicito por tu contenido!!!!
lo mejor del 2022 !!!!!!!
¡Muchas gracias por tu comentario Felipe! Me alegro que te esté gustando el contenido, próximamente se viene mucho más. 🙌🏻
Tu canal me encanto y me sirvió de mucho, nuevo suscriptor, estare pendiente de tu contenido
¡Muchas gracias por el apoyo! Muy pronto volveré a subir más contenido, te mando un saludo.
Hola Ale, muchísimas gracias! Me sirve bastante! Eternamente agradecido por tu aporte! Slds
Hola Maxi, muchísimas gracias a vos por tu comentario, se aprecia mucho. Desde acá encantado y un gusto poder compartir estos temas con ustedes.
Saludos.
Excelente video y excelente explicación, muchas gracias Ale... saludos!
Muchas gracias por tu comentario Charlyfu!
Hola Ale, me apunto para tu canal , me ha servido mucho para módulo PM , estamos atentos Gracias 🙏
Muchas gracias Marco por tu comentario y por apoyarme, es lo que me motiva a seguir creando contenido para ustedes y me alegro que les pueda ser de ayuda. Nuevamente gracias y si, atentos porque próximamente se viene mucho más contenido!
Muy completo. Excelente
Excelente video!! ya me inscribi!! mucho exito!!
Muchas gracias por tu comentario!
Hola Ale, me ha conmovido que respondas tan bien cada uno de los comentarios, no cualquiera hace eso, estoy agradecido por ello, además soy nuevo suscriptor. Tengo una consulta, *¿Sabes si existe alguna restricción por parte de SAP en el uso de esta herramienta?**¿Existe documentación de SAP que especifíque que se puede utilizar el script en una Macro?* Me sería muy útil tu respuesta porque tengo ya muchas automatizaciones pero quiero estar seguro de que todo irá bien y sin problemas antes de desplegarlas.
Muchas gracias por tu comentario y por suscribirte, me ayuda muchísimo. La verdad que trato en la medida de lo posible y cuando tengo un ratito libre de ir contestándoles a todos y tratando de ayudarles.
Ahora sí, en cuanto a tu consulta; no hay ningún tipo de restricción de parte de SAP por utilizar esta herramienta, dado que es una función *legacy* de SAP, es decir, que ya viene incluida por la misma empresa. Por lo tanto, no te preocupes que no vas a tener ningún inconveniente. En cuanto a la documentación, no hay una que diga específicamente "se puede usar con tal o cual cosa" pero sí hay una oficial, la cual siguen teniendo y manteniendo actualizada a día de hoy, donde ellos explican el uso de cada uno de los objetos y demás, con lo cual respalda su uso. Te dejo el link: bit.ly/ScriptingDocumentation.
Cualquier consulta estoy a disposición, a seguir automatizando!
Saludos.
Show, mais um video top de muito aprendizado!
Muito obrigado!
Hola buenas tardes muy buen video una consulta en el sap mm se puede hacer ordenes de compras de manera masiva jalando solpeds y otros datos de una tabla excel? Porque en donde trabajo son varias solped y es dificil trabajarlas una por una? Porfavor le estaria muy agradecido si me responde
Hola Alvaro, ¿cómo estás? Desconozco de la operatoria que me estás comentando, pero asumo que sí puedes hacerlo sin ningún problema. Tendrías que tener los datos a ingresar en la transacción en cuestión en un Excel y luego desde el script, manipularlos para colocarlos donde los desees. Puedes personalizar las ejecuciones a tu gusto para adaptarlas a tus requisitos.
Saludos.
Muchisimas gracias por la Info. Muy buenos los videos. Tengo una consulta puntual : ¿ Explicas en alguno de ellos como hacer para modificar antes de cada ejecucion del script las fechas de inicio y final que desee utilizar como filtro?
Muchas gracias por tu comentario Giuliano. No, no tengo un video explicando exactamente esa variante, pero es muy sencillo. Deberías grabar el/los campos que querés cambiar y luego, en el script, adecuarlos al valor que vos desees según tus necesidades. Saludos.
@@alefranzoni Ale, con respecto a la consulta del colega, hay alguna forma de automatizar el año presente con fecha de hoy y dos meses atrás?. Saludos desde Valparaíso en Chile.
@@juanruzchamorro4196 Juan, que tal? Si, es muy sencillo de hacer eso en VBA, simplemente tenés que utilizar el siguiente código en lugar de la fecha que desees:
Format(DateAdd("m", -2, Now), "dd.MM.yyyy")
De esta manera, le pasamos Now (que es la fecha actual) a la función DateAdd y le indicamos con los parámetros "m" y -2 que le reste dos meses a la fecha actual. Y con Format lo que finalmente hace es, a esta fecha resultante pasarla a formato SAP (fecha con puntos de separador).
Con eso ya estaría todo,
Saludos.
Hola, yo también soy nuevo en tu canal, muy claras y prolijas tus explicaciones. Me asombra lo fácil de aprender de tu método. Mi consulta es como hacer una captura de pantalla de la ventana sap activa ya que se requiere para respaldo. Si ya lo respondiste te agradecería si fueses tan amable de redirijirme a la respuesta. Un abrazo desde Valparaíso en Chile.
Hola Juan Cruz, muchas gracias por tu comentario, me alegra mucho saber que les están sirviendo los videos y que se entiende lo que quiero trasmitirles. En cuanto a tu consulta, no tengo ningún video sobre ese tema, pero es relativamente sencillo hacerlo y justamente estoy preparando un tutorial. Estate atento al canal que en breve se viene dicho video. Saludos hacía Chile!
@@alefranzoni gracias por todo lo que entregas, pero soy Juan Ruz. Saludos y abrazos desde Valparaíso en Chile.
Jaja perdón Juan, leí rápido y me equivoqué 😅. Saludos.
Hola Ale! Muchas gracias por tu aporte, es excelente. Actualmente estoy necesitando copiar la info con la que lleno los campos de la transacción MB1B a un excel con columnas. Cómo puedo hacer? Tenés algún tutorial? OTRA VEZ GRACIAS!
Muchas gracias por tu comentario. En cuanto a tu consulta, vos los que querés hacer es:
*1.* Llenar la transacción con datos desde tu Excel
*2.* Llenar tu Excel con los datos que ya completaste en la tx
Comentame así te puedo dar una mano,
Saludos.
Alejandro eso que haces declarar variable tipo objeto para que serviria, perdon la pregunta pero voy entiendo de a poco. Saludos y gracias
La declaración de variables, en el caso que me consultas, de tipo Object, sirven para luego poder inicializar y guardar una referencia a un objeto en la misma y poder utilizarla en la ejecución del código para realizar las diversas tareas que necesitemos.
Saludos.
muy bueno! oye bro como modifico el scrip para que cada vez que lo ejecute actualice la fecha del dia que bajo el reporte
Hola Guillermo, cómo estás? Muy fácil, fíjate que hay una línea en donde la fecha la ponemos manualmente, bueno reemplaza ese código por el necesario para obtener la fecha del día y listo.
Si estás en *Excel* sería: Format(Now, "dd.MM.yyyy")
Si estás en *VBS* sería: Day(Now) & "." & Month(Now) & "." & Year(Now)
Saludos.
esto es oro! 🌋
¡Muchas gracias!
Al fin un tuto en Argentino jaja me re sirvió, pero en mi caso mi rango de datos de excel va de A2 hasta B30, y esos valores tengo que copiarlos y pegarlos en SAP. Cómo accederías al valor de cada columna dentro del For?
jaja, muchas gracias por tu comentario y me alegro mucho que te haya servido 🙌🏻. Para hacer lo que comentas es bastante sencillo, tendrías que recorrer tu rango en Excel y para cada uno de los valores, saber en qué posición del contenedor en SAP ir insertandolos. Lo que es un poco más complejo quizá es saber en qué índice arrancarías a pegar el contenido de Excel en sap, pero para eso tengo varios videos en mi canal sobre recorrer contenedores y podrías apoyarte en los mismos para resolver esa parte.
Dicho esto, supongamos que tenés una tabla en sap y el índice donde vas a empezar a pegar los valores es el 5 y tu rango en Excel es A1:A10, entonces, tendrías que hacer algo así:
private sub Example()
Dim r as range, c as range
Dim i as Integer
' Indice donde comenzaremos a insertar los datos en sap
' En este caso, como es un ejemplo, lo pongo a mano, pero tendrás que obtenerlo con algún método
i = 5
' Seteamos el rango de Excel a recorrer
Set r = Sheets(1).Range("A1:A10")
' Recorremos y vamos insertando valores en sap
For Each c in r
session.findById("wnd[0]/containerExample/txtControlExample[" & CInt(i) & ",1]").Text = c.Value
' Vamos subiendo el indice objetivo de SAP
i = i + 1
Next c
end sub
Es un ejemplo y claramente lo tendrás que adaptar a lo que necesites.
Saludos.
@@alefranzoni mil gracias, voy a probar el método que decis, si bien algo similar había podido hacer (salvo lo que mencionas de Clint para el iterador), solo se me pega el primer valor y luego no avanza. Quizás tenga que ver con lo que mencionas de líndice.
Seguramente sea por eso o también la conversión explícita a entero del índice (función CInt) ya que SAP muchas veces pide esa conversión, por más que ya le estemos pasando una variable de ese tipo. Éxitos Lucas!
Hola Ale, muchas gracias por este excelente video. Quiero preguntarte, ¿cuántas filas es posible copiar y pegar en Excel utilizando este método?, ya que estoy intentado copiar cerca de 1000 filas de la transacción MB51 pero el script solo trae 121 filas.
Hola Camilo, ¿cómo estás? Puedes traer tantas filas como desees, no hay ningún tipo de restricción. Pero, por lo que me comentas, lo que debe estar pasando es que al ser una lista tan larga, vas a necesitar hacer scroll e ir iterando entre el listado para poder traer todos y no solo los 121, que seguramente sean los primeros visibles y por eso “solo te está trayendo estos”. Saludos.
excelente video
Hola Ale , es posible ejecutar un scrip que ejecute dos transacciones en paralelo (2 ventanas de sap ) ?
Hola Carlos, se puede, pero hay que ingeniárselas un poco. ¿Por qué? Porque si lanzamos un script, como sabrás, el código se quedará "esperando" que termine la ejecución para continuar con lo siguiente. Entonces, para poder lanzar códigos en paralelo, tendríamos que crear una especie de "launcher" que se encargue de manejar las sesiones y lanzar los scripts independientes en su sesión correspondiente. Esto lo puedes hacer desde VBS o VBA. Si interesa, podría anotármelo para hacer un video sobre eso y traerlo al canal.
Saludos.
espectacular, una duda, cómo hago para que desde excel me abra la aplicacion de sap?
Lo explico en otro de mis videos, te lo dejo por acá: ruclips.net/video/cvDxz05Og6E/видео.htmlsi=Xtnrxd0Sq-zso0r1
Increíble el contenido y la calidad de la explicación.
Pregunta técnica:
Si al trabajar dentro de una transacción tengo una tabla con muchas filas, ¿Cómo se programaría para indicar que seleccione una fila particular, la cual no siempre estaría en la misma posición?
¡Muchas gracias por tu comentario!
Sobre tu consulta, lo mejor que podrías hacer es recorrer tu tabla/contenedor (por lo general son objetos GuiGridView) e ir comprobando por cada iteración algún valor de referencia (por ejemplo, un texto que contenga la fila) para poder saber cuando estás parado sobre la fila deseada y, así, poder seleccionarla y realizar las acciones que necesites.
Si no sabes como hacer esto o tenés alguna duda, no te preocupes, porque el próximo video (que voy a estar publicando en estos días) trata exactamente sobre eso; como recorrer y obtener los valores de un listado o contenedor.
Saludos!
Hola que tal , donde ubico en mi maquina ese programa de editor? donde ves lo hecho en el script del sap?, ademas tendras un video de scripts donde explique como poner datos de excel a SAP de forma automatizada?? me comentas porfa que este video es bueno pero explica otro tema que estoy buscando
No tengo un video que diga específicamente "pasar datos de Excel a SAP", pero si podés mirar la lista de reproducción que tenga creada de SAP Scripting que ahí tengo todos los videos que hablo sobre este tema y vas a poder encontrar la información que me estás comentando, ya que lo hago en reiteradas ocasiones 😉. Básicamente, lo que necesitas es grabar un script escribiendo en el campo que querés rellenar desde tu Excel y luego, cambiar lo que escribiste a mano por el contenido del Excel que desees. Saludos!
@alefranzoni si basicamente eso, he estado viendo tus videos pero solo hay ejemplos de script del mismo y otro donde haces lo opuesto que yo quiero, porque hago mi script con el.excel, luego le agrego los codigos de la conexion de sap a excel que son los mismos para todos creo, y cambio los nobres de los codigos de excel por el nombre de hoja1 A , y asi en oos campos que voy a cambiar la info, pero al finalizar me sale que los datos agregados son erroneos
En este video ruclips.net/video/MU4Yye5BfDM/видео.html si te fijas en el último tramo, lo que hago es modificar un texto de SAP desde Excel, con eso te puede servir para lo que quieres hacer. Saludos.
@@alefranzoni gracias por la info
Hola, soy nuevo en el canal. Sap tiene la transaacion ME80FN, desde donde se saca la OT (Orden de Traslado) y OC (Orden de Compra), lo busco colocando el centro en 2 lugares distintos, uno para OT y otro pa OC, mas el rango de fecha que quiero. Se puede extraer esa data con este tipo de scrip y guardarlo sea en formato TXT o EXCEL?
Hola Joan, bienvenido al canal! Sí, seguramente se pueda. Si la transacción te devuelve un listado con la OT/OC, vas a poder guardarlo. Te invito a que mires este video que te puede ser de mucha ayuda para tu caso: ruclips.net/video/86HYlK_r4R8/видео.html. De lo contrario, avisame que podría mirar en cuanto pueda la transacción y ver que se puede hacer.
Saludos.
Hola Ale! Mucho gusto! Muy interesante tus videos! Gracias por compartir tanta info! Quisiera preguntarte si hay posibilidad de programar un script para que se ejecute diariamente cada 10 minutos por ejemplo. Es un script sencillo, que no se vincula a Excel ni nada por el estilo. Solo entra a una transacción, ejecuta un par de pasos y listo. Quedo atenta a tus comentarios. Desde ya muchas gracias!
Hola Melina, muchas gracias por tu comentario, un gusto compartir esta info con ustedes. En cuanto a tu consulta, si, es posible. Si solo es un script sencillo, podés guardar el archivo *.vbs y mediante el Programador de tareas de Windows, programar para que se ejecute con la frecuencia que desees y listo, es muy sencillo. Cualquier consulta, me avisas.
Saludos.
Hola, muchas gracias por compartir tu conocimiento, muy valioso en verdad.
Queria preguntarte algo referente a este código, vi que declaraste las variables "r" y "c" de tipo rango, pero solo fue seteada la "r".
Por que no seteaste la "c" y como es que te funciono sin setearla?
De atemano gracias.
Prospero 2023!
Hola, muchas gracias por tu comentario. En cuanto a lo que me consultas, te explico. Si te fijas, la variable *c* la estamos usando en el bucle *For Each* para recorrer la colección r, que en este caso, es un listado de rangos.
Si observamos la sintaxis de dicho bucle es:
*For Each* _element_ *In* _group_
Donde _element_ es una variable se utiliza para recorrer los elementos de la colección dada, como te comente, en este caso, es un grupo de rangos, por lo tanto, para recorrer cada valor necesitamos que la variable sea de este tipo. En consecuencia, en cada iteración lo que va haciendo internamente es asignar el valor actual del rango que está siendo recorrido a la variable *c* para que podamos manipularlo de la forma deseada. Es por esto que funciona sin "declarar o inicializar" la variable *c* previamente.
Espero que se haya entendido un poco mejor y cualquier inquietud no dudes en preguntar,
Saludos y feliz año.
@@alefranzoni muchisimas gracias, te entendi perfectamente.
Tienes algun sitio web o brindas asesorias personalizadas. Creo que valdria mucho la pena pagar alguna asesoria o clases por tu conocimiento.
Saludos
@@lycanprosociety790 Excelente, me alegro 🙌. Mira, no tengo nada formal por el momento, pero si estás interesado en alguna clase/asesoría personalizada podemos charlar por correo o LinkedIn, lo que te quede más cómodo, y coordinar para armar algo sin problemas. Mi correo y redes los podés encontrar en mi web o en la descripción de cualquier video de mi canal.
Saludos.
@@alefranzoni 🌟🌟🌟🌟🌟
Capo, excelente
Muchas gracias por tu comentario Dante! Saludos.
Excelente video Ale, te hago una consulta, cuando copio el scrip de SAP en la macro de excel y lo ejecuto, me da el error en la linea dos que dice Set Application = SapGuiAuto.GetScriptingEngine, el error que me arroja es "error de compilacion: el uso de la propiedad no es valido" sabes como puedo solucionarlo para correr el script de manera exitosa?
Gracias Dario por tu comentario. En cuanto a tu consulta, sí, es porque como podrás observar en el video para llevar un script a Excel hay que hacer unos pequeños cambios. Uno de ellos es que no podés usar ni setear una variable con el nombre Application, porque es una palabra reservada dentro del entorno de VBA. Cambia dicho nombre por app, por ejemplo, o cualquiera de tu gusto y en los lugares donde estés haciendo referencia a la misma, también coloca el nuevo nombre app (o el que hayas elegido colocarle). Saludos.
Disculpa me faltó algo, la captura de pantalla es a través de sap y poder guardarla en un excel, que es el archivo que recoge los datos desde Sap. Gracias por tu ayuda.
Ya se viene el tutorial sobre este tema 🙌🏻
@@alefranzonimuchas gracias por el contenido, realizaste este video? Es muy interesante lo que pregunta juan
Que pasa si quiero tomar dos variables para la busqueda ejemplo numero de orde y la localidad
No hay problema, sencillamente reemplazas la variable en el campo donde desees que se coloque y listo. Saludos.
Hola Ale, buenas tardes, este vídeo me a sido de mucha utilidad, sin embargo, debo llevarlo al siguiente nivel y no se como hacerlo, me puedes ayudar???... Te explico lo que quiero hacer: Yo exporte un reporte de la CR05 (Los puestos de trabajos en los centros de trabajo), entonces voy recorriendo cada puesto de trabajo pero cuando debo de cambiar el valor del centro no se como hacerlo, es decir, el valor for each debe incluir el valor del puesto de trabajo + el centro donde esta ese puesto de trabajo y por ultimo y no menos importante en este video dices que el rango puede ser dinámico, como se puede hacer en ese caso. Gracias por tus aportes
Hola David, cómo estás?
Te hago una consulta para ver si entendí bien, ¿el valor del centro que necesitas también está en el reporte (CR05) que exportas? ¿Necesitas ingresarlo, luego, dentro de SAP?
Por otro lado, para hacer un rango dinámico y no dejarlo “fijo” o “hardcodeado” tienes varias maneras de hacerlo, pero la más cómoda es adaptar el rango desde el principio hasta la última fila con valor. Para que lo entiendas mejor, te lo voy a explicar con un ejemplo.
Supongamos que vos querés hacer un rango dinámico de la columna A (o columna 1), es decir, desde el primer valor hasta el último de dicha columna. Entonces setearias el objeto rango de la siguiente manera:
Dim r as Range
Set r = Sheets("Hoja1").Range("A1:A" & Sheets("Hoja1").Cells(Rows.Count, 1).End(XlUp).Row)
Donde *_Sheets("Hoja1").Cells(Rows.Count, 1).End(XlUp).Row_* es la parte del código que te devuelve la última fila con valor de la columna 1 o A. (También recordá cambiar _Hoja1_ por el nombre de tu hoja)
Cualquier cosa no dudes en consultarme,
Saludos.
@@alefranzoni Hola Ale, gracias por responder y apoyarme. Con respecto a tu pregunta: SI, del reporte de la CR05, necesito luego ir a la CA80, para poder introducir el puesto de trabajo y el centro asociado. Yo lo puedo hacer por parte es decir, una corrida por centro pero quiero saber SÍ es posible hacerlo colocando ambos datos en el bucle "for each"; con respecto al rango dinámico voy a escribirlo y probar👍
@@davidnatera8923 Hola David, cómo estás? No estoy seguro de entender al 100% el flujo que querés lograr y sumado a no conocer las transacciones que me nombras se me complica un poco más imaginármelo. Pero bien, si del reporte CR05 ya obtenés todos los datos que necesitas tranquilamente, lo podés hacer.
Solo tendrías a la vez que vas recorriendo el rango para los puestos, copiar también el centro de trabajo (que asumo por lo que me comentas que está presente en cada fila que estás recorriendo, pero en otra columna) y pasárselo a la transacción de ser necesario. Con hacer eso para cada iteración dentro del bucle *For Each* ya estaría.
Sí es así, para obtener otro dato de la misma fila que estás iterando dentro del bucle For Each, podés utilizar la propiedad *Next* del objeto Range. Es decir, supongamos que en la fila A1 tenés el puesto, en la B1 otro dato y en la C1 el centro, entonces para obtener B o C sería así:
For Each cell in Range
'Obtener el valor de cell e imprimirlo en ventana de inmediato
Debug.Print(cell)
'Obtener el valor de B1 e imprimirlo en ventana de inmediato
Debug.Print(cell.Next(1,1))
'Obtener el valor de C1 e imprimirlo en ventana de inmediato
Debug.Print(cell.Next(1,2))
Next cell
Obviamente en el ejemplo de arriba puse B1 y C1, pero seria B y C de la fila que el bucle esté iterando. Esto también siempre y cuando estes iterando sobre los datos en Excel (ya exportados), si lo que queres hacer es obtener el valor del centro directamente del listado de SAP vas a tener que llamar a la columna correspondiente y hacer lo que tengas que hacer.
Cualquier consulta avisame,
Saludos.
estimado una consulta, como puedo exporta una hoja de excel y guardarlo automaticamente, tengo la transacción mcp6 que al exportar me abre una hoja de excel pero se debe guardar manualmente o si no se borra, gracias.
Hola Ramiro, cómo estás? Te comento que tengo un video en el canal en el cual explico en detalle como hacer lo que me estas consultando. Te dejo el link acá: ruclips.net/video/86HYlK_r4R8/видео.html
Cualquier cosa no dudes en consultarme. Saludos!
@@alefranzoni estimado el problema que tengo es cuando exporto y se me abre una tabla en Excel de nombre HOJA DE CALCULO EN BASIS (1), esa es la que necesito por que el método que explicaste es para guardar como fichero y yo necesito exportar. Gracias estimado amigo.
@@ramirocareaga6692 Perfecto, entonces si ninguna de las funciones de guardado te sirven, lo que puedes hacer es automatizar el proceso hasta que presionas el botón de exportar. Este script llevarlo a un Excel para poder ejecutarlo desde el mismo y luego de eso, cuando finalice la exportación automática, desde código VBA puedes buscar por el libro en cuestión abierto y guardarlo en el lugar y con el nombre que quieras 😉.
Duda mi script si me abre la pantalla para grabar, y cuando lo detengo se crea el script, pero al momento de iniciar la grabación no me deja manipular sap, como puedo solucionarlo?
Hola Jose, ¿cómo estás? Que raro lo que me comentas, nunca me paso lo que me estas diciendo. ¿Qué versión de SAP GUI tenes? ¿Probaste reiniciando y conectándote a diferentes entornos? Saludos.
Hola Ale, me surgió un comentario que estoy tratando de replicar, ya que deseo copiar el nombre de un cliente en un pedido en va03 pero no obtengo el script para copiar el nombre, me podrías apoyar con esta duda por favor
Hola Modesto, cómo estás? Te voy a pedir que me envíes un correo (lo podés encontrar en la sección de información de mi canal o en mi sitio web) con una captura de lo que estás viendo en dicha transacción para poder ayudarte, ya que en mi entorno de pruebas no cuento con datos para poder visualizarlo hoy en día. Saludos.
Hola Ale. Muchas gracias por tu video.
Tengo una consulta para hacerte si podes ayudarme..
Quiero realizar un script con una transacción de SAP para ver documentos posteados (fb03). Según el tipo de documento posteado, la transacción me permite utilizar un layout para visualizar los datos del documento. Es decir, entro con un documento y puedo elegir un layout, entro con otro distinto y ni siquiera aparece la opción en la barra. Cómo podría hacer para que logre que elija un layout determinado para aquellos documentos que permiten la opción?
Yo quiero algo como “si tal session find by id está disponible en sap, hacé esto y si no está.. seguí con esto otro”. Como se hace para decir que un session by id blabla no está disponible? Me ayudaría mucho tu guía. Muchas gracias
Hola Bárbara, como estas? Para realizar lo que me comentas es muy sencillo, primero tenes que identificar el nombre del botón que querés chequear (lo podes hacer muy fácil con una grabación), luego tenes que comprobar la existencia del mismo con *session.FindById(objeto, False) Is Nothing* que te va a devolver True si no existe y por el contrario, False si esta disponible y con eso ya podrías hacer lo que consultas.
Pará darte un ejemplo y que quede bien claro, supongamos que el botón se identifica como *btn[1]* entonces la lógica para presionarlo, solo si existe, sería:
If Not session.FindById("wnd[0]/btn[1] ", False) Is Nothing Then session.FindById("wnd[0]/btn[1] ").press
Listo! Espero que te sirva y cualquier duda me consultas.
Saludos.
@@alefranzoni que genio Ale, muchas gracias por responder!!!
El nombre del botón es este: session.findById("wnd[0]/tbar[1]/btn[33]"
Intenté replicar lo que me mostraste de la siguiente forma:
If Not session.findById("wnd[0]/tbar[1]/btn[33]", False) Is Nothing Then
session.findById("wnd[0]/tbar[1]/btn[33]").press
session.findById("wnd[1]/tbar[0]/btn[71]").press
session.findById("wnd[2]/usr/txtGS_SEARCH-VALUE").Text = "/PINKSENVE"
session.findById("wnd[2]/tbar[0]/btn[0]").press
session.findById("wnd[2]/tbar[0]/btn[12]").press
session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").selectedRows = "1020"
session.findById("wnd[1]/usr/cntlGRID/shellcont/shell").clickCurrentCell
Else
…
Funciona con los documentos en los cuales está la opción, pero no con los documentos donde no está. En esos casos a mi me gustaría que lea la primera sentencia y se dé cuenta que como no aplica, vaya al Else. Pero no estaría sucediendo.
Sabes por qué puede ser y como puedo solucionarlo?
@@barbaraacunasiviero9908 Bien, seguramente este pasando eso porque la línea que comprueba por la existencia del botón da siempre “que existe” porque cuando no está el botón en cuestión, otro debe tomar la posición [33]. Por lo tanto, lo primero que te aconsejo hacer es verificar si esto es así, para eso podes simplemente imprimir un mensaje y ver que te arroja en ambos casos (tanto cuando está el correcto, como cuando no).
result = Not session.findById("wnd[0]/tbar[1]/btn[33]", False) Is Nothing
MsgBox result
Si con lo anterior observas que siempre te arroja el mismo resultado es que está sucediendo lo que te comentaba. Para solucionarlo, deberías hacer alguna comprobación más. Lo que se me ocurre rápidamente es que podrías revisar el Tooltip del botón para corroborar que sea exactamente el que vos deseas. El _tooltip_ es el mensaje que aparece cuando posicionas el cursor por encima del botón, por lo tanto, fíjate que es lo que dice y puedes hacer lo siguiente:
❗Suponiendo que el Tooltip sobre el botón dice _«Cambiar layout»_
Dim result As Boolean, tooltip As String
result = Not session.findById("wnd[0]/tbar[1]/btn[33]", False) Is Nothing
If result Then
tooltip = session.findById("wnd[0]/tbar[1]/btn[33]").Tooltip
If tooltip Like "Cambiar layout*" Then
doSomeActionWhenButtonIsCorrect
session.findById("wnd[0]/tbar[1]/btn[33]").press
...
Else
doSomeActionWhenButtonIsIncorrect
End If
Else
'No se encontro el botón
doSomeActionWhenButtonIsIncorrect
End If
Con esto ya deberías tener tu problema resuelto, confírmame si es así.
Saludos.
@@alefranzoni buenas noches Ale. Aprecio mucho que me ayudes con esto. Tenías razón, en ambos casos el botón parece estar disponible ya que en ambos me dio como True el msgbox.
Intenté replicar tu código para corregirlo con el tooltip del botón (select different display variant*) y me sale el siguiente error:
Sub or function not defined
Y me selecciona la línea de dosomeactionwhenbuttoniscorrect
Puede ser que falta definir aparte los pasos para esa función? No quiero cagar el código.
Bueno muchas gracias de nuevo.
Saludos
@@barbaraacunasiviero9908 Claro, exactamente es eso. Está funcionando bien pero te está indicando que ese procedimiento no está definido. Podes borrar los _doSomeActionWhen..._ y reemplazarlos por lo que quieras hacer, tanto cuando lo encuentra, cómo cuando no.
Cualquier cosa si tenés dudas de algo, avísame que te ayudo a resolverlo, pero ya ahora con colocar lo que desees hacer en cada caso debería funcionar bien.
Saludos.
Buen día Ale, disculpa, hay posibilidad de ejecutar un script si SAP, lo tengo en otro servidor, Citrix Workplace?
Es decir, que no esté descargado SAP, sino que lo tengo que abrir por medio de otro servidor en la lap
Hola Pablo, cómo estás? Te comento que lamentablemente la única posibilidad que tenés de poder hacerlo, es si lo que haces es conectarte a una máquina virtual (donde corres sap) y podes grabar y ejecutar el script desde la misma. Si no, desde tu máquina local no vas a poder.
guau muchas gracias...
Ale podrias hacer un video de como exportar un reporte de sap desde excel
Hola Luis, como estas? Vos te referís a procesar una transacción y luego, una vez finalizado el proceso, guardar/exportar el reporte generado en alguno de los formatos opcionales?
Saludos!
@@alefranzoni si así es
@@LuisSanchez-fy4he Perfecto. Te comento que en breve estaré publicando un video sobre como realizar esto mismo. Saludos!
@@alefranzoni quedaré atenta ..también estoy super interesada en este tema
Ayuda, necesito un script pata copiar una columna de datos que esta en sap y pegarlo en excel
Hola Pedro, te recomiendo que mires los demás videos del canal sobre SAP Scripting, hay varios que te pueden llegar a servir para lo que estás necesitando. Saludos.
tengo creado mi script en sap pero al compartirlo con un colega que tiene cuenta sap no fucniona
Pueden ser diversas las causas por las que podría estar fallando. Por lo tanto, para poder ayudarte necesitaría más información, por ejemplo, que tipo de error le tira, si se llega a ejecutar parte del script o no, si tiene la misma versión de SAP GUI que tú, si estás seguro que su servidor tiene activado SAP Scripting, etc. Saludos.
Hola !
Y como puedo traer un rango de filas de Excel a sap ?
Hola Shayuri, cómo estás? A que te referís específicamente con _"traer un rango de filas de Excel a SAP"_ ? Poneme un poco en contexto así te puedo dar una mejor respuesta. Saludos.
El libro de excel de ser libro habilitado para macros
Si, exactamente Thyago. El libro de Excel que utilices debe estar habilitados para macros, es decir, con extención *.xlsm. Saludos.
Hola amigo como vas, gracias por la info me sirvio mucho, pero quisiera saber como iniciar y logerame en SAP desde codigo VBA en excel, como se explica en este tutorial tuyo ruclips.net/video/cvDxz05Og6E/видео.html en realidad me seria de gran ayuda, debido a que en otros tutoriales explicar como ejecutar el script mas no como abrir y logerse desde el codigo en VBA, te agradezco la atencion, saludos desde Colombia.
Hola Derick, cómo estás? No hay problema, fijate que en este video que te voy a dejar a continuación ya está integrado en Excel la parte de loguearse: ruclips.net/video/YQq8wnDB2HU/видео.html. En el mismo vas a poder bajarte el archivo, ver como lo hice e integrarlo a tus proyectos.
Saludos.
buenisimo, estoy tratando de usarlo con la trasaccion "zufsodvta005", pero no me toma la fecha
session.findById("wnd[0]/usr/tabsPARAMETROS/tabpPARAMETROS_FC1/ssubPARAMETROS_SCA:ZSOD_SD00_R_TOTALVTAAMPL:0103/ctxtSO_FKDAT-LOW").Text = Worksheets("Hoja1").Range("A" & indice).Value
session.findById("wnd[0]/usr/tabsPARAMETROS/tabpPARAMETROS_FC1/ssubPARAMETROS_SCA:ZSOD_SD00_R_TOTALVTAAMPL:0103/ctxtSO_FKDAT-HIGH").Text = Worksheets("Hoja1").Range("B" & indice).Value
que estaria haciendo mal?
Hola Alexis, ¿cómo estás? Podrías fijarte, en primer lugar, poniendo los valores a mano, por ejemplo:
session.findById("wnd[0]/usr/tabsPARAMETROS/tabpPARAMETROS_FC1/ssubPARAMETROS_SCA:ZSOD_SD00_R_TOTALVTAAMPL:0103/ctxtSO_FKDAT-LOW").Text = "01.03.22"
session.findById("wnd[0]/usr/tabsPARAMETROS/tabpPARAMETROS_FC1/ssubPARAMETROS_SCA:ZSOD_SD00_R_TOTALVTAAMPL:0103/ctxtSO_FKDAT-HIGH").Text = "03.03.22"
Con esto vas a estar validando si está funcionando bien el script y si lo que falla es el valor que le estás pasando. Si esto funciona, podés probar que el índice que le pasas sea correcto y además, el formato de la fecha, ya que SAP a veces molesta con el formato. Intenta usando la función *Replace* y reemplazando las “/” con puntos (.) en la fecha, así:
session.findById("wnd[0]/usr/tabsPARAMETROS/tabpPARAMETROS_FC1/ssubPARAMETROS_SCA:ZSOD_SD00_R_TOTALVTAAMPL:0103/ctxtSO_FKDAT-LOW").Text = Replace(Worksheets("Hoja1").Range("A" & indice).Value, "/", ".")
Saludos.