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:
Ahora agregamos los siguientes procedimientos:
Protected Sub generarColumnas() 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) End Sub Protected Sub mostrarEntradas() Dim cnn As New OleDbConnection(CnnStr) Try cnn.Open() Dim cmd As New OleDbCommand() cmd.Connection = cnn cmd.CommandText = "select * from entradas" Dim dr As OleDbDataReader = cmd.ExecuteReader() Dim i As Integer = 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 += 1 End While dr.Close() Catch ex As Exception Throw (ex) Finally cnn.Close() End Try End Sub Protected Sub mostrarReporte(ByVal idEntrada As Integer) Dim cnn As New OleDbConnection(CnnStr) Try cnn.Open() If Not File.Exists(RptEntrada) Then Throw (New Exception(String.Format("No existe el archivo: {0}", RptEntrada))) End If ''AHORA MOSTRAMOS EL REPORTE Dim cmd As New OleDbCommand() cmd.Connection = cnn cmd.CommandText = "select d.*,a.articulo " + " from entradas_detalle d,articulos a " + " where a.id_articulo=d.id_articulo and id_entrada=@idEntrada" cmd.Parameters.Add("@idEntrada", OleDbType.Integer).Value = idEntrada Dim dsReporte As New DataSet() Dim da As New OleDbDataAdapter(cmd) da.Fill(dsReporte, "rptEntrada") If (dsReporte.Tables("rptEntrada").Rows.Count = 0) Then Throw (New Exception("No hay Datos")) End If Dim frm As New 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 = RptEntrada ''parametros ''List<ReportParameter> param = new List<ReportParameter>() Dim param As New List(Of ReportParameter) Dim cmdDet As New OleDbCommand("select * from entradas " + " where id_entrada=@idEntrada", cnn) cmdDet.Parameters.Add("@idEntrada", OleDbType.Integer).Value = idEntrada Dim dr As OleDbDataReader = cmdDet.ExecuteReader() If (dr.Read()) Then ''folio_factura Dim pFolioFactura As New ReportParameter() pFolioFactura.Name = "prmFolioFactura" pFolioFactura.Values.Add(dr("folio_factura").ToString()) param.Add(pFolioFactura) ''fecha_entrada Dim pFechaEntrada As New ReportParameter() pFechaEntrada.Name = "prmFechaEntrada" pFechaEntrada.Values.Add(dr("fecha_entrada").ToString()) param.Add(pFechaEntrada) ''fecha_factura Dim pFechaFactura As New ReportParameter() pFechaFactura.Name = "prmFechaFactura" pFechaFactura.Values.Add(dr("fecha_factura").ToString()) param.Add(pFechaFactura) ''proveedor Dim pProveedor As New ReportParameter() pProveedor.Name = "prmProveedor" pProveedor.Values.Add(dr("proveedor").ToString()) param.Add(pProveedor) End If dr.Close() ''agregamos los parametros a la coleccion frm.reportViewer1.LocalReport.SetParameters(param) frm.reportViewer1.RefreshReport() frm.ShowDialog() cnn.Close() Catch ex As Exception Throw (ex) Finally cnn.Close() End Try End Sub
Agregamos sl siguiente código en el Form_Load:
Try generarColumnas() mostrarEntradas() Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try
Luego, agregamos el siguiente código (Para el evento Doble Clic del ListView):
Private Sub lvEntradas_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvEntradas.DoubleClick Try If (lvEntradas.SelectedItems.Count <> 0) Then Dim _FolioEntrada As Integer = Convert.ToInt32(lvEntradas.SelectedItems(0).Text) mostrarReporte(_FolioEntrada) End If Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub
El código para el botón btnNueva:
Dim frm As New frmEntrada frm.StartPosition = FormStartPosition.CenterScreen frm.ShowDialog()
El código para el botón btnMostrar:
Try mostrarEntradas() Catch ex As Exception MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End TryEl código para el botón btnSalir
Me.Close()
Aqui un ejemplo de la pantalla funcionando:
Aqui un ejemplo del reporte:
Uso visual studio 2008 edicion profesional.Lo que no he podido, es resolver el problema de los parametros en los textbox. Si alguien puede ayudarme lo agradezco de antemano.
ResponderEliminarYo uso visual studio 2008 edicion profesional y lo de crear parametros no existe, porque se supone que el editor lo haga automatico pero no te deja hacer nada. el crea el reporte sin dejarte modificarlo paso a paso.
ResponderEliminardebes crear un reporte en blanco
EliminarDONDE ESTA EL FROM_ LOAD DONDE PUSIERON ESE CODIGO PORQUE TBN EN LA PASADA NO SUPE DONDE PONERLO...
ResponderEliminarA PARTE TAMBIEN TENGO PROBLEMAS CON LA CONEXION