Búsqueda y arrays, una forma de hacer multibúsquedas (y II)

Intentaré explicar con otro ejemplo una nueva forma de hacer multibúsquedas en una tabla de datos usando de nuevo los arrays de Velneo.

El planteamiento es sencillo pero suficiente para desarrollar dos formas de hacer una multibúsqueda sobre una misma tabla: una con una rejilla en la que escogemos los datos de quién queremos mostrar de dentro de una lista de ellos y otra en la que introducimos nosotros los datos como si fuese un histórico.

Tenemos dos tablas, una de CLIENTES  y otra de VISITAS,  ésta última histórica de la primera, en la que iremos guardando las visitas que le hacemos a cada cliente en diferentes fechas. No he querido crear más campos para que el ejercicio fuera lo más sencillo y claro posible.

Esquema inicial de tablas

Esquema inicial de tablas

Primer planteamiento: el objetivo es que la aplicación busque todas las visitas que se han hecho a los clientes que yo elija en una rejilla en la que me muestra todos los clientes. Es lo que he llamado en el mapa visitas múltiple  selección y los objetos usados se guardan en la carpeta del mismo nombre.

He creado una tabla DUMMY  en memoria que se va a cargar con todos los clientes cada vez que se necesite a través de un tubo de lista.

esquema dummy

Esquema de tablas con CLIENTES, VISITAS y DUMMY

Con un formulario especial de la tabla VISITAS donde se muestra una rejilla con todos los DUMMY,  editable en su campo %ESCOGER%,  que en principio vale 0, pero que podemos cambiarlo en esa rejilla a 1 para que nos  busque las VISITAS  a ese CLIENTEDUMMY. Tras tener escogidos los CLIENTES  que queremos el proceso utiliza una cesta de VISITAS  y la potencia de los arrays, para ir cargando en la cesta las visitas de cada uno de los CLIENTES seleccionados y mostrarlos al final en una rejilla de la tabla VISITAS. Como se puede observar, la tabla DUMMY  no tiene ningún tipo de conexión con las otras dos tablas.

proceso multi

Proceso con DUMMY y "multiselección".

En el proceso se crea una cesta local de visitas donde se irán añadiendo las visitas de los CLIENTES  elegidos.

Se vacía la DUMMY   y  se rellena posteriormente mediante un tubo de lista con todos los clientes. Se crea el array.

A continuación se muestra un registro de VISITAS en el que hay una rejilla con los datos de la DUMMY. El primer campo %ESCOGIDO% es editable y se puede cambiar su valor de o a 1.

Se carga la lista DUMMY  por el índice “escogido” ( formado por el código y con campo condición para indexar %ESCOGIDO% igual a 1 ) y se van añadiendo al array los códigos de los clientes guardados en el campo %CODIGO%  de la tabla DUMMY.

Por último se caga el array, y se va leyendo cada item, que irá modificando la variable global en memoria $COD-CLIENTE$ para así lanzar la búsqueda VISITAS-COD-CLIENTE  y añadir los resultados obtenidos a la cesta. Por último se muestra la cesta.

Este planteamiento se lanza en la opción de menú búsqueda múltiple con rejilla editable

Segundo planteamiento. el objetivo es que la aplicación busque todas las visitas que se han hecho a los clientes que yo haya introducido en una rejilla. Es lo que he llamado en el mapa visitas múltiple  dando altas y los objetos usados se guardan en la carpeta del mismo nombre.

He creado una tabla DUMMYDOS  en memoria  a la que se van a añadir los clientes que se quiera mediante un formulario de alta

esquema con dummydos

Esquema con CLIENTES,VISITAS y DUMMYDOS

Esta vez DUMMYDOS si que actúa como histórica de CLIENTES, pues necesito rellenar esta tabla con un localizador y para ello , necesito que CLIENTES sea maestra de DUMMYSDOS.

El proceso llamado varía un poco, pero también creo que es sencillo y fácil de comprender.

proceso dummydos

Proceso que alimenta la cesta de las visitas

En este caso, cuando se recorre la lista de DUMMYDOS,  el dato que se debe añadir al item del array es el puntero al CLIENTE, que guarda el campo %CODIGO% de la ficha del maestro CLIENTES.

El segundo  planteamiento se lanza en la opción de menú búsqueda múltiple con rejilla “alimentada”

Seguro que es mejorable, pero es sólo un ejercicio para ver cuánto partido le podemos sacar a Velneo.

Link de descarga del mapa completo y en el foro de Velneo.

EDICION (8-sep-2010)

Tal y como me comenta por e-mail mi compañero y sin embargo amigo 🙂 Adelo Herrero el primer planteamiento se puede hacer sin la tabla DUMMY  usando la misma tabla de CLIENTES para simular la multiselección con el campo %ESCOGIDO%.

Tienes toda la razón Adelo. Se agradece el comentario y subo al link de descarga la versión actualizada con tu sugerencia.

Un saludo.

Búsqueda y arrays, una forma de hacer multibúsquedas (I)

Hace poco, un amigo me planteó el siguiente problema  que se le daba en una aplicación.

En una empresa, hay una serie de departamentos. Dentro de cada departamento, hay niveles de acceso a la información de una tabla (NOTICIAS). Cada persona de la empresa tiene un determinado NIVEL  dentro de cada DEPARTAMENTO y una persona solo puede acceder a las informaciones de cada uno de sus departamentos y dentro de ellas a las que su nivel se lo permita. Por ejemplo, si hay 10 niveles y tengo asignado en el departamento de contabilidad el nivel 4, podré acceder a toda la información de contabilidad con nivel 4, 5, 6,7,8,9 ó 10.

El esquema de tablas que hice fue el siguiente:

Esquema

Esquema de tablas

La tabla CLASIFICACION  tiene como objetivo mantener un histórico de los DEPARTAMENTOS  y NIVELES que tiene en cada uno de ellos cada PERSONA de la empresa. Tiene solamente tres campos punteros a maestro PERSONAS, DEPARTAMENTOS y NIVELES  y un índice de clave única formado por los tres campos punteros.

La tabla NOTICIAS  ( puede también llamarse APUNTES o NOTIFICACIONES, como cada cual quiera ) tiene un campo CODIGO, NOMBRE y un puntero a DEPARTAMENTO y otro a NIVELES que le renombré como Nivel Mínimo. A su vez creé un índice formado por la terna DEPARTAMENTO-NIVEL .

Para que desde una ficha de modificación de persona, se muestren las NOTICIAS  que le corresponde, monté los siguientes objetos visuales:

  • variable global en memoria  DEPARTAMENTO
  • variable global en memoria NIVEL
  • variable global en memoria TOTAL NIVELES

Las tres numéricas

  • Una búsqueda en la tabla NOTICIAS: NOTICIAS-PERSONA, en la que se busca por dos índices, primero por el de departamento, parte izquierda, valor $DEPARTAMENTO$  al que se le cruza la búsqueda por el índice NIVEL, entre límites, limite inicial $NIVEL$ , límite final $TOTAL NIVELES$
Búsqueda

Búsqueda de noticias-personas

  • Un proceso con origen ficha de PERSONAS que alimenta la rejilla que se mostrará en el formulario de modificación de la persona,con  las noticias a las que tiene acceso.

Proceso

En este proceso son fundamentales tres cosas: la cesta y los dos arrays.

Un array es un vector, con muchas dimensiones, es una forma de guardar datos de forma momentanea en un proceso y acceder a ellos dentro del mismo proceso.

El primer array (array departamento), guardará en cada item el DEPARTAMENTO que se guarda de la persona en la tabla CLASIFICACION y en el segundo (array nivel ) , el NIVEL. Con ello conseguimos tener por cada persona la terna DEPARTAMENTO-NIVEL, cada una en un array.

Sólo nos queda hacer un bucle for que se repita un número de veces igual al número de items que tienen los arrays para ir llamando a la búsqueda NOTICIAS-PERSONAS sucesivamente e ir añadiendo los resultados de cada una de ellas a una cesta local, que al final procesaremos y será la que se muestra en el formulario.

Podeis descargarlo aquí http://forum.velneo.com/es/viewtopic.php?p=80270#80270

A %d blogueros les gusta esto: