viernes, 21 de septiembre de 2018

Parametrización tablas de filtros




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

Tablas de parametrizacion

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)








No hay comentarios.:

Publicar un comentario

Nota: sólo los miembros de este blog pueden publicar comentarios.