
Hoy vamos ver cómo montar un Panel de búsqueda alimentando la búsqueda con variables locales y guardando el resultado en una cesta.
Vamos a utilizar como ejemplo una búsqueda de Artículos, filtrando por Referencia, Nombre, Estado, Marca del artículo y período de alta en la base de datos.
Los objetos que vamos a utilizar serán:
- Una tabla PARAM_BUSQUEDA
- Una cesta privada de la tabla Artículos ARTICULOS_PRIVADO
- Una búsqueda de Artículos ARTICULOS
- Una rejilla de Artículos ARTICULOS
- Formulario de la tabla PARAM_BUSQUEDA que es el que utilizaremos para realizar el mantenimiento de Artículos ARTICULOS_MANTEN
- Una acción VER_ARTICULOS y dos procesos:
- VER ARTICULOS que nos mostrará el resultado de la búsqueda de artículos
- ARTICULOS que servirá para lanzar el formulario ARTICULOS_MANTEN
Lo primero será crear la tabla PARAM_BUSQUEDA. En esta tabla iremos creando todos los campos por los que queramos buscar en las distintas búsquedas del programa.

En esta caso metemos un campo enlazado a una tabla estática EST_ARTICULOS donde están los distintos estados que pueden tener los artículos. Un campo al maestro de MARCAS y los campos referentes a la alta de los artículos.
La cesta ARTICULOS_PRIVADO será utilizada para meter ahí los registros resultantes de la búsqueda que hagamos. Desde el fomulario de mantenimiento lo que haremos será procesar la cesta para ver los registros. Esa cesta ha de ser privada.
Crearemos la búsqueda ARTICULOS. En esta búsqueda crearemos las variables locales que usaremos en la búsqueda

En las resoluciones de los distintos índices pondremos las distintas variables locales que hemos declarado.
Lo siguiente será crear un proceso VER_ARTICULOS que es el que utilizaremos para ver los artículos desde el formulario de mantenimiento.
Este proceso tendrá como origen la ficha de PARAM_BUSQUEDA y como destinto la lista de la tabla ARTICULOS.

Lo siguiente será crear el formulario de mantenimiento ARTICULOS_MANTEN que es donde se ejecutará la búsqueda y se mostrarán los resultados.
El formulario lo hacemos de la tabla PARAM_BUSQUEDA para poder seleccionar los campos enlazados a otra tablas. Si el formulario fuera sin origen sólo podríamos usar variables y deberíamos controlar por proceso el acceso a datos de otra tablas.

Como se ve en la imagen el control objeto que mostrará los artículos tiene como primer objeto el proceso VER_ARTICULOS y como segundo objeto la rejilla ARTICULOS.
Eventos necesarios en este formulario:
- INICIALIZAR que se disparará al inicializar el formulario. Este evento nos limpiará la cesta. Con esto conseguiremos que al llamar al formulario la lista de registros se muestre vacía, no se mostrarán registros hasta que el usuario decida buscar. Esto está pensado así para optimizar la presentación del formulario en internet. También damos un valor incial a los campos por los que se han de buscar.

- BUSCAR que dispararemos desde el botón que realizará la búsqueda. En este evento lo primero que haremos será guardar en variables locales los valores de los campos por los que vamos a buscar. Limpiaremos la cesta. Crearemos un manejador de objetos para la búsqueda ARTICULOS a la que le pasaremos los valores a sus variables locales y ejecutaremos en 3º plano optimizando el tiempo de respuesta en la devolución de los registros.

Ya sólo nos quedará disparar este formulario.
Al tener el formulario ARTICULOS_MANTEN como origen una tabla no podemos dispararlo directamente desde un acción mediante Disparar objeto. Ya que sólo podemos disparar así a formularios sin tabla de origen.
Lo que hemos hecho es crearnos un proceso ARTICULOS que no tendrá ninguna línea de código. Sin tabla de origen y con destino la ficha de la tabla PARAM_BUSQUEDA.
La acción que disparará este formulario tendrá como Objeto1 el proceso ARTICULOS y como Objeto2 el formulario ARTICULOS_MANTEN.
Notas:
- En el evento INICIALIZAR hemos tenido que dar valores inciales a los campos que usaremos para buscar ya que no hemos conseguido que respete los valores inciales que tienen los campos en las tablas.
- Si se borra a mano el valor de los campos fecha éstos no se quedan realmente en blanco (Incidencia de QT que está resolviendo Velneo). Esto puede provocar que no salgan registros al buscar.
Esto es sólo una forma de hacerlo. Esperamos que os sirva para experimentar y mejorarlo.