# Lupa

Este objeto se utiliza para crear condiciones de filtrado de listas.

Para hacer el filtrado podemos, o bien establecer la condición de filtrado en el propio filtro, o bien usar un [proceso](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/proceso).

Para crear un objeto de este tipo seleccionar la opción **nuevo objeto/lupa** del menú **objetos** de Velneo vDevelop o a través de la galería de objetos. Las propiedades de una lupa son:

### Identificador

Etiqueta alfanumérica que identifica de forma unívoca una **lupa** dentro del proyecto de aplicación. Este identificador será el que usemos para referenciarla en otras propiedades de otros objetos.

El **identificador** constará de mayúsculas y números exclusivamente. Al identificar de forma unívoca una lupa no puede haber duplicidad.

### Nombre

Etiqueta alfanumérica que servirá como descriptor de la lupa. Se usará para presentar información de la lupa en objetos y en los inspectores.

Podemos definir una etiqueta por cada idioma presente en el proyecto.

### Estilos

Podemos definir el estilo **privado** que limita el acceso del usuario final al objeto desde puntos donde no se haya programado el acceso al mismo.

### Comentarios

Esta propiedad nos permite documentar el uso de la lupa.

### Tabla asociada

[Tabla ](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/proceso/base-de-datos/tablas)de un [proyecto de datos](https://doc.velneo.com/26/velneo-vdevelop/buenas-practicas-de-programacion/buenas-practicas-de-organizacion/proyecto-de-datos-1-carpetas-esquemas-tablas-e-indices-complejos) heredado sobre la que se va a realizar el filtro.

### Formulario

Si hemos diseñado un [formulario](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores/proyecto-de-aplicacion/formulario) para petición de datos para el filtrado, lo seleccionaremos en esta propiedad. El formulario deberá tener su origen en la misma tabla que la lupa.

> **Nota**: esta propiedad no estará activa en las lupas que creemos dentro de [proyectos de datos](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores), pues el formulario es un objeto de proyecto de aplicación.

### Fórmula filtro

Permite especificar la condición del filtrado secuencial. El filtro se establecerá mediante una fórmula que podremos escribir usando el [asistente para edición de fórmulas](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores/editores/asistente-de-formulas). Para ello pulsar el botón que aparece al editar esta propiedad.

### Proceso

En lugar de establecer una **fórmula filtro** podemos definir un [proceso](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/proceso). El proceso debe tener como **origen** y como **destino** **lista** de la tabla asociada a la lupa.

La entrada del proceso será la lista sobre la que ejecutamos la lupa.

El proceso debe retornar una lista con el comando de instrucción de proceso [añadir lista a la salida](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores/proceso/basicos/salidaretornos#añadir-lista-a-la-salida).

La lista retornada será **cruzada** con la lista de origen, es decir, tras la ejecución de proceso la lista resultante serán los registros de la lista de origen que se encuentren en la lista retornada por el proceso.

#### Plano de ejecución

Podremos especificar el [plano](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores/proceso#planos-de-ejecución-de-procesos) de ejecución del proceso:

* **1er plano: local (síncrono)**: el proceso es ejecutado en el cliente.
* **3er plano: servidor (síncrono)**: el proceso será ejecutado en el servidor. En este caso, debemos tener en cuenta que no podemos usar en él comandos de instrucción de proceso que interactúen con la interfaz.

## Ejemplo

Supongamos que, en una lista de facturas y queremos dejar solamente las facturas del año en curso. Para ello necesitaremos:

Una [búsqueda](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/busqueda) de facturas por el índice del campo FECHA entre límites. Los límites inicial y final los resolveremos con dos variables locales llamadas: FCH\_INI y FCH\_FIN respectivamente.

Un [proceso](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores/de-aplicacion-y-datos/proceso) con origen y con destino **lista** de la tabla de facturas como el que sigue:

```
REM ( Creamos una instancia de la búsqueda )
Crear manejador de objeto ( bus, Búsqueda VTA_FAC_FCH_LIM@ejemplo )

REM ( Asignamos valores a las variables de la búsqueda 1 de enero y 31 de diciembre del año en curso )
Set variable local del objeto ( FCH_INI, setDate(year(currentDate()), 1, 1) )
Set variable local del objeto ( FCH_FIN, setDate(year(currentDate()), 12, 31) )

REM ( Disparemos la búsqueda y la enviamos a la salida )
Disparar objeto ( bus )
    Añadir lista a la salida
```

Las propiedades **fórmula filtro** y **proceso** son excluyentes, si usamos una, la otra será inactivada.

## Paso de variables entre el formulario, la lupa y el proceso

Es posible pasar variables locales del formulario a la lupa y de la lupa al proceso.

Para ello, lo que tenemos que hacer es **crear en los tres objetos las mismas variables locales** (mismo identificador y tipo).

La recomendación es copiar las variables que hemos creado en el formulario y pegarlas en la lupa y, si vamos a usar un proceso para el filtro, también en éste.

El mero hecho de declarar variables idénticas en los tres objetos hará que se pase su contenido de un objeto a otro sin que tengamos que hacer nada.

#### Ejemplo 1

Creamos un formulario con una variable de tipo fecha: FCH y lo asociamos a la lupa para que el usuario introduzca una fecha y filtrar la lista por ella.

En la lupa, crearemos una variable local idéntica: FCH, de tipo fecha.

En la **fórmula filtro**, escribiremos:

`#FCH = FCH`

#### Ejemplo 2

Vamos a mejorar el ejemplo del proceso que hemos explicado antes, para que se pueda filtrar entre dos fechas que el usuario quiera, así que haremos lo siguiente:

Creamos un formulario con dos variables de tipo fecha: FCH\_INI y FCH\_FIN y lo asociamos a la lupa para que el usuario introduzca los límites de fecha por los que filtrar la lista.

Copiaremos esas variables locales del formulario y las pegaremos en la lupa.

En el proceso, pegaremos también esas dos variables locales y lo dejaremos así:

```
REM ( Creamos una instancia de la búsqueda )
Crear manejador de objeto ( bus, Búsqueda VTA_FAC_FCH_LIM@ejemplo )

REM ( Asignamos valores a las variables de la búsqueda con los valores introducidos por el usuario en el formulario )
Set variable local del objeto ( FCH_INI, FCH_INI )
Set variable local del objeto ( FCH_FIN, FCH_FIN )

REM ( Disparemos la búsqueda y la enviamos a la salida )
Disparar objeto ( bus )
    Añadir lista a la salida
```

## Uso de las lupas

En tiempo de ejecución, las lupas públicas (estilo **privado** desactivado) se incluirán automáticamente en los siguientes puntos:

En [Velneo vClient](https://doc.velneo.com/26/velneo-vclient/que-es-velneo-vclient):

* En los menús en stock [lista](https://doc.velneo.com/26/velneo-vdevelop/proyecto-de-aplicacion/menu#lista) y [lista extendida](https://doc.velneo.com/26/velneo-vdevelop/proyecto-de-aplicacion/menu#lista-extendida), dentro del submenú **filtros**.
* En el [menú de contexto](https://doc.velneo.com/26/velneo-vdevelop/proyecto-de-aplicacion/rejilla#tipo-de-menú-de-contexto) **por defecto** y **por defecto extendido** de [rejillas](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores/proyecto-de-aplicacion/rejilla) y [rejillas avanzadas](https://doc.velneo.com/26/velneo-vdevelop/proyectos-objetos-y-editores/proyecto-de-aplicacion/rejilla-avanzada).

En [Velneo vDataClient](https://doc.velneo.com/26/velneo-vdataclient/que-es-velneo-vdataclient):

* En el menú de contexto de las rejillas, dentro del submenú **filtros**.
* En el menú de listas, dentro del submenú **filtros**.

En Velneo vDataClient solamente estarán disponibles las lupas que programemos en el proyecto de datos.
