Sistema de Almacén Visual Basic (Parte 4)


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:

ObjetoPropiedadValor
ButtonNamebtnNueva
TextNueva
ButtonNamebtnMostrar
TextMostrar
ButtonNamebtnSalir
TextSalir
ListViewNamelvEntradas
FullRowSelectTrue
GridLinesTrue
HideSelectionFalse
LabelNamelblMensaje
TextDoble 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:


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 cantidad, precio_compra e iva son System.Double.

Los tipos de datos para los campos id_articulo y articulo son System.String.

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 Try
El código para el botón btnSalir

Me.Close()

Aqui un ejemplo de la pantalla funcionando:



Aqui un ejemplo del reporte:



Regresar a la parte 3|Ir a la parte 5

¡Hacer clic en +1 No te Cuesta Nada!

4 comentarios:

  1. 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.

    ResponderEliminar
  2. Yo 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.

    ResponderEliminar
  3. DONDE ESTA EL FROM_ LOAD DONDE PUSIERON ESE CODIGO PORQUE TBN EN LA PASADA NO SUPE DONDE PONERLO...

    A PARTE TAMBIEN TENGO PROBLEMAS CON LA CONEXION

    ResponderEliminar