Búsqueda basandome en registros de otra tabla


([N4] rpaton) #1

Hola:
Tengo una tabla ARTICULOS y que tiene como plurar a CHG_ESTADO. En CHG_ESTADO registro la fecha en la que un artículo es dado de Alta inicialmente y luego conforme pasa el tiempo voy registrando los cambios de estado. En este caso pasa de ALTA a BAJA TEMPORAL registrando la fecha. Pasado un tiempo el usuario vuelve a cambiar el estado a ALTA y vuelvo a crear un nuevo registro con la nueva fecha de ALTA y el estado. Así sucesivamente a lo largo del tiempo.

 Tengo que obtener una lista de la tabla ARTICULOS que a CurrentDate() están en estado ALTA. ¿Cómo podría implementar esta búsqueda de forma óptima?

 Saludos.

([N1] wikan) #2

Un índice por código que tenga de condición un campo booleano que está a 1 cuando el artículo esta en estado “ALTA”


([N4] rpaton) #3

Hola:
No me sirve el sistema ya que lo que hay que verificar para cada registro de ARTICULOS es que en los registros de CHG_ESTADO busque el de mayor fecha de alta y a partir de esa fecha de alta buscar que no exista alguno con fecha de baja menor. El fin es presentar los articulos que estan en estado alta en la fecha actual (CurrentDate()) y que no tenga un registro con fecha de baja igual a la fecha actual.
Estaria en ALTA a partir de la ultima fecha de alta y que no tenga fecha de baja igual a l actual.

Saludos
Ricardo Paton


([N1] wikan) #4

Lo que me quieres decir, es que el último cambio de estado sea ALTA, no? que a día de hoy este como ALTA?


([N4] rpaton) #5

Hola:

 Muchas gracias por contestar Manuel.

 Te muestro un ejemplo. Ver adjunto.

Como puedes ver en el ejemplo para la pantalla de Pedidos tengo que indicar al usuario qué Artículos puede elegir según la fecha de pedido que ha introducido. Según esa fecha los Artículos estarán disponibles o no.

No puedo grabar nada en la tabla de ARTICULOS ya que la fecha del ALTA o BAJA no depende del día de hoy sino que en cualquier momento puedo poder consultar la lista de artículos disponibles a una fecha teniendo en cuenta lo registrado en CHG_ESTADO.


Saludos.

Ricardo Patón



([N4] rpaton) #6

([N1] wikan) #7

Okis, pensaba que era a día de hoy.
Lo que haría sería un proceso que te devuelva la lista de artículos, le pasan la fecha y haces una búsqueda entre límites hasta la fecha que le pases.
Ordenas por artículo y precio
Multipartir por artículo
De cada sub-lista, lees el último registro
Comprueba si el estado es ALTA, y si es verdadero, lo añades a la salida.

Ese proceso te dará los artículos en ALTA hasta la fecha que le has pasado.

Creo que es correcto. Supongo que se podría acotar la búsqueda de estados a una fecha inicial para optimizar.


([N4] rpaton) #8

Hola:

 Ok. Voy a probarlo.

 ¿Se podría hacer también con Índices Compuestos? ¿Qué sería más óptimo?

 Saludos.

 Ricardo Patón

([N1] wikan) #9

No creo que puedas usar índices complejos por que debes devolver en base a la fecha del pedido o consulta, por lo menos a mi no se me ocurre.
Quizás indexar id y fecha, pera estás en las mismas aunque tenga un índice que te devuelva directamente la tabla de artículos, tendrás que hacer una búsqueda entre limites para obtener el registro a esa fecha.
Haz un simil con las existencias a fecha, para devolver lo que tienes un día, es ese día o el anterior más próximo.


([N4] rpaton) #10

Hola Manuel:
Ya implementé lo que me dijistes y por lo menos funciona. Obtengo listado de Artículos que a fecha de hoy o de cualquier otra fecha están en estado Alta. He puesto el proceso de momento en la rejilla de Artículos pero no voy a copiar al formulario de pedidos para presentar solo los Artículos en Alta a fecha de Pedido.

 Adjunto .PDF con el proceso por si le es útil a alguien más.

 Gracias de nuevo por ayuda.

 Saludos.

 Ricardo Patón

REFRESCA_HIS1.pdf (18 KB)


([N1] wikan) #11

Buenas, veo un par de cosillas que podrías mejorar.

  • Podrías hacer todo en el servidor y devolver la lista de artículos definitiva.

Para ello, en vez de agregar el registro a la cesta de ArtHisto, puedes leer la ficha maestro-> ARTICULO y agregar a la salida.
Así cuando lances el proceso en el servidor, la lista que te devolverá directamente ya viene de artículos.

Con eso, divides, por una parte el evento que crea la cesta de artículos y la pone en la rejilla y por otro lado, tienes el proceso que ejecutas en el servidor y devuelve directamente la lista de artículos.

PD: En el proceso actual, te sobra después de procesar la cesta, vuelves a traspasar la lista a la cesta


([N4] rpaton) #12

Hola Manuel:

 Siguiendo tus instrucciones queda resuelto. Adjunto .PDF del Manejador para la Rejilla y el Proceso para la lista.

 Gracias y un saludo.

 Ricardo Patón

REFRESCA_HIS1.pdf (17.3 KB)

ART_HISTORIAL_CARGAR_3P.pdf (17.6 KB)


([N1] wikan) #13

Ahora me gusta más :wink: