Reporte de Salidas
Diseño de la pantalla
Para comenzar, le daremos diseño al formulario "frmSalidasLista" el cual nos servirá para mostrar un listado de las salidas 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 | lvSalidas |
FullRowSelect | True | |
GridLines | True | |
HideSelection | False | |
Label | Name | lblMensaje |
Text | Doble clic para imprimir. |
Ahora procedemos con el diseño del reporte de salidas, este proceso se muestra en la parte 4 de este tutorial, el cual deberá quedar mas o menos así:
Ahora agregamos los siguientes procedimientos:
void generaColumnas(){ lvSalidas.Clear(); lvSalidas.View = View.Details; lvSalidas.Columns.Add("Folio ", 40, HorizontalAlignment.Left); lvSalidas.Columns.Add("Fecha Salida", 85, HorizontalAlignment.Left); lvSalidas.Columns.Add("Responsable", 200, HorizontalAlignment.Left); } void mostrarSalidas(){ try { OleDbConnection cnn = new OleDbConnection(CnnStr); cnn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = cnn; cmd.CommandText = "select * from salidas"; OleDbDataReader dr = cmd.ExecuteReader(); int i = 0; lvSalidas.Items.Clear(); while (dr.Read()) { //mostramos los datos lvSalidas.Items.Add(dr["id_salida"].ToString()); lvSalidas.Items[i].SubItems.Add(String.Format("{0:dd/MM/yyyy}", dr["fecha_salida"])); lvSalidas.Items[i].SubItems.Add(dr["responsable"].ToString()); i++; } dr.Close(); cnn.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } void mostrarReporte(int prmIdSalida){ 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 salidas_detalle d,articulos a " + " where a.id_articulo=d.id_articulo and id_salida=" + prmIdSalida + "", cnn); da.Fill(dsReporte, "rptSalida"); if (dsReporte.Tables["rptSalida"].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("dsRptSalida", dsReporte.Tables["rptSalida"])); frm.reportViewer1.LocalReport.ReportPath = reportFile; //parametros List<ReportParameter> param = new List<ReportParameter>(); OleDbCommand cmd = new OleDbCommand("select * from salidas where id_salida=" + prmIdSalida + "", cnn); OleDbDataReader dr = cmd.ExecuteReader(); while (dr.Read()){ //fecha_salida ReportParameter pFechaEntrada = new ReportParameter(); pFechaEntrada.Name = "prmFechaSalida"; pFechaEntrada.Values.Add(dr["fecha_salida"].ToString()); param.Add(pFechaEntrada); //responsable ReportParameter pProveedor = new ReportParameter(); pProveedor.Name = "prmResponsable"; pProveedor.Values.Add(dr["responsable"].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 al cargar el reporte", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
Agregamos sl siguiente código en el Form_Load:
lvSalidas.DoubleClick += new EventHandler(lvSalidas_DoubleClick);
generaColumnas();
mostrarSalidas();
Luego, agregamos el siguiente código:
void lvSalidas_DoubleClick(object sender, EventArgs e) { if (lvSalidas.SelectedItems.Count != 0){ int _FolioSalida = Convert.ToInt32(lvSalidas.SelectedItems[0].Text); mostrarReporte(_FolioSalida); } }
El código para el botón btnNueva:
frmSalida salida = new frmSalida();
salida.StartPosition = FormStartPosition.CenterScreen;
salida.ShowDialog();
El código para el botón btnMostrar:
mostrarSalidas();
El código para el botón btnSalir
this.Close();
Aqui un ejemplo de la pantalla funcionando:

Aqui un ejemplo del reporte:

Hasta este punto ya hemos desarrollado la funcionalidad básica. En la siguiente parte haremos que aparesca una pantalla pricipal desde la que mandaremos llamar las que hasta hoy hemos desarrollado.
exelente tutorial lo he estado haciendo pero me muestra el siguiente error //Error 29 'WindowsFormsApplication1.Formularios.frmVerReporte' does not contain a definition for 'reportViewer1' and no extension method 'reportViewer1' accepting a first argument of type 'WindowsFormsApplication1.Formularios.frmVerReporte' could be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\fam galvan\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Formularios\frmEntradasLista.cs 121 21 Almacen
ResponderEliminar// Y no se que hacer ahi
tambien me aparece este error al compilarlo
ResponderEliminarError 2 The Value expression for the text box ‘idarticulo’ refers to the field ‘id’. Report item expressions can only refer to fields within the current dataset scope or, if inside an aggregate, the specified dataset scope. C:\Documents and Settings\fam galvan\Mis documentos\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Reporte\rptSalidas.rdlc Almacen
me pudieras decir que estoy haciendo mal por favor que ya no tengo idea de que hacer.
Tu problema es que debiste agregar un ReportViewer al formulario frmVerReporte...
ResponderEliminaren el siguiente error es respecto del DataSet...
Realmente tus errores son por que no utilizas los nombres de objetos tal y como fueron indicados en el proyecto; esto incluye el nombre de la aplicación.
En lenguajes como C#, especialmente cuando vas iniciando, debes ser exacto al seguir tutoriales para que no tengas errores en el transcurso de desarrollo.
No te se decir exactamente en que estas mal, pues para empezar los nombres que usas para los formularios no son los mismos.
Revisa que tu dataSet sea tal y como se indica, que los tipos de datos sean los mismos... etc.'
En elpeor de los casos, vuelve a empezar, no es un sistema muy extenso...
Saludos
muchas gracias por la orientación creo que si la regué y feo muchas gracias aprovecho para felicitarte por tu excelente tutorial mejor que ni mis maestros de la escuela mucha suerte en este año nuevo y mucho éxito.
ResponderEliminarbuenas maestro.
ResponderEliminarestoy llevando acabo este proyecto lo unico que no epodido encontrar es la forma de cambiar los bordes de mis formularios tal y como usted lo tiene e buscado referencias en varios sitios y no aparece si usted me puede indicar le agradeceria... Erickson
No tengo ningun formato en especial.
ResponderEliminarEstoy utlizando windows 7
Saludos
me marca un error con OleDbConnection, a k se debe ??
ResponderEliminarError 1 The name 'reportFile' does not exist in the current context C:\Users\xxxxxx\Documents\Visual Studio 2010\Projects\Almacen\Almacen\Formularios\frmSalidaLista.cs 77 34 Almacen
ResponderEliminardisculpa pero me da este error
ResponderEliminarError 1 El objeto ‘Tablix1’ de tipo tablix hace referencia a una cadena DataSetName ‘rptSalida’ no válida. si me pudieras ayudar te lo agradeceria ya que apenas empiezo a programar
@OnlyZero... disculpa sea tarde la respuesta..
ResponderEliminarpero vale, para otros...
simple tenias que escribir los codigos de coneccion con la base de tados
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";
Error 5 No se puede encontrar el tipo o el nombre de espacio de nombres 'ReportParameter' (¿falta una directiva using o una referencia de ensamblado?) C:\Users\alumno\AppData\Local\Temporary Projects\almacen\Formularios\frmEntradasLista.cs 109 22 almacen
ResponderEliminareste error m tira a mi m pueden ayudar soy nuevo en esto gracs
Gracias por este fantástico tutorial.
ResponderEliminarLo he seguido paso a paso, pero no me acaba de funcionar. Me da problemas al grabar una entrada y al mostrar el informe.
¿Podrías mandarme el proyecto a esta dirección mgtformacion@yahoo.es?
Estoy con un proyecto de universidad y me sería de gran ayuda.
Gracias
prodrias enviar el proyecto completo a edwardelfuerte27@hotmail.com
ResponderEliminaramigo en que parte se coloca este código
ResponderEliminarvoid lvSalidas_DoubleClick(object sender, EventArgs e)
{
if (lvSalidas.SelectedItems.Count != 0){
int _FolioSalida = Convert.ToInt32(lvSalidas.SelectedItems[0].Text);
mostrarReporte(_FolioSalida);
}
}
se coloca en cualquier parte, solo ten cuidado de no meterlo dentro de otro void o fuera de la clase
ResponderEliminarHOLA PORFAVOR ALGUIEN QUE ME AYUDE 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
tienes que poner los nombres tal y como estan en el tutorial y si creas el directorio o lo modificas tal cual, es mas probable q no tengas errores
Eliminarbuen dia me podrias enviar el proyecto completo del control del almacen es que estoy llevando un proyecto acerca de ese tema pero he buscado en otros tutoriales y el tuyo es muy bueno se acopla a lo que estoy buscando.
ResponderEliminargracias
Atte.
Layman del angel
hola que tal he hecho el proyecto pero al final cuando intento agregar un articulo me sale el error de no se encontró el archivo sabes a q se debe ???
ResponderEliminarde ante mano gracias por la respuesta
disculpa solucionaste este error? me podrias ayudar te lo agradeceria muchisisisisisimo
Eliminardisculpa solucionaste este error? me podrias ayudar te lo agradeceria muchisisisisisimo
Eliminardisculpa, puedes pasarme el codigo fuente a mi correo? te lo agradeceria mucho! eres un buen salvavidas xD aca mi correo jean.vasquez35@gmail.com
ResponderEliminarEstimado profesor, muy lindo el tutorial, tengo un problema al generar el segundo reporte de salidas, el primero me funciona, pero el segundo no, me sale el siguiente error "A data source instance has not been supplied for the data source dsRptSalidas", mil gracias.
ResponderEliminarBendiciones Para ti Amigo por tu regalo
ResponderEliminar