Curso de Software de Ventas Parte 37, Listado de Ventas 1

ListadoVentas

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

Comentarios de Facebook

1091total visits,5visits today

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *