Sie sind auf Seite 1von 23

REPORTES CON OBJETOS EN C#

Para el desarrollo de ejemplo se utilizar la aplicacin Sistema de Facturacin basada en


formularios Maestro-Detalle proporcionada por el docente que se encuentra en la carpeta
FormularioMaestroDetalleVentaConReportes->FormularioMaestroDetalleVenta - Simplificado.
La Figura 4.1 muestra el formulario Venta y la Figura 4.2 muestra el Formulario Venta-Detalle
despus de su desarrollo. Se han ingresado datos para poder mostrar su funcionamiento.
Figura 4.1: Formulario Venta

Figura 4.2: Formulario Venta-detalle

En la Figura 4.3 se muestra el explorador de soluciones donde se visualizan todos los objetos
utilizados al final del desarrollo de la aplicacin
1

Figura 4.3: Explorador de soluciones

En la Figura 4.4 se muestra el diagrama de clases donde se visualiza el diagrama de clases


despus del desarrollo de la aplicacin.
Figura 4.4: Diagrama de Clases

La Figura 4.5 muestra la configuracin de proyecto, la cual tiene que ser personalizada
utilizando como versin de .NET Framework destino: el .NET Framework 4. Esto se realiza
haciendo en el Men Principal del Visual Studio 2010 Proyecto->Propiedades.
Figura 4.5: Aplicacin en el explorador de soluciones
2

En la Figura 4.6 se muestra la configuracin de la aplicacin que se realiza en el archivo


app.config. Esto permite aseguran que la aplicacin corra con versiones anteriores de
Framework. Solo modifique el cdigo de app.config si es necesario (no corre la
aplicacin por cuestiones de versin de VS-2013 o Crystal Report).
Figura 4.6: Cdigo del archivo app.Config

Para el desarrollo del ejemplo se proporciona la carpeta que contiene la aplicacin que ser
terminada y posteriormete ejecutada. Para agregar un Conjunto de datos (dataSet) se tienen
que realizar las siguientes actividades:

Haga clic derecho en SistemaVenta Seleccione Agregar->Nuevo elemento, tal como se


visualiza en la Figura 4.7.
Figura 4.7: Seleccin para agregar un nuevo elemento
3

En agregar nuevo elemento seleccione datos en Plantillas instaladas y Conjunto de datos


(DataSet) en Elementos de Visual C#. Seleccione como se presenta en la Figura 4.8. Luego
haga clic en el botn de comando Agregar.
Figura 2.8: Diseador de DataSet

Verifique que Diseador de Conjunto de datos (DataSet) se presente como en la Figura 4.9.
Figura 4.9: Diseador de Conjunto de Datos (DataSet)
4

En el rea de diseo del Conjunto de datos (DataSet) haga clic derecho y seleccione del
men conceptual Agregar > Tabla de datos (Data Table). En la Figura 4.10 nuestra lo
indicado.
Figura 4.10: Seleccin Agregar Tabla de datos (Data table)

En el rea de diseo del Conjunto de datos (DataSet) seleccione el objeto DataTable1 y


luego haga clic derecho y seleccione del Men Conceptual Agregar Columna. En la Figura
4.11 nuestra lo indicado. Repita el proceso 4 veces para crear 4 columnas.
Figura 4.11: Seleccin Agregar Columna
5

Verifique que el diseador del Conjunto de Datos (DataSet) se visualice como en la Figura
4.12, en la cual se observa que se ha creado un DataTable con cuatro columnas (cantidad,
descripcion, precioDeVenta y subtotal). Cambie el nombre del DtaTable por el de
DataTableVentaDetalle. Luego grabar el DataTable.
Figura 4.12: DataTable1

Para crear un reporte utilizando Crystal Report se debe seguir el siguiente procedimiento:

Hacer clic derecho en el proyecto SistemaVenta y seleccione Agregar->Nuevo Elemento. En


la Figura 4.13 nuestra lo indicado.
Figura 4.13: Agregar nuevo elemento

.
Seleccione Reporting>Crystal Reports. Luego escriba CrystalReporteFactura como nombre
del Reporte. En la Figura 4.14 nuestra lo indicado. Luego haga clic en el botn de comando
Agregar.
Figura 4.14: Seleccin Reporting Crystal Reports

En Galera de Crystal Reports seleccione Usar Asistente de Informes. Luego elegir un


asistente Estndar. Finalmente haga clic en el botn de comando Aceptar. En la Figura
4.15 nuestra lo indicado.
7

Figura 4.15: Seleccin de Usar asistente de informes y Asistente Estndar

Seleccione en datos del proyecto ADO.NET DataSets SistemaVenta.dataSetfactura DataTableVentaDetalle. Luego haga clic en el botn de comando
nuestra lo indicado.

. En la Figura 4.16

Figura 2.16: Seleccin de datos para elaborar el informe

Verifique que la Ventana del Asistente para la creacin de informes estndar se


visualice como en la Figura 4.17. Luego haga clic en el botn de comando Siguiente.
Figura 4.17: Asistente para la creacin de informes estndar
8

Seleccione todos los campos del DataTableVentaDetalle haciendo clic en el botn de


comando
mostrar.

La Figura 4.18 muestra el Asistente en la seleccin de campos a


Figura 4.18: Seleccin de campos a mostrar

Verifique que la ventana del asistente para la creacin de informes estndar se visualice
como en la Figura 4.19. Luego haga clic en el botn de comando Finalizar.
Figura 4.19: Asistente para la creacin de informes estndar

Verifique que la ventana del reporte se visualice como en la Figura 4.20.


Figura 4.20: Ventana de reporte

Los parmetros son utilidades que nos permiten comunicar datos entre objetos. Para
agregar parmetros que nos permitan enviar datos desde la aplicacin en C# (Formulario
FormImprimir.cs) al reporte desarrollado en Crystal Report se debe activar el Explorador de
campos. En el Explorador de campos haga clic derecho en campos de parmetros y
selecciones Nuevo. La Figura 4.21 muestra lo indicado.
10

Figura 4.21: Ventana de reporte

En el formulario para crear un nuevo parmetro, en nombre (nombre del parmetro)


escriba fecha y en tipo (tipo de datos) seleccione Fecha. En Lista de valores seleccione
esttico. Luego haga clic en el botn de comando Aceptar. La Figura 4.22 lo indicado.
Figura 4.22: Ventana de reporte

Agregue los parmetros tal como se muestra en la Figura 42.23. Cada parmetro debe
corresponder al tipo de dato segn el atributo de la clase respectiva (Venta y/o
VentaDetalle).
Figura 4.23: Explorador de campos
11

Agregue objetos texto (


), objetos lnea ( ) y objetos cuadro ( ) en la ventana de
Diseo del Reporte. Esto se realiza arrastrando los objetos del explorador de campos
(objetos texto, objetos y objetos) hacia la ventana de Diseo de reportes. Verifique que el
diseo del reporte se visualice como en la Figura 4.24
Figura 4.24: Ventana de diseador de reportes

Hacer clic derecho en el proyecto SistemaVenta y seleccione Agregar - Nuevo Elemento. En


la Figura 4.25 nuestra lo indicado.
Figura 4.25: Agregar nuevo elemento

12

.
Seleccione Windows Forms>Windows Forms. Escriba FormularioImprimir como nombre del
Formulario. En la Figura 4.26 nuestra lo indicado.
Figura 4.26: Seleccin Windows Forms- Windows Forms

Del cuadro de herramientas arrastre el control CrystalReportViewer. En la Figura 4.27


nuestra lo indicado.
Figura 4.27: Seleccin de control CrystalReportViewer al Formulario FormImprimir
13

Verifique que el Formulario FormImprimir se visualice como en la Figura 4.28. y el icono


sealado por la fecha. Este icono activa el men conceptual Tareas del CrystalReportViewer
Figura 4.28: Ventana FormularioReporte

Del men conceptual Tareas del CrystalReportViewer seleccione Elegir un informe en


Crystal tal como se presenta en la Figura 4.29.
Figura 4.29 Men conceptual tareas de CrystaReportViewer

14

Verifique que el FormImprimir.cs se presente como en la Figura 4.30


Figura 4.30: Vista del formulario FormImprimir.cs

Haga doble clic en el borde superior de la Ventana FormImprimir.cs [Diseo]* de la Figura


4.31 para agregar cdigo en el evento Load de la ventana. Luego agregue el cdigo que se
muestra en la Figura 4.32
Figura 4.31: Cdigo del Formulario FormImprimir
15

Figura 4.32: Cdigo del Formulario FormImprimir (Cdigo)

A continuacin se presenta el cdigo de la Clase FormImprimir para que verifique lo


anteriormente realizado.
namespace SistemaVentaFactura
{ public partial class FormularioImprimir : Form
{ Venta oVenta = new Venta();
public FormularioImprimir(Venta oVenta)
{ this.oVenta = oVenta;
InitializeComponent();

16

}
private void FormImprimir_Load(object sender, EventArgs e)
{ // Alimentar los campos de base de datos
DataSetVenta oDataSetVenta = new DataSetVenta();
for (int i = 0; i < oVenta.ListVentaDetalle.Count; i++)
{ oDataSetVenta.Tables[0].Rows.Add(new object[]
{ oVenta.ListVentaDetalle[i].cantidad.ToString(),
oVenta.ListVentaDetalle[i],
oVenta.ListVentaDetalle[i].precioDeVenta.ToString(),
oVenta.ListVentaDetalle[i].subtotal.ToString()

);
}
CrystalReporteVenta oCrystalReporteFactura = new CrystalReporteVenta();
oCrystalReporteFactura.SetDataSource(oDataSetVenta);
// Alimentar los campos de parmetros
oCrystalReporteFactura.SetParameterValue("fecha", oVenta.fecha);
oCrystalReporteFactura.SetParameterValue("idDocumento", oVenta.idDocumento);
oCrystalReporteFactura.SetParameterValue("serie", oVenta.serie);
oCrystalReporteFactura.SetParameterValue("numero", oVenta.numero);
oCrystalReporteFactura.SetParameterValue("idVenta", oVenta.idVenta);
oCrystalReporteFactura.SetParameterValue("idCliente", oVenta.oCliente.idCliente);
oCrystalReporteFactura.SetParameterValue("clienteApellidoNombre", oVenta.oCliente.apellidoNombre);
oCrystalReporteFactura.SetParameterValue("direccion", oVenta.oCliente.direccion);
oCrystalReporteFactura.SetParameterValue("idVendedor", oVenta.oVendedor.idVendedor);
oCrystalReporteFactura.SetParameterValue("vendedorApellidoNombre", oVenta.oVendedor.apellidoNombre);

oCrystalReporteFactura.SetParameterValue("subtotal", oVenta.subtotal);
oCrystalReporteFactura.SetParameterValue("igv", oVenta.igv);
oCrystalReporteFactura.SetParameterValue("total", oVenta.total);
crystalReportViewer1.ReportSource = oCrystalReporteFactura;
}
}
}

Verificar el explorador de soluciones se muestre como en la Figura 4.33.


Figura 4.33: Explorador de soluciones

17

Ejecute el proyecto y verifique que el reporte se visualice como en la Figura 4.34


Figura 4.34 Ejecucin del reporte

18

A continuacin se presenta el cdigo de la Clase Entidad Venta para que verifique lo


anteriormente realizado.
using System;
using System.Collections.Generic;
namespace SistemaVentaFactura
{ public class Venta
{ public int
idVenta
{ set; get; }
public string fecha
{ set; get; }
public int
idDocumento
{ set; get; }
public int
serie
{ set; get; }
public int
numero
{ set; get; }
public Cliente oCliente
{ set; get; }
public Vendedor oVendedor
{ set; get; }
public int
idVendedor
{ set; get; }
public double subtotal
{ set; get; }
public double igv
{ set; get; }
public double total
{ set; get; }
public List<VentaDetalle> ListVentaDetalle { set; get;}
public Venta()
{ oCliente = new Cliente();
oVendedor = new Vendedor();
}
public void setSubtotal(double subtotal)
{ if (subtotal==0)
{ this.subtotal=0;
}
else
{ this.subtotal=this.subtotal+subtotal;
}
}

public void setIgv()


{ igv=subtotal*0.20;
}
public void setTotal()
{ total=subtotal+igv;
}

A continuacin se presenta el Cdigo de la Clase Entidad Venta_Detalle para que verifique


lo anteriormente realizado.
namespace SistemaVentaFactura
{ public class VentaDetalle
{ public int
idVenta
{ get; set; }
public Producto oProducto
{ get; set; }
public int
cantidad
{ get; set; }
public double precioDeCompra { get; set; }
public double precioDeVenta { get; set; }
public double subtotal;
public VentaDetalle()
{ oProducto = new Producto();
}
public double getSubtotal()
{ return subtotal;
}
public void setSubtotal()
{ subtotal=(double) cantidad*precioDeVenta;
}
public override string ToString()
{ return oProducto.descripcion;
}
}
}

}
19

A continuacin se presenta el Cdigo de la Clase Entidad Cliente para que verifique lo


anteriormente realizado.
using System;
namespace SistemaVentaFactura
{ public class Cliente
{ public int
idCliente
{get;set;}
public String apellidoNombre
{get;set;}
public String direccion
{get;set;}
public override string ToString()
{ return apellidoNombre;
}
}

A continuacin se presenta el Cdigo de la Clase Entidad Vendedor para que verifique lo


anteriormente realizado
using System;
namespace SistemaVentaFactura
{ public class Vendedor
{ public int
idVendedor
{ get; set; }
public string apellidoNombre { get; set; }
public override string ToString()
{ return apellidoNombre;
}
}
}

A continuacin se presenta el Cdigo de la Clase Formulario FormVenta para que verifique


lo anteriormente realizado
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace SistemaVentaFactura
{ public partial class FormVentas:Form
{ Venta oVenta = new Venta();
public FormVentas()
{ InitializeComponent();
activarDesactivarBotones(false,false,true,false,false);
activarDesactivaCuadrosDeTexto(false);
this.StartPosition=FormStartPosition.CenterScreen;
buttonNuevaVenta.Focus();
}
public void activarDesactivaCuadrosDeTexto(Boolean activaDesactiva)
{ dateTimePickerFecha.Enabled
= activaDesactiva;
textBoxIdDocumento.Enabled
= activaDesactiva;
textBoxSerie.Enabled
= activaDesactiva;
textBoxNumero.Enabled
= activaDesactiva;
textBoxIdVenta.Enabled
= activaDesactiva;
textBoxIdCliente.Enabled
= activaDesactiva;
textBoxClienteDireccion.Enabled
= activaDesactiva;
textBoxClienteRUC.Enabled
= activaDesactiva;
textBoxClienteApellidoNombre.Enabled
= activaDesactiva;
textBoxVendedor_id.Enabled
= activaDesactiva;
textBoxVendedorApellidoNombre.Enabled
= activaDesactiva;
textBoxSubTotal.Enabled
= activaDesactiva;
textBoxIgv.Enabled
= activaDesactiva;
textBoxTotal.Enabled
= activaDesactiva;
}

20

public void activarDesactivarBotones(Boolean agregarVentaDetalle, Boolean


eliminarVentaDetalle, Boolean nuevaVenta, Boolean reiniciarVenta, Boolean imprimirFactura)
{ buttonAgregarVentaDetalleDetalle.Enabled = agregarVentaDetalle;
buttonEliminarVentaDetalle.Enabled
= eliminarVentaDetalle;
buttonNuevaVenta.Enabled
= nuevaVenta;
buttonReiniciarVenta.Enabled
= reiniciarVenta;
buttonImprimirFactura.Enabled
= imprimirFactura;
}
public void limpiarDataGridViewVentaDetalle()
{ dataGridViewVentaDetalle.Rows.Clear();
}
public void limpiarObjetos()
{ dateTimePickerFecha.Text
= "";
textBoxIdDocumento.Text
= "";
textBoxSerie.Text
= "";
textBoxNumero.Text
= "";
textBoxIdVenta.Text
= "";
textBoxIdCliente.Text
= "";
textBoxClienteApellidoNombre.Text = "";
textBoxClienteDireccion.Text
= "";
textBoxClienteRUC.Text
= "";
textBoxVendedor_id.Text
= "";
textBoxVendedorApellidoNombre.Text = "";
textBoxSubTotal.Text
= "";
textBoxIgv.Text
= "";
textBoxTotal.Text
= "";
limpiarDataGridViewVentaDetalle();
}
private Venta leerObjetoVenta(Venta oVenta)
{ oVenta.idVenta
= Int32.Parse(textBoxIdVenta.Text);
oVenta.fecha
= dateTimePickerFecha.Text;
oVenta.idDocumento
= Int32.Parse(textBoxIdDocumento.Text);
oVenta.serie
= Int32.Parse(textBoxSerie.Text);
oVenta.numero
= Int32.Parse(textBoxNumero.Text);
oVenta.oCliente.idCliente
= Int32.Parse(textBoxIdCliente.Text);
oVenta.oCliente.apellidoNombre
= textBoxClienteApellidoNombre.Text;
oVenta.oCliente.direccion
= textBoxClienteDireccion.Text;
oVenta.oVendedor.idVendedor
= Int32.Parse(textBoxVendedor_id.Text);
oVenta.oVendedor.apellidoNombre
= textBoxVendedorApellidoNombre.Text;
oVenta.subtotal
= Double.Parse(textBoxSubTotal.Text);
oVenta.igv
= Double.Parse(textBoxIgv.Text);
oVenta.total
= Double.Parse(textBoxTotal.Text);
List<VentaDetalle> oListVentaDetalle = new List<VentaDetalle>();
int filas = dataGridViewVentaDetalle.Rows.Count;
for (int i = 0; i < filas; i++)
{ VentaDetalle oVentaDetalle = new VentaDetalle();
oVentaDetalle.cantidad
=
Int32.Parse(dataGridViewVentaDetalle.Rows[i].Cells[0].Value + "");
oVentaDetalle.oProducto.descripcion
= ((VentaDetalle)
dataGridViewVentaDetalle.Rows[i].Cells[1].Value).oProducto.descripcion;
oVentaDetalle.precioDeVenta =
Double.Parse(dataGridViewVentaDetalle.Rows[i].Cells[2].Value + "");
oVentaDetalle.subtotal
=
Double.Parse(dataGridViewVentaDetalle.Rows[i].Cells[3].Value + "");
oListVentaDetalle.Add(oVentaDetalle);
oListVentaDetalle.Add(oVentaDetalle);
}
oVenta.ListVentaDetalle = oListVentaDetalle;
return oVenta;
}
private void calcularTotal()

21

{ int filas = dataGridViewVentaDetalle.Rows.Count;


oVenta.setSubtotal(0);
for (int i = 0; i < filas; i++)
{ oVenta.setSubtotal(Double.Parse(dataGridViewVentaDetalle.Rows[i].Cells[3].Value+""));
}
oVenta.setIgv();
oVenta.setTotal();
textBoxSubTotal.Text = oVenta.subtotal + "";
textBoxIgv.Text = oVenta.igv + "";
textBoxTotal.Text = oVenta.total + "";
}
private void ButtonNuevo_Click(object sender, EventArgs e)
{ limpiarObjetos();
activarDesactivaCuadrosDeTexto(true);
activarDesactivarBotones(true,true,false,true,true);
dateTimePickerFecha.Focus();
}
private void buttonSalir_Click(object sender, EventArgs e)
{ Dispose();
}
private void buttonAgregarVentaDetalleDetalle_Click(object sender, EventArgs e)
{ FormVentaDetalle oFormVentaDetalle = new FormVentaDetalle();
oFormVentaDetalle.ShowDialog();
if (oFormVentaDetalle.oVentaDetalle.cantidad != 0)
{ dataGridViewVentaDetalle.Rows.Add( oFormVentaDetalle.oVentaDetalle.cantidad,
oFormVentaDetalle.oVentaDetalle,
oFormVentaDetalle.oVentaDetalle.precioDeVenta,
oFormVentaDetalle.oVentaDetalle.getSubtotal()
);
calcularTotal();
}
}
private void buttonEliminarVentaDetalle_Click(object sender, EventArgs e)
{ if (dataGridViewVentaDetalle.SelectedRows.Count != 0)
{ dataGridViewVentaDetalle.Rows.Remove(dataGridViewVentaDetalle.SelectedRows[0]);
calcularTotal();
}
}
private void FormVentas_FormClosing(object sender, FormClosingEventArgs e)
{ DialogResult dialogo = MessageBox.Show("Desea cerrar el formulario?", "Cuidado",
MessageBoxButtons.YesNo);
if (dialogo == DialogResult.No)
{ e.Cancel = true;
}
else
{ if (dialogo == DialogResult.No)
{ e.Cancel = false;
}
}
}
private void FormVentas_KeyDown(object sender, KeyEventArgs e)
{ if (e.KeyData == Keys.Escape)
{ this.Close();
}
}
private void buttonReiniciarVenta_Click(object sender, EventArgs e)
{ limpiarObjetos();
activarDesactivarBotones(false, false, true,false, false);
dateTimePickerFecha.Focus();
activarDesactivaCuadrosDeTexto(false);
}

22

private void buttonImprimir_Click(object sender, EventArgs e)


{ oVenta=leerObjetoVenta(oVenta);
FormularioImprimir oFormImprimir=new FormularioImprimir(oVenta);
oFormImprimir.ShowDialog();
}
}
}

El cdigo de la aplicacin se presenta en el Cd que acompaa el libro con el


nombre de FormularioMaestroDetalleVentaConReporte

23

Das könnte Ihnen auch gefallen