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:
Objeto | Propiedad | Valor |
Button | Name | btnNueva |
Text | Nueva | |
Button | Name | btnMostrar |
Text | Mostrar | |
Button | Name | btnSalir |
Text | Salir | |
ListView | Name | lvEntradas |
FullRowSelect | True | |
GridLines | True | |
HideSelection | False | |
Label | Name | lblMensaje |
Text | Doble clic para imprimir. |
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 y le asignamos el nombre dsRptEntrada como se muestra:
Le damos diseño para que quede como se muestra:
Una vez terminado el diseño del DataSet agregamos un Reporte, 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 Name), se recomienda poner el mismo que puso anteriormente:
Arrastre los campos que desea mostrar en el reporte a la sección Values como se muestra en la imagen:
Desactive la operación Sum:
Seleccione un formato (apariencia):
Elija a su gusto:
Agregue el encabezado y el pié del reporte:
Agregue los parametros prmFechaEntrada, prmFechaFactura, prmFolioFactura y prmProveedor
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 frmVerReporte al cual agregaremos un control ReportViewer al cual estableceremos una propiedad Modifiers=Public (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=D:\\DOCS\\tyrodeveloper\\almacen.mdb; " + "Jet OLEDB:Database Password=; Persist Security Info=False;"; string reportFile = @"D:\\DOCS\\tyrodeveloper\\almacen\\almacen\\Reportes\\rptEntrada.rdlc";
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[i].SubItems.Add(String.Format("{0:dd/MM/yyyy}",dr["fecha_entrada"])); lvEntradas.Items[i].SubItems.Add(String.Format("{0:dd/MM/yyyy}", dr["fecha_factura"])); lvEntradas.Items[i].SubItems.Add(dr["folio_factura"].ToString()); lvEntradas.Items[i].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 Form_Load:
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 btnNueva:
frmEntrada entrada = new frmEntrada();
entrada.StartPosition = FormStartPosition.CenterScreen;
entrada.ShowDialog();
El código para el botón btnMostrar:
mostrarEntradas();
El código para el botón btnSalir
this.Close();
Aqui un ejemplo de la pantalla funcionando:
Aqui un ejemplo del reporte:
Excelente ejemplo nos es de mucha ayuda a todos los que empezamos en este lenguaje, solo el link de la parte 5 no funciona.
ResponderEliminarlisto el link para la parte 5
ResponderEliminarEn el metodo mostrarEntradas(), es necesario la creacion de un objeto DateTime para darle formato a la afecha en los campos fecha entrad y fecha factura.
ResponderEliminarExcelente tutorial, tutoriales como este necesitamos los principaiantes.
Gracias por el tutorial, está excelente. Pero tengo un problema, estoy haciendolo en vb 2010 express, y la ultima parte de crear el reporte no me aparece la opcion de report wizard. Mi pregunta es: tengo que agregarlo al 2010 express?...como lo hago si es que se puede y en caso contrario, tendria que tener la version completa del vb 2010?....
ResponderEliminarGracias espero tu respuesta.
NEcesitas la versión Estandar como minimo para poder hacer el reporte
ResponderEliminarcual es la version estandar??
EliminarPS ESTA GENIAL
ResponderEliminartengo problemas en el apartado del ReportDataSource no me reconoce el tipo de objeto. ademas en la List tbn me marca error en el tipo de dato. ¿Debo poner alguna referencia .dll o alguna libreria??
ResponderEliminarNo compa, para usar el ReportDataSource debes poner la referencia siguiente para que jale:
ResponderEliminarusing Microsoft.Reporting.WinForms;
Este comentario ha sido eliminado por el autor.
ResponderEliminarno me aparece nada en el "Select Data Objects" a que se debe? Excelente el ejemplo
ResponderEliminarmuy buenos noches me sale este error
ResponderEliminarError 1 El nombre 'File' no existe en el contexto actual
En cual link consigo vb 2010 standar
ResponderEliminar@DinastiaSalvacion te falta la librea system.IO o System.IO.File..
ResponderEliminarMe marca un error en el OleDbCommand k falta una directiva using o una referencia de ensamblado
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarGracias al autor de Este Tutorial y un poco de google, han hecho que todo funcione bien.
ResponderEliminargracias.
Tengo un problema, no tengo el REPORT WIZARD...donde lo puedo conseguir, en referencia, o descargarlo?
ResponderEliminarfijate que me aparece este error Error 4 The type or namespace name 'OleDbCommand' could not be found (are you missing a using directive or an assembly reference?) C:\Users\Josue\Documents\Visual Studio 2010\Projects\Almacen\Almacen\Formulario\frmEntradaLista.cs 54 40 Almacen
ResponderEliminarNo me aparece Report Wizard
ResponderEliminarNo me aparece el Report Wizard como lo consigo
ResponderEliminartengo un problema la ultima ventana de reporte no me sale cual es el codigo o como le hago
ResponderEliminaralguien que me pueda envia su codigo por favor rrosalescortes@gmail.com
ResponderEliminarA mi tampoco me aparece el Report Wizard, tengo la versión Microsoft Visual C# 2010 Express. Alguien me puede ayudar??
ResponderEliminarEl Report Wizard solo está en la versión completa de Microsoft Visual Studio (o Microsoft Visual C#) no lo tiene la versión express...
ResponderEliminarMe aparece el siguiente error: "No se controló CannotUploadAppDomainException" al darle doble clic al reporte, alguien me puede ayudar....
Gracias, saludos !!
Hola necesito ayuda con este error,
ResponderEliminarError 1 The type or namespace name 'frmVerReporte' does not exist in the namespace 'Inventario_Aserfex.Formularios' (are you missing an assembly reference?) C:\Users\Piero\documents\visual studio 2012\Projects\Inventario Aserfex\Inventario Aserfex\Formularios\frmSalidaLista.cs 91 29 Inventario Aserfex
Revisalo, quizá lo pusiste con otro nombre. c# es estricto con los nombres, una mayuscula/minuscula, etc. Saludos
ResponderEliminarEl código para el botón btnMostrar:
ResponderEliminarmostrarEntradas();
????
El codigo para lblMensaje?
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarbuenas tardes disculpa no me sale la opcion de agregar el dataset
ResponderEliminar