Objetivo del documento
El objetivo de este documento es describir como se parametrizan los campos
a mostrar en los filtros de formulario y reportes.
Destinatarios
Toda
persona involucrada en el desarrollo de las distintas aplicaciones de la
empresa.
Historia
|
Creó/Revisó
|
Fecha
|
Detalle
|
|
Oscar Modesto
|
26/4/2011
|
Creación del documento
|
|
|
|
|
Para el filtrado de datos
de ciertos formularios y/o reportes, se ha desarrollado un control que permite
filtrar por distintos campos. Esto filtros son dinámicos y el mismo usuario
puede cambiar, crear o eliminar sus propios filtros.
Para que estos filtros
puedan funcionar, es necesario parametrizar ciertas tablas que hacen al
funcionamiento del mismo, y además, crear un sp que espere como argumento de
tipo varchar, el cual será el filtro a aplicar para filtrar los datos.
Ejemplo de cómo se
debería definir un SP
CREATE PROC pTest
@Filtro varchar(2000)
AS
BEGIN
DECLARE @SQL nvarchar(2000)
IF (@Filtro IS NULL OR @Filtro = '')
SET @Filtro = ' 1 = 1 '
SET @SQL = 'SELECT * FROM Monedas WHERE ' + @Filtro
EXEC sp_executesql @SQL
END
Para crear un nuevo
filtro proceder de la sigiente manera
1)
Crear un
registro en la tabla flTablasFiltros. Esta
tabla contiene un Id que identifica el filtro, es autoincremental, una
descripción que indique dónde se usa el filtro y opcionalmente un nombre de
objeto. Este nombre de objeto, es el nombre de tabla y no es necesario, salvo que en la consulta
creada dentro del SP que retorna los datos, tenga uno o más join. En ese caso
es importante indicar el nombre de objeto para el caso que puedan existir el
mismo nombre de columna en distintas tablas y alguna de estas columnas sean
utilizadas en el filtro.
Agregar NombreArchivoAnalisisDinamico cuando
necesitamos crear una tabla dinámica. Luego copiar archivo excel en:
S:\Horus\Plantillas\Analisis
2)
Agregar las
columnas que se mostrarán en los filtros en la tabla flTablasFiltrosColumnas.
Esta tabla consta de las sigientes columnas:
a.
IdTablaColumna
– Es autoincremental
b.
IdTabla –
Corresponde al ID asignado por el sistema al registro que se ha dado de alta en
el punto anterior.
c.
Columna –
Nombre de la columna a utilizar en el filtro, tiene que coincidir exactamente
con el nombre de columna definido en la tabla que participan en la consulta que
retorna los datos.
d.
Descripcion –
No es utilizada por ahora por el sistema, pero es obligatorio ingresar un
texto.
e.
Etiqueta –
Label del campo mostrado al usuario cuando arma el filtro.
f.
Longitud – Longitud
en caracteres del campo.
g.
TipoDeColunma
– Indica el tipo de dato a recibir, los valores son:
i.
0 –
Alfanumérico
ii.
1 – Entero
iii.
2 – Decimal
iv.
3 –
Alfabético
v.
4 – Date
vi.
5 – Bool
h.
UserControl – Para los campos que en su
correspondiente formulario de ABM tiene un desplegable, es necesario ingresar
el nombre de dicho control en esta columna. Este control debería estar dentro
del proyecto Comunes/Controles
i.
FormBuscar –
Para el caso de campos que tienen una FK y no contienen un desplegable (serían
los campos que tienen habilitado F1 en el form del ABM), es necesario indicar
el form que permite la busqueda del dato)
j.
NombrePropiedadFiltro
– En el caso que exista un formulario en la columna FormBuscar y este espero un
parámetro para cambiar el comportamiento del mismo, ingresar el nombre de dicha
propiedad en esta columna. Un ej puede ser el de comitente, frmComitentes,
donde espera una propiedad que filtra los tipos de comitente, como compradores,
vendedores, bolsa, etc.
k.
ValorPropiedadFiltro
– Ingresar en este campo el valor de la propiedad en el caso que se haya
indicado un nombre de propiedad en el punto anterior.
l.
FiltroWhere –
En este campo se puede ingresar una subconsultas que traiga un único valor,
esto se usa para el caso dónde existe la necesidad de comparar el resultado de
un cálculo y no el valor de un campo.
Algunos ejemplos:
|
Columna
|
Etiqueta
|
Long
|
Tipo
|
UserControl
|
FormBuscar
|
Nombre Prop.
|
Valor Prop.
|
Filtro Where
|
|
KilosFaltantes
|
Kilos Faltantes
|
8
|
1
|
NULL
|
NULL
|
NULL
|
NULL
|
(SELECT SUM(ISNULL(Cantidad, 0)) FROM EECarContratos WHERE IdCarSec =
EECaratula.IDCarSec) - (SELECT SUM(ISNULL(Cantidad, 0)) FROM EEContrDga WHERE
IdCarSec = EECaratula.IDCarSec)
|
|
FechaFijacionDesde
|
Fecha Fijación Desde
|
8
|
4
|
NULL
|
NULL
|
NULL
|
NULL
|
NULL
|
|
IdMoneda
|
Moneda
|
3
|
1
|
ctrSeleccionarMonedas
|
NULL
|
NULL
|
NULL
|
NULL
|
|
IdComprador
|
Comprador
|
10
|
1
|
NULL
|
frmComitentes
|
TipoComitente
|
8
|
NULL
|
En el primer registro se define un filtro que es un cálculo para obtener
los kilos faltantes
En el segundo registro, se define un filtro para un campo de tipo fecha
En el tercer registro se define un filtro para el campo moneda, como es un
desplegable, se indica el nombre del control
En el cuarto registro, se busca el comprador en la tabla comitentes, se
indica cual es el formulario para hacer la búsqueda del mismo y además se
indica nombre y valor de la propiedad que espera el formulario para seleccionar
por compradores.
3)
Agregar al
menos un registro en la tabla flFiltros. En esta tabla se guardan los distintos
filtros, para que el sistema funciones es necesario tener al menos definido un
filtro. Los datos son:
a.
IdFiltro –
Autoincremental
b.
IdTabla –
Debe coincidir con el asignado en el registro dado de alta en el punto (1)
c.
Descripcion –
Una descripción que indique que se está filtrando, es el que va a ver el
usuario en la aplicación.
d.
IdUsuario –
ID del usuario que creó el filtro
e.
EsDefault –
Al menos debe haber un default por registro existente en la tabla
flTablasFiltros. Es el filtro que busca cuando se abre el formulario.
f.
IdFiltroAmbito
– Indica el ámbito del filtro, los valores son:
i.
1 – Sistemas:
Estos filtros son creados por sistemas y el usuario no puede modificarlos ni
eliminarlos.
ii.
2 – Públicos:
Los crea el usuario y si elige este ámbito en el momento de crearlos, se hace
visible a todos los usuarios que ingresen al formulario o reporte que contenga
el filtro. El dueño puede cambiarlo y/o eliminarlo
iii.
3 – Privados:
Los crea el usuario, pero sólo lo puede ver el creador, los otros usuarios no
pueden ver los filtros privados de otros usuarios.
En caso de crear un
filtro dónde la mayoría de las columnas a filtrar son de una única tabla, se
puede usar el SP xxpInsertarColumnasFiltros que toma las columnas que tengan
una descripción en la propiedad decription de cada columna de la tabla y los
inserta en la tabla flTablasFiltrosColumnas. Una vez ejecutado este SP, es
necesario indicar los UserControl, FormBuscar, Nombre y valor de las
propiedades, en caso de ser necesario.
Este sp espero el nombre
de la tabla y el ID del filtro creado en el punto (1)