Reportes con Crystal Report en Windows Form y parámetros StoreProcedure

Por caezar 0 Comentarios agosto 22 2009


Existen varias formas de crear reportes en Crystal Report, una en particular que me parece tiene una alta mantenibilidad es la de crear código dinamico, es decir parámetros, conexiones, que puedan ser cambiados directamente en el código de nuestras clases.

Explicaré a usar el asistente para crear reportes rapidamente y luego a modificar el código para que sea todo dinámico.

Bien a programar:

Necesitará la base de datos Northwind de SQL Server 2005 si es que desea probar el tutorial.

Paso 1.- Primero crearemos un procedimiento almacedado con parámetros de entrada en SQL Server para luego mostrarlo en un reporte. Abra el SQL Server 2005 y en la base de datos Northwind ejecute el siguiente código:

USE NORTHWIND;
GO
CREATE PROC ObtenerTotalMesYear
@Fecha nvarchar(10)
AS
SELECT Mes=DateName( month , DateAdd( month ,CAST(SUBSTRING(CONVERT(NVARCHAR(10),OrderDate,111),6,2) AS INT) , 0 ) – 1 ),
Total=ROUND(SUM(([order details].UnitPrice*[order details].Quantity)-([order details].UnitPrice*[order details].Quantity)*[order details].Discount),2)
FROM [order details] INNER JOIN Orders on [order details].OrderID = Orders.OrderID
WHERE DATENAME(yy,Orders.OrderDate) =@Fecha
GROUP BY SUBSTRING(CONVERT(NVARCHAR(10),Orders.OrderDate,111),6,2)
ORDER BY SUBSTRING(CONVERT(NVARCHAR(10),Orders.OrderDate,111),6,2)

USE NORTHWIND;

GO

CREATE PROC ObtenerTotalMesYear

@Fecha nvarchar(10)

AS

SELECT Mes=DateName( month , DateAdd( month ,CAST(SUBSTRING(CONVERT(NVARCHAR(10),OrderDate,111),6,2) AS INT) , 0 ) – 1 ),

Total=ROUND(SUM(([order details].UnitPrice*[order details].Quantity)-([order details].UnitPrice*[order details].Quantity)*[order details].Discount),2)

FROM [order details] INNER JOIN Orders on [order details].OrderID = Orders.OrderID

WHERE DATENAME(yy,Orders.OrderDate) =@Fecha

GROUP BY SUBSTRING(CONVERT(NVARCHAR(10),Orders.OrderDate,111),6,2)

ORDER BY SUBSTRING(CONVERT(NVARCHAR(10),Orders.OrderDate,111),6,2)

Lo que hace este procedimiento es mostrar las ventas totales de cada uno de los meses, según el año ingresado, pregunten si tienen dudas acerca del código anterior.

Paso 2.- Abrimos el Visual Studio y creamos un nuevo proyecto de Aplicación para Windows, asignamos un nombre al mismo.

Haga clic derecho en el Proyecto>Agregar>Nuevo Elemento y escoja el reporte Crystal.

Asignele un nombre: “ReporteVentas” y haga click en agregar.

3

Paso 3 .- Se abrirá la siguiente pantalla, usaremos el asistente de informes. Presionamos aceptar.

Asistente

Paso 4.- En la siguiente pantalla, despliegue crear nueva conexión y luego OLE DB (ADO), se abrirá un formulario para seleccionar un proveedor de SGBD.Conectando

Paso 5.- Seleccione la opción SQL NATIVE CLIENT y haga clic en siguiente.

proveedor

Paso 6.- Seleccione su Servidor de Base de datos, marque el check de seguridad Integrada, y seleccione la base de datos Northwind y luego presione finalizar.

Servidor

Paso 7.- Expanda el servidor y ubique la base de datos Northwind, despliegue dbo y en procedimientos almacenados, busque el procedimiento que creamos ObtenerTotalMesYear. Seleccionelo y marquelo a la derecha con el botón “>”.

Store

Paso 8.- En la siguiente ventana presione aceptar, luego siguiente.

Param

Paso 9. Despliegue el árbol de campos disponibles, seleccione los campos que desee mostrar y paselos a la derecha. No vamos a personalizar más el reporte, presionamos Finalizar.

Campos

Paso 10. Se observará la siguiente pantalla, acomode los campos a su gusto:

Reporte

Paso 11. Arrastre desde campos de parámetros el valor que se ingresa desde pantalla, para que se muestre en el reporte el año que ingresamos:

ReportePersonalizado

Veamos una vista previa del informe, ingrese por ejemplo 1996 cuando le pida ingresar un parámetro.

vista

Paso 12. Bien es hora de programar, lo anterior funciona pero no es dinámico, imagine que el servidor de base de datos cambia de lugar, tendriamos que modificar cada uno de nuestros reportes, crearemos una sola conexión:

Agregaremos una clase llamada conexión:


private string servidor = "JPANTOJA\\SQLEXPRESS";

private string basededatos = "Northwind";

private string usuario = "PREMIER\\rmauricio";

private string password = "";

public string Password

{

get { return password; }

set { password = value; }

}

public string Servidor

{

get { return servidor; }

set { servidor = value; }

}

public string Basededatos

{

get { return basededatos; }

set { basededatos = value; }

}

public string Usuario

{

get { return usuario; }

set { usuario = value; }

}

Dirigirse al formulario y agregar un componente Crystal Report Viewer y los demás componentes. Al comboBox lo llenamos con los años: 1996, 1997, 1998.

formulario

En el formulario escribir el siguiente código, no olviden agregar las referencias para Crystal Report.


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

//Referencias

using CrystalDecisions.CrystalReports.Engine;

using CrystalDecisions.Shared;

using CrystalDecisions.ReportSource;

namespace ReporteVentas

{

public partial class Form1 : Form

{

ReporteVentas report = new ReporteVentas();

ParameterDiscreteValue FechaDV = new ParameterDiscreteValue(); //parametro de entrada

Conexion con = new Conexion();

public void CargaReporte(string FechaParam)

{

FechaDV.Value = FechaParam;

report.SetParameterValue("@Fecha", FechaDV);//Asignando el parametro

//de entrada con el parametro del storeprocedure

crystalReportViewer1.ReportSource = report; //cargando el reporte

}

public Form1()

{

InitializeComponent();

report.DataSourceConnections[0].SetConnection(con.Servidor, con.Basededatos, con.Usuario, con.Password);//Cargando Conexion

}

private void button1_Click(object sender, EventArgs e)

{ //Ejecutando reporte

if (comboBox1.SelectedItem != null)

{

CargaReporte(comboBox1.SelectedItem.ToString());

}

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{ //Liberando recursos

report.Dispose();

crystalReportViewer1.Dispose();

}

}

}

Por si no lo recuerdan, el método Form1_FormClosed fue agregado de la siguiente forma:

Dando doble clic en Form Closed.

closed

Ahora ejecutamos el programa, seleccionamos un año y presionamos el botón mostrar.

Crystal

Acá tienen un ejemplo para Web http://www.datanoia.com/reporte-web-con-crystal-report-usando-store-procedure.html

¡Espero les haya sido de ayuda! Buen día.

Related Posts with Thumbnails

No related posts.

Categorias: Programación

  • Recibe nuestros articulos via Feed
  • Recibe nuestros articulos en tu Mail
  • Enviar a Meneame!
  • Siguenos en Facebook
  • Siguenos en Twitter
  • Siguenos en Google Buzz
  • Youtube

Destacados

Struts en Netbeans 6

Uno de los Frameworks más maduros y robustos del medio ...

Facebook es el iPhon

Facebook no sólo es la red social más grande en ...