Ir a diferentes vistas según una condición (Go to different views based on a condition)

Hola a todos,
Hi everyone,

Tengo dos tablas “Producto” y “Orden de Trabajo”
I have two tables “Producto” and “Orden de Trabajo”

La tabla “Producto” contiene información básica acerca de éste y las columnas importantes son las siguientes:
The “Producto” table contains basic information about this product and the important columns are as follows:

[ID Producto] (key) ----- (Product ID)
[Tipo de Producto] (label) ----- (Product Type)
[Estado] (text) ----- (Status)

La tabla “Orden de Trabajo” contiene información detallada del producto y está referenciada a la tabla “Producto” por medio de la columna [ID Producto] y las columnas importantes son las siguientes:
The “Orden de Trabajo” table contains detailed information about the product and is referenced to the “Producto” table by means of the [ID Producto] column and the important columns are the following:

[ID Orden de Trabajo] (key) ----- (Work Order ID)
[Tipo de Producto] (label) ----- (Product Type)
[ID Producto] (ref) ----- (Product ID)

Cada tabla tiene su propia vista “Producto_Detail” y “Orden de Trabajo_Detail”. Además creé un Slice “Trabajos” que me muestra los productos y el ‘Estado’ en que se encuentran en el lado derecho.
Each table has its own view “Producto_Detail” and “Orden de Trabajo_Detail”. I also created a Slice “Trabajos” that shows me the products and the ‘Estado’ they are in on the right side.

IMAGEN 1 (Adjuntos abajo)
PICTURE 1 (Attachments below)

Creé esta acción:
I created this action:

IF([Estado]=“EN PROCESO”,LINKTOFILTEREDVIEW(“Orden de Trabajo_Detail”,[ID Producto]=[_THISROW].[ID Producto]),LINKTOFILTEREDVIEW(“Producto_Detail”,[ID Producto]=[_THISROW].[ID Producto]))

Cuando la condición no se cumple, me envía a “Producto_Detail”, hasta allí todo bien.
When the condition is not met, it sends me to “Producto_Detail”, so far so good.

IMAGEN 2 (Adjuntos abajo)
PICTURE 2 (Attachments below)

El problema es cuando la condición sí se cumple. Debería mostrar “Orden de Trabajo_Detail” correspondiente al producto señalado, pero no lo hace.
The problem is when the condition is true. It should show “Orden de Trabajo_Detail” corresponding to the indicated product, but it doesn’t.

IMAGEN 3 (Adjuntos abajo)
PICTURE 3 (Attachments below)

Intenté cambiando la formula a:
I tried changing the formula to:

IF([Estado]=“EN PROCESO”,LINKTOFILTEREDVIEW(“Orden de Trabajo_Detail”,[ID Producto]=[_THISROW].[ID Trabajo]),LINKTOFILTEREDVIEW(“Producto_Detail”,[ID Producto]=[_THISROW].[ID Producto]))

Pero arroja el siguiente error:
But it throws the following error:

IMAGEN 4 (Adjuntos abajo)
PICTURE 4 (Attachments below)

Puedo suponer que no estoy conectando con la clave de la tabla “Orden de Trabajo” y por eso no tengo acceso a la información. Pero no se como lograr esa conexión.
I can assume that I am not connecting with the key of the table “Orden de Trabajo” and therefore I do not have access to the information. But I don’t know how to make that connection.

Ayuda por favor.
Please help.

Solved Solved
0 34 4,466
1 ACCEPTED SOLUTION

Bien amigos,

Encontré la solución

Para que el “ID Trabajo” de la tabla “Producto” se auto rellene con el “ID Trabajo” de la tabla “Orden de Trabajo”, agregue a la columna “ID Trabajo” de la tabla “Producto” la siguiente formula:

LOOKUP([_THISROW].[ID Producto],"Orden de Trabajo","ID Producto","ID Trabajo")

Donde, una vez creada la Orden de Trabajo y su respectivo ID, el lookup va a buscar ese valor y se lo asigna a la columna ID trabajo pero de la tabla Producto, permitiendo que la siguiente formula funcione automaticamente:

Espero ayude a quienes quieran lograr esto en su app.

Saludos y muchas gracias a @Alejandra_Petro y @SkrOYC por su ayuda.

PD: Si no me explique bien díganme y lo intento otra vez ajajajjaja.

View solution in original post

34 REPLIES 34

Hola Luis.
Por lo que entendí creaste una acción que cambia su objetivo dependiendo del status del producto y luego en “Row select” behaviour seleccionaste tu accion?
Asumiendo aquello, prueba reemplazar todo con LINKTOROW() en lugar de LINKTOFILTEREDVIEW().
Pones primero el ID y luego la vista en la cual lo necesitas.

Nos cuentas cómo te va

Hola SkrOYC,

Agradezco tu pronta respuesta.

Intenté hacerlo con LINKTOROW pero seguía dándome la vista de “Detail” en blanco. La verdad tengo dudas de si coloqué bien las expresiones y eso.

Pero gracias a tu respuesta se me ocurrió que tal vez podía intentar agregando una columna de ID Trabajo a la tabla Producto. Sin referenciarla. Solo con la intención de que la formula vaya a corroborar el ID y me entregue el Detail que corresponde. Funcionó.

Pero ahora necesito crear un bot o proceso (no lo sé muy bien) que, cada vez que se cree un registro en la tabla “Orden de Trabajo” copie el “ID Trabajo” creado y lo pegue en la tabla “Producto”, en el producto (fila) correspondiente.

La formula que funcionó es la siguiente

IF([Estado]=“EN PROCESO”,
LINKTOFILTEREDVIEW(“Orden de Trabajo_Detail”,[ID Trabajo]=[_THISROW].[ID Trabajo]),
LINKTOFILTEREDVIEW(“Producto_Detail”,[ID Producto]=[_THISROW].[ID Producto]))

Agradezco nuevamente la voluntad de ayudar.

Saludos

Qué bueno que te funcionó. Por lo general, en AppSheet hay más de una forma de solucionar un problema.
Lo único que no entendí del todo es por qué creaste un Slice, no noté bien cuál era el objetivo

Porque existen varios “estados” para los productos y uno de ellos es “FINALIZADO”. La cosa es que necesitaba una “vista” que me mostrara todos los productos con estado distinto al de finalizado y otra “vista” solo con los finalizados.

La verdad es que según vi en otros tutoriales y acá dentro del foro, era una opción para lograr eso. Si existe otra la desconozco.

Saludos

Es decir, necesitabas una vista del tipo Detail para los productos con estado “Finalizado” que fuera distinta a la vista Detail de los demás estados?
Para eso no necesitas un Slice, podrías ir depurando tu app

y eso seria creando solo otra vista?

Con respecto a lo de depurar, como puedo averiguar que cosas están haciendo menos eficientes el sistema?

Saludos y gracias nuevamente

Respecto a la velocidad de la aplicación, hay muchos puntos de vista diferentes al respecto.
En general, solo sugiero mantener un orden interno relacionado al desarrollo de las apps. Evitando tener vistas y acciones duplicadas o sin uso y ese tipo de cosas.
Puedes chequear acá en la comunidad lo que otros han descubierto sobre la velocidad si te parece un tema interesante.
Saludos!

Si, me parece importante aprender de ello. La verdad es mi primer acercamiento al desarrollo, no soy programador ni nada, por lo que toda info me viene de gran ayuda. Ahora estoy intentando lograr automatizar la copia del ID y cuando tenga resultados los compartiré para aportar algo jajajaja.

Saludos

Qué bien, sigue adelante.
Yo tampoco soy desarrollador pero creo tener bastante sentido común y eso me ha ayudado.
Podrías cerrar este topic seleccionado tu respuesta de más arriba como la solución

Aun no quiero cerrarla porque la solución es parcial. Yo cree la columna y copie de forma manual el campo ID para ver si funcionaba y si lo hace. Pero necesito que lo haga de forma automática, de lo contrario la formula no funciona.

Hola,

Replique tu app con la informacion que brindaste y tu expresion funciona a la perfeccion. Pero tengo una duda, el “ID Producto” en la tabla “Orden de Trabajo” va a conterner valores/ID duplicados, es decir que ese “ID Producto” va a ser referencia de varias lineas en la tabla ordenes. La expresion no te va a llevar a una linea exacta.

Este es un screenshot de la tabla “Orden de trabajo” que replique con tu info.

Cree dos ordenes donde el “ID Producto” es “Manzana”

3X_6_f_6f780a87fed27eaf49c13db618ac1bab59fb1f7b.png

Cuando voy al slice " Trabajos" que contiene las lista de productos y selecciono “Manzana”,

3X_8_4_8482b6504a8b4aacb7bde7a22df9b77eb6666431.png

La expresion me lleva a los detalles de la primera orden que cree con “ID Producto” Manzana. (pero tengo 2 ordenes con “Manzana” )

3X_d_2_d2b26efa7ec339f6261698a9bd852244ee4be092.png

El “ID Producto” deberia ser unico para cada linea en la tabla de ordenes para asi obtener la informacion de la orden exacta que necesitas. No se si me hago entender.

Seria mucho mas facil ayudarte si brindas un poco mas de informacion de como funciona tu app.

Estoy de acuerdo con @Alejandra_Petro
Por favor, enviarnos capturas de pantalla para poder comprender mejor tu esquema

Hola Alejandra,

Muchas gracias por la respuesta.

Te comento un poco mas sobre la app. Es para gestionar trabajos, En total existen 5 tablas, [Ingreso] [Producto] [Orden de Trabajo] [Cliente] [Contactos].

Cuando llega un cliente con algún trabajo se genera un ingreso, en él se registran la “empresa” (referenciada a tabla Cliente), el “contacto” (referenciada a tabla Contacto) y “productos” (la tabla Producto se referencia a la de Ingreso para poder asociar varios productos a un mismo ingreso).

Al crearse los productos, el “estado” de este pasa a “INGRESADO” por medio de un “Bot”.

Los productos tienen “acciones” asociadas para cambiar el estado de este. Uno de esos estados es “EN PROCESO”, cuando hago click en esa “acción” cambia el estado a “EN PROCESO” y además me envía al “Formulario” de la “Orden de Trabajo” para crear la Orden de Trabajo correspondiente. Eso con esta formula:

LINKTOFORM("Orden de Trabajo_Form","ID Producto",[_THISROW])

por lo que la vista “Formulario” ya esta asociada a ese producto en especifico, pero solo la vista. Porque cuando creo la Orden de Trabajo, esta no queda asociada al producto, osea que no toma el key del “Producto”. Por esta razón estoy intentando encontrar la forma de que la Orden de Trabajo tome el ID de Producto y lo integre a la fila correspondiente. Solo de ese modo funciona esta formula:

IF([Estado]="EN PROCESO",
LINKTOFILTEREDVIEW("Orden de Trabajo_Detail",[ID Trabajo]=[_THISROW].[ID Trabajo]),
LINKTOFILTEREDVIEW("Producto_Detail",[ID Producto]=[_THISROW].[ID Producto]))

Esa es mi complicación ahora, estuve intentado crear algún bot para que realice la copia del “ID Producto” hacia la “Orden de Trabajo” pero no lo logro.

Con respecto a lo de los duplicados, por el momento puedo obviarlo, ya que solo somos 2 personas las que ocuparemos la app y bastara por ahora con tener claro el no repetir la “acción” de “EN PROCESO” para no generar duplicados. Pero sin duda tendré que resolverlo en algún momento ajjajaja.

Quedo súper atento a tu respuesta.

Muchísimas gracias por tu ayuda. Saludos

Hola @Luis_Sepulveda_M
No tengo mucho tiempo así que estoy tratando de ayudar lo mejor que puedo.
A simple vista puedo identificar dos cosas que creo que podrían ser mejoradas.

Primero:

Esto significa que seleccionas la referencia de un Ingreso desde Producto o tienes un EnumList basetype Ref? Lo segundo sería mi recomendación si es que tienes productos que solo debes seleccionar, a menos que Producto solo tenga una cierta lista de productos a la espera de seleccionarlos y después tu agregar más info (como cantidad, precio de venta, etc).

Segundo:

Sugiero que Estado se calcule automáticamente usando una AppFormula en lugar de que se haga a través de un Bot. El problema que veo es que usas Bot para varias acciones en conjunto y tendrías que cambiar un poco tu workflow actual

Hola SkrOYC,

La tabla Productos la referencio a ingresos y activo la casilla “its part of”. Eso hace que en el formulario de ingreso me muestre un boton para agregar producto. Los productos no los selecciono, los creo a partir del formulario Ingresos, que clickeando en agregar producto me envia al formulario de producto.

La verdad no sabria como hacer eso a travez de formula. Como te decía soy nuevo en esto y por lo que me he dado cuenta, las acciones me ayudan con eso. Pero considerando lo que me decias de depurar, me parece interesante aprender mas de ello para lograrlo. Supongo que el uso de bots y acciones y todo eso no es tan eficiente como utilizar formulas.

Saludos graciass.

Ahora me cuestiono si es necesario tener una tabla para “orden de trabajo”, ya que cada “producto” puede tener solo una “orden de trabajo”. Será que si toda la informacion que tengo en “Orden de trabajo” lo agrego a la tabla “Producto” me ahorro este conflicto, y solo genero distintas vistas y distintos formularios.

¿Que opinan?

Bien amigos,

Encontré la solución

Para que el “ID Trabajo” de la tabla “Producto” se auto rellene con el “ID Trabajo” de la tabla “Orden de Trabajo”, agregue a la columna “ID Trabajo” de la tabla “Producto” la siguiente formula:

LOOKUP([_THISROW].[ID Producto],"Orden de Trabajo","ID Producto","ID Trabajo")

Donde, una vez creada la Orden de Trabajo y su respectivo ID, el lookup va a buscar ese valor y se lo asigna a la columna ID trabajo pero de la tabla Producto, permitiendo que la siguiente formula funcione automaticamente:

Espero ayude a quienes quieran lograr esto en su app.

Saludos y muchas gracias a @Alejandra_Petro y @SkrOYC por su ayuda.

PD: Si no me explique bien díganme y lo intento otra vez ajajajjaja.

Hola a tod@s,

Me gustaría actualizar esta solución, ya que a los días de funcionar algo sucedió, la verdad no tengo idea que paso jajajaj pero dejo de funcionar. Después de romperme la cabeza unas horas tratando de volver a hacer que funcione, termine dando con una nueva solución que terminó siendo menos compleja. En vez de crear una columna “ID Trabajo” en la tabla de “Productos”, cree una columna virtual, la llamé “Trabajos”, esto porque AppSheet insistía en colocarla como tipo Ref cuando yo necesitaba que fuera de tipo Texto. Esa nueva columna virtual contiene la fórmula:

LOOKUP([_THISROW].[ID Producto],"Orden de Trabajo","ID Producto","ID Trabajo")

Y todo volvió a la normalidad y funcionando genial.

Saludos

Hola Luis, a ver si me puedes auxiliar con algo muy similar a lo que vienes comentado y has encontrado una solución alternativa.

Esto aplicando la fórmula: LOOKUP([_THISROW].[CODIGO PRODUCTO],“PRODUCTOS”,“CODIGO PRODUCTO”,“PRODUCTO”)

Esta fórmula es la aplicación de esta: LOOKUP(FIND-VALUE,IN-DATASET,IN-COLUMN,RETURN-COLUMN)

La sintaxis en español: BUSCAR(VALOR DE BUSQUEDA, EN CONJUNTO DE DATOS, EN COLUMNA,COLUMNA DE RETORNO)

Ya revisé minuciosamente mi tabla d eorigen, ya revisé cientos de veces que la fórmula esté bien escrita, etc, etc y siempre me dice appsheet que hay un error…

gracias por tu apoyo

Please post a screenshot of the error message and of the complete expression.

Ok, esto es lo que me dice appsheet:

The error message is pretty clear. What don’t you understand?

Esta es la tabla de origen:

Irrelevant. The error message says exactly what the problem is,

Steve, según yo tengo los paréntesis abiertos y cerrados correctamente, tu ves que no estén cerrados?

3X_e_3_e3bd22992b5b4610a914c68635bab720758c2f43.png

Hola jorge,

La verdad no entiendo muy bien lo que buscas lograr. Esa formula te ayuda en ir a buscar un valor y colocarlo en la celda donde estas utilizando esa formula.

Lo que supongo que quieres hacer es que cuando crees un detalle de un determinado producto, esta formula vaya a buscar el nombre de dicho producto.

De ser asi, te recomiendo que la tabla “detalle de producto” forme parte de la tabla “producto”, esto se hace referenciando la columna producto de tu tabla “detalle de producto” y activando la casilla ‘forma parte de’ o algo por el estilo, ‘its part of’ en ingles. Eso hara que cuando agregues un producto, te aparezca una tabla donde permite añadir el detalle.

Como te digo no comprendo muy bien lo que buscas hacer, si me puedes explicar mas en profundidad tal vez pueda ayudar mejor.

Saludos

Hola Luis muchas gracias por tu tiempo y tu respuesta, de hecho si tengo vinculadas ambas tablas, la de productos y la de detalle de producto. Los que busco es que cuando llene el formulario detalle de producto, automáticamente se llenen varios campos, el de producto, el de precio y el de existencias mediante la fórmula Lookup en cada una de las columnas del editor. El problema es que la formula que aplico, LOOKUP([THISROW].[CODIGO PRODUCTO],“PRODUCTOS”,“CODIGO PRODUCTO”,“PRODUCTO”) me marca error; también intenté con SELECT y tampoco, entonces estoy atorado…

Si entiendo bien. Tu tabla de detalle esta referenciada a la tabla producto por medio del CODIGO PRODUCTO. De ser asi te conviene utilizar la formula

[CODIGO PRODUCTO].[PRECIO]

Que, lo que hace es: tomar el valor de “Precio” de la fila referenciada por el “codigo producto”, eso quiere decir que irá a la tabla productos, buscará el codigo producto correspondiente y desde esa fila ira a la columna precio y te devolverá ese valor.

Ahora, yo vi que en tu hoja de calculo tienes varias tablas por separado, como precio, categoría, subcategoría, etc. Si todo eso tiene relación directa solo con los productos, te recomiendo que agrupes todo eso en una única tabla, asi evitas estar haciendo llamados a mas tablas.

Haciendo mi app me di cuenta que lo mejor es intentar reducir lo máximo posible la cantidad de tablas sin perjudicar el funcionamiento claro.

Espero ayude

Hola Luis! muchas gracias por tu recomendación, voy a intentar lo que sugieres, junta la info de las dos tablas e intentar la fórmula, ya te diré si funciona!

Saludos

Genial. Espero que todo salga de maravillas. Si, yo tuve varios conflictos a la hora de relacionar tablas cuando comenzé a hacer la app y tenia muchas tablas, toda la info muuuy segregada y por el foro me recomendaron agrupar mejor la info y fue muy util, ahora tengo alrededor de 4 tablas y es toda la info se maneja mucho mejor. La ventaja es que luego toda la tabla puede filtrarse por medio de las vistas en el UX.

Exito con los cambios.

Si, ahora estoy intentando eso que dices, tener menos tablas y agrupar conceptos, gracias por tu valiosa ayuda.

Feliz año

Genial, me alegro haber sido de ayuda. Igualmente que tengas un excelente año.

Gracias Steve, tienes toda la razón, ya lo modifiqué pero de todas formas me arroja un mensaje que significa que no ha tomado la fórmula como válida dado que aunque le pone una palomita verde, al tratar de hacer un ejercicio de confirmación en el formulario no aparece la columna “PRODUCTO”.

MIRA EL MENSAJE:

Top Labels in this Space