Reporte de entradas
Diseño de la pantalla
Para comenzar, le daremos diseño al formulario "frmEntradasLista" el cual nos servirá para mostrar un listado de las entradas que se hayan registrado, la apariencia debe de quedar mas o menos así:

Se agregaron tres Button, un ListView y un Label, las propiedades están descritas en la siguiente tabla:

Ahora procedemos con el diseño del reporte de entradas, lo primero que haremos será crear un DataSet el cual nos servirá para el posterior diseño del reporte.
Agregamos un nuevo objeto del tipo DataSet (en la carpeta <b>Reportes</b> y le asignamos el nombre <b>dsRptEntrada</b> como se muestra:

Le damos diseño para que quede como se muestra:

El DataSet aparece vacío, debemos agregar un DataTable y darle el diseño para que quede como se muestra en la imagen. De entre las propiedades que debemos destacar es que el tipo de datos de los campos <b>cantidad, precio_compra e iva</b> son System.Double. Los tipos de datos para los campos <b>id_articulo y articulo</b> son System.String.
Una vez terminado el diseño del DataSet agregamos un Reporte (en la carpeta <b>Reportes</b>, pero utilizaremos un asistente, aqui muestro con imagenes todo el proceso:

Selecionamos que nuestro origen de datos es un objeto:

En la siguiente ventana, expanda todo y ubique el DataSet que acaba de crear anteriormente, como se muestra a continuación:

Luego, escriba un nombre para el DataSet (propiedad <b>Name</b>, se recomienda poner el mismo que puso anteriormente:

Arrastre los campos que desea mostrar en el reporte a la sección <b>Values</b> como se muestra en la imagen:

Desactive la operación <b>Sum</b>:

Seleccione un formato (apariencia):

Elija a su gusto:

Agregue el encabezado y el pié del reporte:

Agregue los parametros <b>prmFechaEntrada, prmFechaFactura, prmFolioFactura y prmProveedor</b>

Ejemplo de como agregar un parametro (Repitalo con los demás):

Agregue cuatro TextBox al encabezado y organicelos ordenadamente:

Arrastre los parametros creados enfrente de los TextBox:

Agrege una columna al reporte:

Puede darle diseño al reporte, hagalo a su gusto, aqui se muestra algo muy básico:

Agregaremos una función para calcular el total:

En seguida se muestra como hacerla:

Agregaremos un nuevo formulario llamado <b>frmVerReporte</b> al cual agregaremos un control ReportViewer al
cual estableceremos una propiedad <b>Modifiers=Public</b> (En la ventana de propiedades), aqui se muestra una imagen:

Hasta aqui todo ha sido diseño, ahora escribiremos el código que hace todo posible:
Declaramos las siguientes variables (En el formulario frmEntradasLista):
string CnnStr = @" Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data Source=almacen.mdb; " + //<==Poner aqui la ruta de la base de datos
"Jet OLEDB : Database Password=; Persist Security Info=False;"; //<==Ojo, no lleva espacios, sin espacios se ve: OLEDBatabase
string reportFile = @"rptEntrada.rdlc";//<==Poner aqui la ruta del reporte
Ahora agregamos los siguientes procedimientos:
void generaColumnas()
{
lvEntradas.Clear();
lvEntradas.View = View.Details;
lvEntradas.Columns.Add("Folio ", 40, HorizontalAlignment.Left);
lvEntradas.Columns.Add("Fecha Entrada", 85, HorizontalAlignment.Left);
lvEntradas.Columns.Add("Fecha Factura", 85, HorizontalAlignment.Left);
lvEntradas.Columns.Add("Folio Factura", 85, HorizontalAlignment.Left);
lvEntradas.Columns.Add("Proveedor", 200, HorizontalAlignment.Left);
}
void mostrarEntradas() {
try {
OleDbConnection cnn = new OleDbConnection(CnnStr);
cnn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = cnn;
cmd.CommandText = "select * from entradas";
OleDbDataReader dr = cmd.ExecuteReader();
int i = 0;
lvEntradas.Items.Clear();
while (dr.Read()) {
//mostramos los datos
lvEntradas.Items.Add(dr["id_entrada"].ToString());
lvEntradas.Items.SubItems.Add(String.Format("{0:dd/MM/yyyy}",dr["fecha_entrada"]));
lvEntradas.Items.SubItems.Add(String.Format("{0:dd/MM/yyyy}", dr["fecha_factura"]));
lvEntradas.Items.SubItems.Add(dr["folio_factura"].ToString());
lvEntradas.Items.SubItems.Add(dr["proveedor"].ToString());
i++;
}
dr.Close();
cnn.Close();
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
void mostrarReporte(int prmIdEntrada)
{
try
{
if (!File.Exists(reportFile))
{
MessageBox.Show(String.Format("No se encuentra n{0}nRevise por favor", reportFile));
return;
}
//AHORA MOSTRAMOS EL REPORTE
OleDbConnection cnn = new OleDbConnection(CnnStr);
cnn.Open();
DataSet dsReporte = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter("select d.*,a.articulo "+
" from entradas_detalle d,articulos a "+
" where a.id_articulo=d.id_articulo and id_entrada="+ prmIdEntrada +"", cnn);
da.Fill(dsReporte, "rptentrada" ) ;
if (dsReporte.Tables["rptEntrada"].Rows.Count == 0)
{
cnn.Close();
MessageBox.Show("No hay Datos" ) ;
return;
}
Formularios.frmVerReporte frm = new Formularios.frmVerReporte();
frm.reportViewer1.LocalReport.DataSources.Clear();
frm.reportViewer1.LocalReport.Dispose();
frm.reportViewer1.Reset();
frm.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("dsRptEntrada",
dsReporte.Tables["rptEntrada"]));
frm.reportViewer1.LocalReport.ReportPath = reportFile;
//parametros
List<ReportParameter> param = new List<ReportParameter>();
OleDbCommand cmd = new OleDbCommand("select * from entradas where id_entrada=" + prmIdEntrada + "", cnn);
OleDbDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
//folio_factura
ReportParameter pFolioFactura = new ReportParameter();
pFolioFactura.Name = "prmFolioFactura";
pFolioFactura.Values.Add(dr["folio_factura"].ToString());
param.Add(pFolioFactura);
//fecha_entrada
ReportParameter pFechaEntrada = new ReportParameter();
pFechaEntrada.Name = "prmFechaEntrada";
pFechaEntrada.Values.Add(dr["fecha_entrada"].ToString());
param.Add(pFechaEntrada);
//fecha_factura
ReportParameter pFechaFactura = new ReportParameter();
pFechaFactura.Name = "prmFechaFactura";
pFechaFactura.Values.Add(dr["fecha_factura"].ToString());
param.Add(pFechaFactura);
//proveedor
ReportParameter pProveedor = new ReportParameter();
pProveedor.Name = "prmProveedor";
pProveedor.Values.Add(dr["proveedor"].ToString());
param.Add(pProveedor);
}
dr.Close();
//agregamos los parametros a la coleccion
frm.reportViewer1.LocalReport.SetParameters(param);
frm.reportViewer1.RefreshReport();
frm.ShowDialog();
cnn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error loading report",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Agregamos sl siguiente código en el <b>Form_Load</b>:
lvEntradas.DoubleClick += new EventHandler(lvEntradas_DoubleClick);
generaColumnas();
mostrarEntradas();
Luego, agregamos el siguiente código:
void lvEntradas_DoubleClick(object sender, EventArgs e)
{
if (lvEntradas.SelectedItems.Count != 0) {
int _FolioEntrada = Convert.ToInt32(lvEntradas.SelectedItems[0].Text ) ;
mostrarReporte(_FolioEntrada);
}
}
El código para el botón <b>btnNueva</b>:
frmEntrada entrada = new frmEntrada();
entrada.StartPosition = FormStartPosition.CenterScreen;
entrada.ShowDialog();
El código para el botón <b>btnMostrar</b>:
mostrarEntradas();
El código para el botón <b>btnSalir</b>:
this.Close();
Aqui un ejemplo de la pantalla funcionando:

Aqui un ejemplo del reporte:

Continuar con el siguiente post...
Visita mi Blog:

Si deseas que te haga un trabajo de programación:
Diseño de la pantalla
Para comenzar, le daremos diseño al formulario "frmEntradasLista" el cual nos servirá para mostrar un listado de las entradas que se hayan registrado, la apariencia debe de quedar mas o menos así:

Se agregaron tres Button, un ListView y un Label, las propiedades están descritas en la siguiente tabla:

Ahora procedemos con el diseño del reporte de entradas, lo primero que haremos será crear un DataSet el cual nos servirá para el posterior diseño del reporte.
Agregamos un nuevo objeto del tipo DataSet (en la carpeta <b>Reportes</b> y le asignamos el nombre <b>dsRptEntrada</b> como se muestra:

Le damos diseño para que quede como se muestra:

El DataSet aparece vacío, debemos agregar un DataTable y darle el diseño para que quede como se muestra en la imagen. De entre las propiedades que debemos destacar es que el tipo de datos de los campos <b>cantidad, precio_compra e iva</b> son System.Double. Los tipos de datos para los campos <b>id_articulo y articulo</b> son System.String.
Una vez terminado el diseño del DataSet agregamos un Reporte (en la carpeta <b>Reportes</b>, pero utilizaremos un asistente, aqui muestro con imagenes todo el proceso:

Selecionamos que nuestro origen de datos es un objeto:

En la siguiente ventana, expanda todo y ubique el DataSet que acaba de crear anteriormente, como se muestra a continuación:

Luego, escriba un nombre para el DataSet (propiedad <b>Name</b>, se recomienda poner el mismo que puso anteriormente:

Arrastre los campos que desea mostrar en el reporte a la sección <b>Values</b> como se muestra en la imagen:

Desactive la operación <b>Sum</b>:

Seleccione un formato (apariencia):

Elija a su gusto:

Agregue el encabezado y el pié del reporte:

Agregue los parametros <b>prmFechaEntrada, prmFechaFactura, prmFolioFactura y prmProveedor</b>

Ejemplo de como agregar un parametro (Repitalo con los demás):

Agregue cuatro TextBox al encabezado y organicelos ordenadamente:

Arrastre los parametros creados enfrente de los TextBox:

Agrege una columna al reporte:

Puede darle diseño al reporte, hagalo a su gusto, aqui se muestra algo muy básico:

Agregaremos una función para calcular el total:

En seguida se muestra como hacerla:

Agregaremos un nuevo formulario llamado <b>frmVerReporte</b> al cual agregaremos un control ReportViewer al
cual estableceremos una propiedad <b>Modifiers=Public</b> (En la ventana de propiedades), aqui se muestra una imagen:

Hasta aqui todo ha sido diseño, ahora escribiremos el código que hace todo posible:
Declaramos las siguientes variables (En el formulario frmEntradasLista):
string CnnStr = @" Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data Source=almacen.mdb; " + //<==Poner aqui la ruta de la base de datos
"Jet OLEDB : Database Password=; Persist Security Info=False;"; //<==Ojo, no lleva espacios, sin espacios se ve: OLEDBatabase
string reportFile = @"rptEntrada.rdlc";//<==Poner aqui la ruta del reporte
Ahora agregamos los siguientes procedimientos:
void generaColumnas()
{
lvEntradas.Clear();
lvEntradas.View = View.Details;
lvEntradas.Columns.Add("Folio ", 40, HorizontalAlignment.Left);
lvEntradas.Columns.Add("Fecha Entrada", 85, HorizontalAlignment.Left);
lvEntradas.Columns.Add("Fecha Factura", 85, HorizontalAlignment.Left);
lvEntradas.Columns.Add("Folio Factura", 85, HorizontalAlignment.Left);
lvEntradas.Columns.Add("Proveedor", 200, HorizontalAlignment.Left);
}
void mostrarEntradas() {
try {
OleDbConnection cnn = new OleDbConnection(CnnStr);
cnn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = cnn;
cmd.CommandText = "select * from entradas";
OleDbDataReader dr = cmd.ExecuteReader();
int i = 0;
lvEntradas.Items.Clear();
while (dr.Read()) {
//mostramos los datos
lvEntradas.Items.Add(dr["id_entrada"].ToString());
lvEntradas.Items.SubItems.Add(String.Format("{0:dd/MM/yyyy}",dr["fecha_entrada"]));
lvEntradas.Items.SubItems.Add(String.Format("{0:dd/MM/yyyy}", dr["fecha_factura"]));
lvEntradas.Items.SubItems.Add(dr["folio_factura"].ToString());
lvEntradas.Items.SubItems.Add(dr["proveedor"].ToString());
i++;
}
dr.Close();
cnn.Close();
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
void mostrarReporte(int prmIdEntrada)
{
try
{
if (!File.Exists(reportFile))
{
MessageBox.Show(String.Format("No se encuentra n{0}nRevise por favor", reportFile));
return;
}
//AHORA MOSTRAMOS EL REPORTE
OleDbConnection cnn = new OleDbConnection(CnnStr);
cnn.Open();
DataSet dsReporte = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter("select d.*,a.articulo "+
" from entradas_detalle d,articulos a "+
" where a.id_articulo=d.id_articulo and id_entrada="+ prmIdEntrada +"", cnn);
da.Fill(dsReporte, "rptentrada" ) ;
if (dsReporte.Tables["rptEntrada"].Rows.Count == 0)
{
cnn.Close();
MessageBox.Show("No hay Datos" ) ;
return;
}
Formularios.frmVerReporte frm = new Formularios.frmVerReporte();
frm.reportViewer1.LocalReport.DataSources.Clear();
frm.reportViewer1.LocalReport.Dispose();
frm.reportViewer1.Reset();
frm.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("dsRptEntrada",
dsReporte.Tables["rptEntrada"]));
frm.reportViewer1.LocalReport.ReportPath = reportFile;
//parametros
List<ReportParameter> param = new List<ReportParameter>();
OleDbCommand cmd = new OleDbCommand("select * from entradas where id_entrada=" + prmIdEntrada + "", cnn);
OleDbDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
//folio_factura
ReportParameter pFolioFactura = new ReportParameter();
pFolioFactura.Name = "prmFolioFactura";
pFolioFactura.Values.Add(dr["folio_factura"].ToString());
param.Add(pFolioFactura);
//fecha_entrada
ReportParameter pFechaEntrada = new ReportParameter();
pFechaEntrada.Name = "prmFechaEntrada";
pFechaEntrada.Values.Add(dr["fecha_entrada"].ToString());
param.Add(pFechaEntrada);
//fecha_factura
ReportParameter pFechaFactura = new ReportParameter();
pFechaFactura.Name = "prmFechaFactura";
pFechaFactura.Values.Add(dr["fecha_factura"].ToString());
param.Add(pFechaFactura);
//proveedor
ReportParameter pProveedor = new ReportParameter();
pProveedor.Name = "prmProveedor";
pProveedor.Values.Add(dr["proveedor"].ToString());
param.Add(pProveedor);
}
dr.Close();
//agregamos los parametros a la coleccion
frm.reportViewer1.LocalReport.SetParameters(param);
frm.reportViewer1.RefreshReport();
frm.ShowDialog();
cnn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error loading report",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Agregamos sl siguiente código en el <b>Form_Load</b>:
lvEntradas.DoubleClick += new EventHandler(lvEntradas_DoubleClick);
generaColumnas();
mostrarEntradas();
Luego, agregamos el siguiente código:
void lvEntradas_DoubleClick(object sender, EventArgs e)
{
if (lvEntradas.SelectedItems.Count != 0) {
int _FolioEntrada = Convert.ToInt32(lvEntradas.SelectedItems[0].Text ) ;
mostrarReporte(_FolioEntrada);
}
}
El código para el botón <b>btnNueva</b>:
frmEntrada entrada = new frmEntrada();
entrada.StartPosition = FormStartPosition.CenterScreen;
entrada.ShowDialog();
El código para el botón <b>btnMostrar</b>:
mostrarEntradas();
El código para el botón <b>btnSalir</b>:
this.Close();
Aqui un ejemplo de la pantalla funcionando:

Aqui un ejemplo del reporte:

Continuar con el siguiente post...
Visita mi Blog:

Si deseas que te haga un trabajo de programación:

