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:
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