martes, 10 de abril de 2018

Cómo generar un reporte con parámetros y pasarlos a Report Viewer (Visual Studio 2015 + SQL Server 2012)


En esta entrada les muestro los pasos para crear un reporte con parámetros y cómo pasarlos de los TextBox del formulario a Report Viewer,  utilizando  Visual Studio 2015 y SQL Server 2012.

Esta es la forma más cómoda y sencilla que he descubierto para trabajar con parámetros y espero que les pueda ser útil.

Para este ejemplo deberás crear una tabla llamada Ventas con la siguiente estructura e información:




A partir de esta tabla genera un procedimiento almacenado (SP) llamado reporteventas, el cual será el encargado de recibir los parámetros de tipo fecha y recopilar la información que deseamos plasmar en el reporte.


Observa que he creado dos variables de tipo Date (FechaInicial y FechaFinal) las cuales, al ejecutar el SP harán referencia al campo Fecha de la tabla Ventas.


Es importante que te asegures de que el SP funciona:


Ahora pasemos a nuestro proyecto en Visual Studio.

Tengo creado un formulario con los siguientes controles:

Dos label, dos DateTimePicker y un botón desde el cual se imprimirá el reporte.


El siguiente paso será agregar el diseñador de reporte de Report Viewer. Para ello, agrega un nuevo ítem al proyecto y da clic en Reporting/Report y asígnale un nombre, para este ejemplo lo he llamado DiseñoReporte.

Nota: Si no te aparece la presente opción es necesario que corras el ejecutable de Visual Studio e instales  DataTools.


Posteriormente se mostrará el diseñador de reportes de Report Viewer.

El primer paso es configurar un origen de datos, es decir, indicarle desde qué instancia, base de datos y tabla (En nuestro caso SP) deberá traer la información.

Da clic derecho sobre Datasets/Add Dataset, si el diseñador detecta que aún no tienes configurado un origen de datos (Como en este ejemplo) solicitará que configures uno.



Se mostrará la siguiente ventana donde hay que seleccionar el origen de datos, en este caso es DataBase/Next.




En el siguiente apartado indica el nombre de la instancia de SQL/ credenciales de autenticación por SQL, así como el nombre de la base de datos de la cual se consultará la información.


Selecciona la base de datos:


Luego se mostrará la estructura de la base de datos seleccionada (Tablas, Vistas, SP, Funciones). 

Selecciona Stored Procedures/y marca el SP creado inicialmente. Por último es necesario asignar un nombre al origen de datos.




Si has seguido los pasos hasta aquí, tendrás una vista del origen de datos.  Para este ejemplo el SP y los respectivos campos que lo conforman.




De lado izquierdo se mostrará esta misma información para poder utilizarla en el diseñador del reporte.




El siguiente paso, es comenzar a dar forma al reporte que se presentará.

Agrega los parámetros (Parameters/Add Parameter) que en este caso serán la fecha inicial y fecha final y asígnales un nombre.


Una vez capturados los parámetros, selecciónalos y arrástralos hasta el diseño del nuevo reporte como se muestra en la imagen.



Agrega una tabla al diseño del reporte que es donde se mostrarán los datos que contiene el DataSet.

Una vez que se agrega posiciónate sobre el lado derecho de cada celda para seleccionar el campo que deseas se muestre en cada espacio, como se muestra en la imagen.



Si lo prefieres también puedes agregar una fila para mostrar totales de las columnas.


Una vez que el diseño del reporte esté listo, pasemos al formulario desde el cual se capturarán los parámetros y se mostrará la información del reporte.


En el formulario es necesario agregar un elemento de tipo ReportViewer. Una vez agregado, en la esquina superior derecha deberás seleccionar el formato de reporte (.rdlc) que se creó anteriormente. 


Una vez seleccionado el reporte, es importante verificar que en la parte inferior del formulario se agreguen automáticamente el DataSet, BindingSource y el TableAdapter con el nombre del SP.


Ahora pasemos al código del formulario. Observarás que de forma automática se agregaron dos líneas de código en el evento load del mismo. Es necesario pasarlas al evento click del botón.

La primer línea es la encargada de recibir los parámetros y pasárselos al DataSet para que éste se encargue de traer la información que ocupamos visualizar. Inicialmente marca un error en Fill, esto se debe a que aún no le hemos indicado de qué campos deberá tomar los valores de los parámetros que ocupa el SP.


El código, ya con campos de parámetros incluidos deberá quedar de la siguiente forma:



Entre las dos líneas de código anteriores he codificado la forma como se deberá pasar el rango de fecha, proveniente del DateTimePicker, a Report Viewer.

Observa que he indicado el número de parámetros que se pasarán, en este caso son dos y por eso he puesto 1(El conteo comienza desde cero). En la línea siguiente se manda llamar el nombre textual de cada parámetro que se definió anteriormente en el diseño del reporte y se asocia con el campo del cual tomará su valor.

Es importante mencionar que en el formulario donde se cargará la información deberás agregar la siguiente referencia, de lo contrario marcará un error en Parameters:

Imports Microsoft.Reporting.WinForms

Una vez hecho lo anterior solo queda ejecutar el desarrollo y deberás obtener algo muy parecido a lo que se muestra en la siguiente imagen donde el rango de fechas capturado en los DateTimePicker se visualizan también en el reporte:


Ahora solo queda que adaptes el código a tu desarrollo y listo.


¡Hasta la próxima!

Ing. Guadalupe López

"Ningún conocimiento es válido sino se comparte"