Curso de Software de Ventas Parte 32, Ventana de Ventas 7 – Ingresar Productos

programaresfacil.co

En esta sección vemos como se ingresan productos en el detalle de la factura, para eso se crea un procedimiento que toma los datos esenciales del producto para agregarlos a la tabla detalle de venta, en el botón Ingresar va el siguiente código:

Private Sub cmdIngresarPro_Click()
    Call IngresarProducto
    
End Sub

El sub procedimiento IngresarProducto, lo primero es validar los campos del producto seleccionado antes de ingresarlo a la base de datos, un validación importante es el precio minimo que debe tener el cuenta el descuento que se le hizo al producto.

Colabora y Suscribete a mi canal de   

 

Después de esto se verifica si el producto que se agrega es el primero de la lista, si sí es el primero entonces se genera un numero temporal con el que se guardara en el detalle el producto agregado.

Luego de las validación se hacer el sql que ingresa el producto en la tabla detalle el código siguiente:

Sub IngresarProducto()
    Dim PrecioMinimo As Currency
    Dim Num_Proc As Double
    Dim Valor_Impuesto As Currency
    Dim Imp_TotalPro, precioVpro As Currency
   
    
    
    If CCur(txtPrecioV_Pro) = 0 Then
        MsgBox "El precio venta del articulo no puede ser cero", vbExclamation, "Error"
       Exit Sub
    End If
    
    If txtCant_Pro.Text = 0 Then
       MsgBox "La cantidad del artículo no puede ser cero", vbExclamation, "Error"
       Exit Sub
    End If
   
    If CCur(txtValorTotalPro) <= 0 Then
       MsgBox "El total del producto no puede ser negativo ni igual a cero", vbCritical, "Error"
       txtCant_Pro = 0
       txtCant_Pro.SetFocus
    End If
    
    PrecioMinimo = CCur(txtPrecioMinimoPro.Text)
    
    If PrecioMinimo > 0 Then
       precioVpro = CCur(txtValorTotalPro) / txtCant_Pro.Text
       If CCur(txtPrecioV_Pro) < PrecioMinimo Then
          MsgBox "El precio digitado no puede ser menor al precio mínimo establecido", vbExclamation, "Precio mínimo"
          txtPrecioV_Pro.Text = PrecioVentaGlob
          txtValorTotalPro = txtCant_Pro * CCur(txtPrecioV_Pro)
          Exit Sub
       End If
    End If
    
    'Calcular Impuestos
    mp_TotalPro = 0
    If G_Empresa_Regimen = "Común" And PorImpuesto_Producto > 0 Then
       Num_Porc = (PorImpuesto_Producto / 100) + 1
       Valor_Impuesto = CCur(txtValorTotalPro) / Num_Porc
       mp_TotalPro = CCur(txtValorTotalPro) - Valor_Impuesto
    End If
    
    If msGrid.Rows <= 1 Then
       ConsecutivoTemp = UltimaVentaTemp
    End If
    
    Sqlinsert = "Insert Into tblDetalle_Venta (Num_VentaTemp, IdProducto, Cantidad_dv, P_Costo_dv, P_Venta_dv, Impuesto_dv, Descuento_dv) " _
            & "VALUES (" & ConsecutivoTemp & ", " & IdProducto & ", '" & txtCant_Pro & "', '" & PrecioC_Pro & "', '" & CCur(txtPrecioV_Pro.Text) & "', '" & mp_TotalPro & "', '" & txtDesuentoVPro & "' ) "
    
    ConexionADO.Execute Sqlinsert, , adExecuteNoRecords
    
    
    Call LlenarGridProductos
    
    Call LimpiarDatosProducto
    
End Sub

Función para generar el numero temporal con que se guarda el detalle de la factura actual. Este numero se genera con el día actual y hora, minutos y segundos quedando de la siguiente manera:

Function UltimaVentaTemp()
     UltimaVentaTemp = Format(Now, "dd") & Format(Now, "hhmmss")
End Function

La tabla Detalle de venta es la siguiente:

programaresfacil.co

Se actualizo el sub procedimiento BuscarProductoNombre de la siguiente manera:

Sub BuscarProductoNombre()
    Dim Sql As String
    Dim Index As Long
    
    Sql = "Select Top 20 * From tblProductos Where NombrePro Like '" & txtNombrePro.Text & "%'"
    Set RecordSet_Producto = ConexionADO.Execute(Sql)
    
    If RecordSet_Producto.RecordCount > 0 Then
       lstListaRapida.Clear
       Index = 0
       Do While Not RecordSet_Producto.EOF
                lstListaRapida.AddItem RecordSet_Producto("NombrePro")
                lstListaRapida.ItemData(Index) = RecordSet_Producto("IdProducto")
                Index = Index + 1
                RecordSet_Producto.MoveNext
       Loop
       lstListaRapida.Visible = True
       lstListaRapida.ListIndex = 0
    Else
       lstListaRapida.Visible = False
    End If
    
    
End Sub

También se actualizo el evento KeyUp del control lstListaRapida se corrigió la variable IdProducto

Private Sub lstListaRapida_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim IdPro As Long
    
    If KeyCode = 40 Or KeyCode = 38 Then
       IdProducto = lstListaRapida.ItemData(lstListaRapida.ListIndex)
       Call DatosProducto(IdProducto)
    End If
    If KeyCode = 27 Then
       lstListaRapida.Visible = False
    End If
    If KeyCode = 13 Then
       txtCant_Pro.SetFocus
       lstListaRapida.Visible = False
    End If
End Sub

Otro procedimiento que se modifico fue DatosProducto donde se cambio la variable que recibe el parámetro llamada IdProducto por Id_Producto

Sub DatosProducto(Id_Producto)
    RecordSet_Producto.Filter = " IdProducto = " & Id_Producto
    If RecordSet_Producto.RecordCount > 0 Then
       With RecordSet_Producto
            txtCodigoPro.Text = !CodigoPro
            txtNombrePro.Text = !NombrePro
            txtPrecioV_Pro.Text = !PVenta1Pro
            If cmbPrecios.ListIndex = 0 Then
               txtPrecioV_Pro.Text = !PVenta1Pro
            ElseIf cmbPrecios.ListIndex = 1 Then
               txtPrecioV_Pro.Text = Format(!PVenta2Pro, "currency")
            Else
               txtPrecioV_Pro.Text = Format(!PVenta3Pro, "currency")
            End If
            PrecioVentaGlob = txtPrecioV_Pro.Text
            txtPrecioMinimoPro.Text = Format(!PMinimoPro, "currency")
            txtExistPro.Text = !ExistPro
            Precio2_Producto = !PVenta2Pro
            Precio3_Producto = !PVenta3Pro
            PrecioC_Pro = !PCostoPro
       End With
    End If
End Sub

Se creo el procedimiento para inicializar el control grid de productos:

Sub InicializarGrip()
    msGrid.Cols = 9
    msGrid.Rows = 1
    msGrid.ColWidth(0) = 0
    msGrid.ColWidth(1) = 0
    msGrid.ColWidth(2) = 900 'codigo
    msGrid.ColWidth(3) = 4300 'nombre
    msGrid.ColWidth(4) = 800 'cantidad
    msGrid.ColWidth(5) = 1300 'preciov
    msGrid.ColWidth(6) = 1300 'imp
    msGrid.ColWidth(7) = 1300 'subtotal
    msGrid.ColWidth(8) = 1300 'Desc

    msGrid.TextMatrix(0, 0) = "ID"
    msGrid.TextMatrix(0, 1) = "IdPro"
    msGrid.TextMatrix(0, 2) = "Código"
    msGrid.TextMatrix(0, 3) = "Nombre Producto"
    msGrid.TextMatrix(0, 4) = "Cant"
    msGrid.TextMatrix(0, 5) = "Precio V"
    msGrid.TextMatrix(0, 6) = "Impuesto"
    msGrid.TextMatrix(0, 7) = "Subtotal"
    msGrid.TextMatrix(0, 8) = "Descuento"
    

    
End Sub

Y por último el evento Load del formulario se agrega el procedimiento de inicializar grid:

Private Sub Form_Load()
    Call Inicial
    lstListaRapida.Top = 2605
    lstListaRapida.Left = 1920
    cmbPrecios.ListIndex = 0
    Call InicializarGrip
End Sub

Apóyanos siguiendo las redes sociales:

Suscribete a Youtube

Siguenos en Twitter

Siguenos en Facebook

Total Page Visits: 4397 - Today Page Visits: 1

Deja una respuesta