Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pag. 1
Veremos que aqu tenemos un conjunto de resultados devuelto del SQL Server mediante un Store
procedure que son los datos a procesar. Ms adelante durante el desarrollo, veremos que
conviene desarrollar un Store para este fin.
Lo que tenemos que lograr con esta informacin es procesarla para convertirla en algo llamado
CrossTable de la siguiente forma:
Pag. 2
Como se puede observar los subrubros se encuentran unificados y se cre una columna por mes
que antes nos apareca todo como fila en una tabla plana.
0
1
..
n
Como se puede observar, podemos interpretar que cada posicin de una fila, corresponder a un
subrubro y cada posicin de una columna corresponder a un determinado mes y ao. Hay que
tener en cuenta que el rango de fecha es parametrizado por el usuario, con lo que puede cambiar
de ao.
A esta matriz la denomin, matrz de valores, ya que va a contener los valores calculados que hay
que mostrar en cada celda del GridView.
Ahora, tengamos en cuenta que estamos trabajando con C#, con lo que el conjunto de resultados
viene dado a partir de un objeto DataTable y que luego para poder mostrarlo en el gridview,
tenemos que convertirlo en un DataTable especial, con lo que necesitamos un par de vectores
para los nombres de los campos de las columnas a generar, entonces, paralelo a las columnas
generamos la siguiente estructura:
Pag. 3
0
1
..
..
..
lCodSrb es una lista que contiene los cdigos de subrubros y lDesc contiene la descripcin de cada
uno de ellos. De esta forma lgicamente tendramos la estructura completa de una tabla de
referencias cruzadas en memoria.
Recodemos que la asignacin de las posiciones tiene que se dinmica siempre, con lo que en C# en
vez de definir los vectores como array [ ] los definiremos como List<T> que permite generar
posiciones a medida que el programa lo necesita.
ixF
= Indica que es un ndice (ix) que corresponde a una fila de la matriz (F).
ixC
= Indica que es un ndice (ix) que corresponde a una columna de la matriz (C).
Pag. 4
AgregarVector permite agregar un nuevo valor al vector. Esta rutina verifica si el dato a agregar ya
existe. Si existe, entonces, no lo agrega. Esto se debe ya que los vectores paralelos tanto por filas
como por columnas, deben contener datos nicos.
Pag. 5
BuscarPos permite localizar a partir de un valor, la posicin de la lista en que se encuentra dicho
valor. La idea es que tenemos que tener en cuenta de que para ubicar los datos en la matriz
bidimensional el programa se basar en las posiciones de sus vectores paralelos.
Devuelve 1 en caso que no haya encontrado el valor.
Por ltimo creamos una rutina para ubicar los valores en la matriz como se muestra a
continuacin:
Pag. 6
Pag. 7
Lo mismo hay que hacer con el vector que contiene las columnas a generar que se deben tomar a
partir de los registros del DataTable de entrada, ver el siguiente cdigo:
Pag. 8
La siguiente rutina permite crear la estructura que contendr el DataTable resultante. Ver el
siguiente cdigo:
Pag. 9
Aqu ya se ha finalizado la creacin de la clase. A continuacin hay que hacer uso de ella para crear
el DataTable que permitir generar la consulta de referencias cruzadas.
Pag. 10
El objeto se llama cvt_Ventas donde lo nico que recibe es el datatable de entrada, se hace el
llamado al procesar y por ltimo se retorna el DataTable resultante.
El objeto cvt_Ventas se debe instanciar de la siguiente forma:
Pag. 11
Pag. 12
Observemos que en este SP se prepara un campo llamado Columna donde unifico el mes y el ao,
donde si el parmetro que pasa el usuario se mueve de ao, no debera haber problemas.
Tener en cuenta que el ordenamiento de los datos es importante para que estas clases funcionen
correctamente, con lo que se debe utilizar la clausula ORDER BY del select resultante.
De esta forma logramos generar una consulta de referencias cruzadas y presentar la informacin
al usuario de una forma ms legible que tener muchas filas. Este tipo de consultas permiten
realizar comparativas y analizar el historial de ventas.
Pag. 13