Siguiendo con el curso toca la parte de ver el listado de las ventas que se han realizado hasta este momento, esta parte es muy importante porque desde esta ventana podemos Re-Imprimir una factura, Anular (Devuelve los productos al inventario, y no la cuenta el el cierre de caja), Devoluciones, Exportar a Excel.
Colabora y Suscribete a mi canal de
Lo primero es crear los controles que va a contener la ventana, les doy una ayudita es casi igual a la ventana de kardex asi que puedes copiar y pegar de allá.
Lita de controles que se usaron
cmdMeses = es el combobox para los meses del año
txtAnio = es un TexBox para el año
chkPorFecha = es un CheckBox, al dar clic se activan la búsqueda por rango de fecha
DTFecha1 = es un DTPicker para la fecha 1
DTFecha2 = es un DTPicker para la fecha 2
cmdBuscar = el botón de Buscar
txtNombreCli = TextBox para la búsqueda por nombre del cliente
msGrid = MSHFlexGrid par el listado de facturas
cmdImprimir = Botón de Imprimir
cmdAnular = Botón de Anular
cmdDevolucion = Botón para las Devoluciones
cmdExportar = Botón para Exportar a Excel
cmdCerrar = Botón Cerrar ventana
txtTotalLista = TextBox para mostrar el Total de las facturas listadas en el Grid
Ya que tenemos los nombres de los controles si vamos al código que es muy sencillo:
Lo primero es el Evento Load del Formulario.
Private Sub Form_Load() Call CentrarFormulario(Me, frmPrincipal) cmdMeses.ListIndex = Format(Date, "mm") - 1 txtAnio.Text = Format(Date, "yyyy") DTFecha1.Enabled = False DTFecha2.Enabled = False Call ListarFacturasVenta End Sub
En el código anterior centramos el formulario, luego asignamos el mes actual al Combobox de Mes y Extraemos el año de la fecha actual y lo mostramos en el control.
Lo siguiente es colocar el codigo del CheckBox PorFecha para que al dar clic habilito o deshabilite los controles de Pick de Fecha
Private Sub chkPorFecha_Click() If chkPorFecha.Value = 1 Then DTFecha1.Enabled = True DTFecha2.Enabled = True Else DTFecha1.Enabled = False DTFecha2.Enabled = False End If End Sub
En el código anterior si activamos el Checkbox el valor cambia a 1 por lo que se activan los controles de fecha y damos clic y lo desactivamos entonces se desactivan los controles.
Continuamos con el botón de buscar que llama al procedimiento ListarFacturasVenta:
Private Sub cmdBuscar_Click() Call ListarFacturasVenta End Sub
Sub ListarFacturasVenta() Dim Filtro Dim Sql As String Dim Columnas As Integer Filtro = "" 'Buscar por mes If chkPorFecha.Value = 0 Then Mes = cmdMeses.ListIndex + 1 Anio = txtAnio.Text Filtro = " Month(v.FechaHora) = " & Mes & " and Year(v.FechaHora) = " & Anio Else 'buscar por rango de fecha Fecha1 = Format(DTFecha1.Value, "mm/dd/yyyy") Fecha2 = Format(DTFecha2.Value, "mm/dd/yyyy") Filtro = " Format(v.FechaHora,'dd/mm/yyyy') Between #" & Fecha1 & "# and #" & Fecha2 & "#" End If If txtNombreCli.Text <> "" Then NombreCliente = txtNombreCli.Text Else NombreCliente = "%" End If Sql = "Select v.Num_Factura, v.FechaHora, tblClientes.NombreApellidos_cli, v.TipoFact, v.TotalFactura, v.EstadoFact From tblVentas as v, tblClientes Where v.IdCliente = tblClientes.IdCliente and tblClientes.NombreApellidos_cli like '" & NombreCliente & "%' and " & Filtro & " Order by v.Num_Factura ASC " Columnas = 6 Call LlenarGrid(msGrid, Sql, Columnas) msGrid.ColWidth(0) = 0 msGrid.ColWidth(1) = 1000 msGrid.ColWidth(2) = 1400 msGrid.ColWidth(3) = 4700 msGrid.ColWidth(4) = 1200 msGrid.ColWidth(5) = 1600 msGrid.ColWidth(6) = 1000 msGrid.TextMatrix(0, 1) = "No. Fact" msGrid.TextMatrix(0, 2) = "Fecha" msGrid.TextMatrix(0, 3) = "Cliente" msGrid.TextMatrix(0, 4) = "Tipo" msGrid.TextMatrix(0, 5) = "Total" msGrid.TextMatrix(0, 6) = "Estado" msGrid.Redraw = False SumaT = 0 For I = 1 To msGrid.Rows - 1 msGrid.Row = I msGrid.Col = 4 msGrid.CellAlignment = flexAlignCenterCenter msGrid.Col = 6 msGrid.CellAlignment = flexAlignCenterCenter msGrid.TextMatrix(I, 5) = Format(msGrid.TextMatrix(I, 5), "currency") msGrid.TextMatrix(I, 2) = Format(msGrid.TextMatrix(I, 2), "dd/mm/yyyy") If msGrid.TextMatrix(I, 4) = "1" Then msGrid.TextMatrix(I, 4) = "Crédito" Else msGrid.TextMatrix(I, 4) = "Contado" End If If msGrid.TextMatrix(I, 6) = "1" Then msGrid.TextMatrix(I, 6) = "Valida" Else msGrid.TextMatrix(I, 6) = "Anulada" End If SumaT = SumaT + msGrid.TextMatrix(I, 5) Next I msGrid.Redraw = True txtTotalLista.Text = Format(SumaT, "currency") End Sub
En el código anterior lo primero es validar si la búsqueda es por rango fechas o por Mes y Año eso lo validamos con el CheckBox, si la propiedad Value es 1 se busca por rango de fecha de lo contrario por Mes y año.
Lo siguiente es validar si el control txtNombreCli esta vació para filtrar también por el nombre del cliente.
Nos quedaría faltando el Botón Imprimir, para poder implementar este botón hubo que mover el procedimiento ImprimirFactura que estaba en el formulario de ventas a un modulo nuevo llamado Mod_Impresiones. Y se le hicieron unas modificaciones para que fuera mas global a la hora de imprimir.
Cambie el nombre de este procedimiento de imprimir al siguiente ImprimirFactura_carta:
Sub ImprimirFactura_carta(N_factura) Dim RecorsetFactura As New ADODB.RecordSet Dim RecosetEncaFact As New ADODB.RecordSet Sql = "SELECT tblProductos.CodigoPro, tblProductos.NombrePro, tblDetalle_Venta.Cantidad_dv, tblDetalle_Venta.P_Venta_dv, tblProductos.Impuesto, tblDetalle_Venta.Descuento_dv, ((tblDetalle_Venta.Cantidad_dv * tblDetalle_Venta.P_Venta_dv) - tblDetalle_Venta.Descuento_dv) as Subtotal" _ & " FROM tblProductos INNER JOIN tblDetalle_Venta ON tblProductos.IdProducto = tblDetalle_Venta.IdProducto WHERE tblDetalle_Venta.Num_Factura = " & N_factura Set RecorsetFactura = ConexionADO.Execute(Sql) SumaSubTotal = 0 SumaImpuesto = 0 SumaDescuento = 0 Do While Not RecorsetFactura.EOF SumaSubTotal = SumaSubTotal + RecorsetFactura("Subtotal") SumaImpuesto = SumaImpuesto + RecorsetFactura("Impuesto") SumaDescuento = SumaDescuento + RecorsetFactura("Descuento_dv") RecorsetFactura.MoveNext Loop Sql = "Select * From tblVentas as v, tblClientes Where v.IdCliente = tblClientes.IdCliente and v.Num_Factura = " & N_factura Set RecosetEncaFact = ConexionADO.Execute(Sql) If RecosetEncaFact.RecordCount > 0 Then TipoFactura = "Contado" If RecosetEncaFact("TipoFact") <> 0 Then TipoFactura = "Crédito" End If NombreApellidos_cli = RecosetEncaFact("NombreApellidos_cli") Identificacion_cli = RecosetEncaFact("Identificacion_cli") Telefonos_cli = RecosetEncaFact("Telefonos_cli") Direccion_cli = RecosetEncaFact("Direccion_cli") FechaHora = RecosetEncaFact("FechaHora") SubTotal = (SumaSubTotal - SumaImpuesto - SumaDescuento) Descuento = SumaDescuento Impuesto = SumaImpuesto TotalFactura = SumaSubTotal End If NProductos = RecorsetFactura.RecordCount - 1 Set DtrFacturaVenta.DataSource = RecorsetFactura With DtrFacturaVenta .Sections("Sección2").Controls("Etq_Empresa").Caption = Glo_NombreEmpresa .Sections("Sección2").Controls("Etq_NumFactura").Caption = N_factura .Sections("Sección2").Controls("Etq_Termino").Caption = RecosetEncaFact("TipoFact") .Sections("Sección2").Controls("Etq_Regimen").Caption = G_Empresa_Regimen .Sections("Sección2").Controls("Etq_Nit").Caption = Glo_NitEmpresa .Sections("Sección2").Controls("Etq_Telefono").Caption = Glo_TelefonoEmpresa .Sections("Sección2").Controls("Etq_Direccion").Caption = Glo_DireccionEmpresa .Sections("Sección2").Controls("Etq_Descripcion").Caption = Glo_DescripcionEmpresa If Dir(Glo_LogoEmpresa) <> "" Then Set .Sections("Sección2").Controls("imgLogo").Picture = LoadPicture(Glo_LogoEmpresa) End If .Sections("Sección2").Controls("Etq_FechaFact").Caption = FechaHora .Sections("Sección2").Controls("Etq_NomCliente").Caption = NombreApellidos_cli .Sections("Sección2").Controls("Etq_ClienNit").Caption = Identificacion_cli .Sections("Sección2").Controls("Etq_ClienDireccion").Caption = Direccion_cli .Sections("Sección2").Controls("Etq_ClienTelefono").Caption = Telefonos_cli .Sections("Sección5").Controls("Etq_Subtotal").Caption = Format(SubTotal, "currency") .Sections("Sección5").Controls("Etq_Impuesto").Caption = Format(Impuesto, "currency") .Sections("Sección5").Controls("Etq_Descuento").Caption = Format(Descuento, "currency") .Sections("Sección5").Controls("Etq_TotalFactura").Caption = Format(TotalFactura, "currency") .Sections("Sección5").Controls("Etq_NumArt").Caption = NProductos End With End Sub
De esta manera podemos llamar desde cualquier parte del proyecto este procedimiento pasarle el numero de factura para que nos de la vista previa de la misma.
El código del botón imprimir quedo de la siguiente manera:
Private Sub cmdImprimir_Click() Nfactura = msGrid.TextMatrix(msGrid.Row, 1) If Nfactura <> "" Then Call ImprimirFactura_carta(Nfactura) End If End Sub
Se toma el numero de la factura que se selecciono en el Grid y se le envía al procedimiento para que nos muestre la factura para impresión.
Como se quito el procedimiento ImprimirFactura de el formulario Venta hay que cambiarle el nombre al llamado que se le hace desde esa ventana para que no salga error cuando se creen las facturas quedaría de la siguiente manera:
En el procedimiento Sub Finalizar_Guardado_Factura() renombramos el procedimiento call ImprimirFactura(Num_Factura) por:
Call ImprimirFactura_carta(Num_Factura)
Nos vemos en la siguiente lección.
Suscribete a Youtube
Siguenos en Twitter
Siguenos en Facebook