miércoles, febrero 23, 2011

C# - Aplicación de Escritorio, Sistemas de Ventas Part V - Creación de Reporte (Crystal Report)


"Si usa algún código del siguiente tutorial, den el icono de ME GUSTA del Facebook que se encuentra en su mano derecha, para que se vuelva Seguidor del Blog y también comentenos que tal les pareció el tutorial"

1. Entorno


  • SQL Server 2008
  • Visual Studio 2008

2. Introducción


Continuando con el tutorial del sistemas de ventas con C#, ahora crearemos el reporte con Crystal Report que nos mostrara el documento creado producto de la venta que hemos realizado. Como este es un tutorial con un fin didáctico, para crear el reporte nosotros escribiremos el código auto generado por la inserción de la venta, aunque lo ideal seria que desde la capa de negocios obtengamos el código que se genero y se muestre el reporte de forma automática.

3. Desarrollo


3.1. Diseño del formulario

Ahora debemos de modificar nuestro formulario que hemos creado anteriormente que se llamaba frmRegistrarVenta. Si recordamos este formulario tenia un Tab Control con dos pestañas, una que se llamaba Registrar y otro que se llama Reporte. Y justo en esta ultima pestaña es donde vamos a poner nuestro reporte. Para poder mostrar los reportes en C#, debemos de agregar un componente que se llama CrystalReportViewer que se encuentra en nuestro cuadro de herramientas en el grupo de Informe



















Y luego en nuestro formulario hacemos el siguiente diseño
















3.2. Creando nuestro DataSet

Para poder crear un reporte para Crystal Reporte, lo primero que se tiene que hacer es crear un DataSet en donde se almacenara todo nuestro datos de la consulta y nos servira para llenar nuestro reporte y para eso les prepare el siguiente video para que puedan crear un DataSet de la manera mas rápida y sencilla.




3.3. Creando nuestro Reporte en Crystal Report

Ahora debemos de diseñar nuestro reporte con la información que obtenemos de nuestro DataSet que hemos creado anteriormente, para eso también les prepare otro vídeo.



El reporte al final debería tener el siguiente diseño











3.4. Código Fuente

Ahora nos vamos a ir al evento clic del botón "btnReporte" de nuestro formulario "frmRegistrarVenta" y pondremos el siguiente código fuente

private void btnReporte_Click(object sender, EventArgs e)
{
  try
  {
    //Creamos el documento 
    CrystalDecisions.CrystalReports.Engine.ReportDocument rpt=new CrystalDecisions.CrystalReports.Engine.ReportDocument();
    //Obtenemos el documento que se encuentra en nustra carpeta bin\debug\crReporte.rpt
    rpt.Load( Application.StartupPath + "\\crReporte.rpt");
    //Lleanamos el reporte con la información que obtenemos de la base de datos
    rpt.SetDataSource(NegVenta.ObtenerVenta(Convert.ToInt32(this.txtCodigoVenta.Text)));
    //Establecemos los datos al reporte
    this.crvReporte.ReportSource=rpt;
    //Refrescamos nuestro reporte
    this.crvReporte.RefreshReport();
  }
  catch (Exception ex)
  {
  }
}

4. Ejemplo de la Aplicación


19 comentarios:

Muy clara tu explicacion solo me queda duda de lo que hace "NegVenta.ObtenerVenta()" en realidad de como lo hace... no se si lo explicaste anteriormente.

saludos!!

Ahí estamos llamando a un método de la capa de negocios ... que nos ayudara a poblar nuestro reporte en crystal report. Exactamente nos devuelve un datatable :D

buen pos men una ayuda plis cuando ejecuto el proyecto me aparece el formulario del proyecto q creamos en el principio del tuto y no hay manera de enlazarlo a los formularios de la capapresentacion ayuda

Se tiene que agregar como referencia al proyecto para comunicar las diferentes capas.

genial tu aporte...muchas gracias... aprovechando la oportunidad..en la parte V Creación de reportes.. lo ejecuto y todo a la perfección..ahora como es de facturación me gustaría saber como hacer para que el reporte no se muestre en pantalla sino que al dar click en guarda la factura se mande a imprimir directo el reporte que en este caso es la factura... espero haberme explicado...

En el componente CrystalReport en el formulario del VB pulsas el boton derecho, propiedades y escoges dentro de general TO PRINT y cuando lo uses sale en la impresora directamente.

Tambien puedes hacer desde codigo:

'impresora
CrystalReport1.Destination = crptToPrinter
'ventana
CrystalReport1.Destination = crptToWindow

Perdona mi ignorancia pero no encuentro el componente CrystalReport solo tengo el visor y documents de crystal.. he buscado en las referencias de mi proyecto y no lo encuentro en la cabecera del using tengo using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.ReportSource;
y no me aparece.. espero tu ayuda..

Tienes que agregar las referencias al proyecto. Aunque automáticamente se agrega las referencias cuando agregas el reportviewerd del crystal report. Saludos!!!

Que tal amigo muy bien explicado pero solo tengo una dudo de donde sale "NegVenta.ObtenerVenta" quien se llama asi, otro formulario? el nombre de la tabla? o el campo?, te lo agradecaria, gracias..

Muy buen post men, te hago una consulta yo estoy entrando en el tema y mi problema es que cuando quiero crear el dataset y enlazarlo con la BD no puedo, me dice que no tengo los permisos sobre la bd . Si me podes ayudar con eso te agradecería mucho. Gracias

Tiene que fijarte si el usuario de tu base de datos tienes los privilegios necesarios de lectura. Yo use el usuario SA que tiene privilegio total.

Felicitaciones por tu post!! una pregunta ¿ como creaste la carpeta bin donde alamcenas las dll de las librerias?

se crea por defecto esa carpeta cuando se crea el proyecto

Al hacer clic en el botón me tira una excepción de filenotfound.
La cual es la siguiente:

No se puede cargar el archivo o ensamblado 'file:///C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet1\crdb_adoplus.dll' ni una de sus dependencias. El sistema no puede encontrar el archivo especificado.


Saben de alguna solución?

Estoy usando Visual Studio 2010 y la ultima version de Crystal!

Desde ya muchas gracias!

Ya lo solucioné!! Había que agregar esta línea al app.config



Muchas gracias por el tutorial!

Gracias por tan excelente tutorial

Javier, from El Salvador!

Hola excelente aporte, sabes como puede funcionar para web también??=?

Gracias por el aporte amigo!

Éstos son los tipos de tutoriales que se deben postear.

Muy Buen aporte profe, felicitaciones ! <\a1>

Estoy pasando el proyecto a un sistema WEB en Visual Studio 2012 y SQL server 2012. Necesité instalar CrystalReports para Windows 8, pero está funcionando muy bien.

Les dejo el enlace de CrystalReports http://scn.sap.com/docs/DOC-35074