Búsqueda en un histórico por la clave maestra.


([N1] imesacodabar-es) #1

Buenos días.
Seguro que mi duda ya está resuelta en el foro, disculpad por no haber dado con ella.
Creo que es sencilla, pero me falta visionarla.
Parto de una tabla de artículos, que tiene su ID (único), una REFERENCIA (acepta duplicados) y un FABRICANTE(Enlace a tabla Fabricantes). Esta tabla, por tanto, define productos que podrían tener la misma referencia y diferente fabricante.

Luego tengo una tabla con el Inventario, en la que doy de alta un NÚMERO DE SERIE por cada unidad de REFERENCIA de FABRICANTE(obviamente, enlanzado con la tabla productos). De tal manera que cada vez que se recepciona una unidad de producto se identifica inequívocamente con un Código de barras.

Con este planteamiento, realizo una Búsqueda de registros. Para ello, creo un formulario con unos límites de fechas de entrada (que va bien y podía haber obviado comentarlo), y añado el dato Referencia para poder buscar todas las referencias (independientemente de su fabricante). En el formulario le indico que es de Edición Alfabética y su contenido es el campo de su maestro.

Obviamente al buscar me muestra los registros sólo de la referencia que he seleccionado pero yo necesito mostrar el inventario de todas las referencias iguales, independientemente de su fabricante.

¿Cómo haría la búsqueda?
¿El único camino es añadir un campo REFERENCIA1 en la tabla Inventario para guardar de forma automática el dato de su maestro para ejecutar las búsquedas?

Gracias por vuestra ayuda…

Un abrazo.


([N4] eic) #2

Hola.

Si quieres utilizar un “objeto búsqueda” sobre la tabla Inventario, como el campo Referencia no está en esa tabla, efectivamente, tendrías que crear ese campo auxiliar. El problema es si cambia el dato en la ficha del artículo, pues deberías actualizar ese campo de los registros correspondientes de la tabla Inventario.

Tienes otra opción, que es más compleja. En vez de usar un objeto Búsqueda, utilizas un proceso que te busque en la tabla de Artículos por el campo Referencia, y después, entre sus registros relacionados de la tabla Inventario. Más complejo, más lento, pero siempre funciona.

Muchas veces se usa la primera solución, aunque tienes que tener en cuenta que ese campo puede cambiar. La estructura de la tabla queda un poco más “fea”, porque duplicas un campo, pero puedes hacer búsquedas fácilmente.

Saludos,

Fran Varona


([N1] imesacodabar-es) #3

Gracias por la Respuesta Fran.
La opción “fea” ya la había adoptado, añadiendo un trigger en la tabla Anterior a la Modificación, que he supuesto era la vía más rápida de mantener ese dato actualizado.
Lo que comentas del proceso, voy a intentar hacerlo, aunque imagino que la búsqueda será más lenta. Las tablas no van a tener muchos registros, pero prefiero sacrificar un poco de tiempo en una consulta (que al usuario puede parecer más razonable) e intentar mantener la estructura de la tabla más optimizada.
Abrazos.
Iván.


([N1] Miguel Perez-3) #4

Tu lo dices en el enunciado “Busqueda de un historico por su clave Maestra”.

Pues Buscas en el maestro por referencia y a continuación Cargar Plurales Inventario.

Es lo mas simple y siempre funciona, hay que utilizar las posibilidades de Navegación en Velneo, que son idoneas.

Te aseguro que su rendimiento es altísimo y nunca vas a notar diferencias.

Exagerando tu caso, si en Velneo quieres saber lo que ha comprado un conjunto de clientes , una lista (imagina que tienes 5 o 6 clientes que has buscado previamente por cualquier seleccion Provincia etc)

Para saber los articulos que gan comprado esos clientes sería

Busqueda con tu criterio de los clientes
Cargar Plural Facturas
Cargar Plural Detalle
Cargar Maestro Articulos

Y ya estas en la lista de articulos que ha comprado unos determinados clientes

y te aseguro que el rendimiento es muy alto, tienes que hacerte con estas posibilidades de Velneo, para ver sus ventajas.

Por supuesto todo esto admite un sinfin de posibilidades si ademas condicionas indices , creas distintos plurales, etc

La respuesta esta siemrpe en la base de Datos, no en hacer procesos en el Interface


([N4] eic) #5

Hola, Miguel.

Si te fijas, hace una búsqueda por fechas en la tabla de Inventario, además de buscar por referencia. Eso significa que, si utilizara lo que tú le propones, una vez que carga los plurales tendría que filtrar la lista, operación que habitualmente es lenta, si se hace en primer plano (puedes hacerlo en tercer plano, pero ya hay que utilizar un manejador de objeto).

Saludos,

Fran Varona


([N1] aztecmexico) #6

Haber si no la cajeteo.

Creo que la solución es mucho más sencilla de lo que parece, yo tenía un problema similar, buscar desde un formulario de búsqueda avanzada en un histórico datos que solo tengo en su maestro.

Obvio que en el histórico solo tengo la referencia (ID) del maestro, por lo que normalmente no puedo hacer la búsqueda en una sola tirada.

Revisando las “benditas” open apps, encontré que en la de vERP resuelven este problema, de una manera a mi parecer elegante y bastante funcional.

El planteamiento es sencillo, en un evento de búsqueda generan dos manejadores de objetos, uno para la tabla histórica y otro para la maestra, los resultados de ambos se almacenan en una cesta, ojo con la mezcla, aquí esta buena parte del secreto, un pequeño análisis te dirá si debes cruzar, añadir o quitar.

Todos los datos parten de un solo formulario y en un dado caso, hasta de un solo campo de toma de datos, excepto para las fechas y para campos de tipo binario.

Hacer notar, que como indica el manual del vDevelop, los nombres de las variables en el formulario se deben corresponder con las definidas en los componentes de las búsquedas de cada tabla, de lo contrario no funcionará en caso de tener condiciones de activo para las búsquedas.

Anexo imagen de cómo lo resolví.

Saludos y espero que te sirva y no haber errado en la interpretación de tu problema.

Martin Ibarra. [attachment=27048,2108]




([N4] eic) #7

Hola, Martín.

Depende de la búsqueda que quieras hacer, y del número de registros que conlleve, te puede compensar utilizar ese procedimiento que indicas, o bien filtrar entre los plurales de las cabeceras que te interesen. Ambos son válidos, aunque el que comentas puede suponer el manejo de grandes cantidades de registros (imagina buscar líneas entre fechas -la fecha en la línea- cuyas cabeceras cumplen una cierta condición… si tienes muchas, muchas líneas).

De todos modos, ya en Life is Soft, Juan adelantó que en breve estarán disponibles los índices complejos, que resuelven, justamente, este tipo de problemática.

Saludos,

Fran Varona


([N1] Pepeto) #8

@ imesa@codabar.es:

Todas las soluciones que te proponen son validas, incluso la que tu mismo propones en el primer post, es muy acertada.
Pero hay una que aun no te han dicho.

Es la siguiente:

  • buscar en la tabla de articulos por la REFERENCIA, y obtienes una lista
  • Luego recorres la lista de articulos, y ejecutas una busqueda para cada una de las referencias entre fechas o con las variables que necesites y vas añadiendo los resultados a una cesta.
  • Al final, en la cesta, tendras todos los registros que necesitas.

un saludo
José Luis