Curso de Software de Ventas Pt 48 Ventas Editar Producto, Facturas Temporales

En esta lección explico algo que nos faltaba poder modificar un producto ingresado en las ventas y como recuperar una factura que se ingreso pero que no se guardo.

Colabora y Suscribete a mi canal de   

Para el primer punto que es modificar un producto ingresado debes seguir varios pasos para lograrlo:

1. Cuando de de doble clic sobre el producto en el grid debe ejecutarse la función de modificar.

Private Sub msGrid_DblClick()
    Call EditarProducto
End Sub

La función que se encarga de modificar el producto:

Sub EditarProducto()
    If msGrid.Row = 0 Then
       Exit Sub
    End If
    V_Editar_Producto = True
    Filas = msGrid.Row
    IdProducto = msGrid.TextMatrix(Filas, 1)
    Codigo = msGrid.TextMatrix(Filas, 3)
    Nombre = msGrid.TextMatrix(Filas, 4)
    Cantidad = msGrid.TextMatrix(Filas, 5)
    PrecioVp = CCur(msGrid.TextMatrix(Filas, 6))
    DescuentoP = CCur(msGrid.TextMatrix(Filas, 9))
    Subtotal = (Cantidad * PrecioVp) - DescuentoP
    
    txtCodigoPro = Codigo
    Call BuscarProductoCodigo
        
    txtCant_Pro = Cantidad
    txtPrecioV_Pro = PrecioVp
    txtValorTotalPro = Subtotal
    txtDesuentoVPro = DescuentoP
    txtCant_Pro.SetFocus
End Sub

En el código anterior notamos que primero verificamos que sea un producto el seleccionado validando que la fila seleccionada no sea cero.

Usamos una variable a nivel de formulario para notificar que se esta modificando un producto para eso declaramos la variable en la parte superior del codigo del formulario:

Dim V_Editar_Producto As Boolean

Con esto todas las variables superiores a nivel de formulario quedarían así:

Dim CodigoCliente As Long
Dim IdProducto As Long
Dim V_Editar_Producto As Boolean
Dim Precio2_Producto As Currency
Dim Precio3_Producto As Currency
Dim PrecioVentaGlob As Currency
Dim PrecioC_Pro As Currency
Dim RecordSet_Producto As New ADODB.RecordSet
Dim Direccion_Cliente As String
Dim ConsecutivoTemp

Siguiendo con el código de EditarProducto obtenemos todos los datos del producto del grid, luego se calcula el subtotal y se hace la consulta usando el procedimiento que ya tenemos BuscarProductoCodigo.

Luego de esto asignamos a los campos del formulario de productos los datos que ya obtuvimos y ponemos el foco en  txtCant_Pro.

2. Actualizar los datos modificados del producto en la base de datos para eso modificamos el procedimiento llamado IngresarProducto que quedaría de la siguiente manera:

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
    
    If V_Editar_Producto = False Then
        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
    Else
            
        SqlUpdate = "Update tblDetalle_Venta SET Cantidad_dv = '" & txtCant_Pro & "' , P_Venta_dv = '" & CCur(txtPrecioV_Pro.Text) & "', Descuento_dv = '" & txtDesuentoVPro & "' Where IdProducto = " & IdProducto
        ConexionADO.Execute SqlUpdate, , adExecuteNoRecords
    End If
    
    Call LlenarGridProductos
    
    Call LimpiarDatosProducto
    
End Sub

Si notamos en el código se coloco un condicional que determina si se va a agregar un producto nuevo a se va a modificar: If V_Editar_Producto = False Then 

Si es true entonces se actualiza el producto usando el código SQL que esta en SqlUpdate .

para terminar debemos poner en false la variable V_Editar_Producto en varias partes del codigo:

Sub Inicial()
    V_Editar_Producto = False
    txtFechaApro.Text = Format(Date, "dd/mm/yyyy")
    cmdTipoFact.ListIndex = 0
    txtDias.Text = 0
    txtDesuentoVPro.Text = 0
    txtPorcDescuentoPro = 0
End Sub
Sub LimpiarDatosProducto()
    V_Editar_Producto = False
    txtCodigoPro.Text = ""
    txtNombrePro.Text = ""
    txtCant_Pro.Text = 0
    txtPrecioV_Pro.Text = 0
    txtValorTotalPro.Text = 0
    txtPorcDescuentoPro.Text = 0
    txtDesuentoVPro.Text = 0
    txtPrecioMinimoPro.Text = 0
    txtExistPro.Text = 0
    txtNombrePro.SetFocus
End Sub

Cargar Facturas Temporales

Se crea un formulario Llamado frmFacturaTemp que tiene una Propiedad MDIChild = false porque va a hacer un formulario modal el código del formulario completo es el siguiente:

Sub ListarTemporales()
    Dim Sql As String
    Dim Columnas As Integer
    
    Sql = "SELECT tblDetalle_Venta.Num_VentaTemp, Sum(tblDetalle_Venta.P_Venta_dv*tblDetalle_Venta.Cantidad_dv) AS Total From tblDetalle_Venta GROUP BY tblDetalle_Venta.Num_VentaTemp ORDER BY Count(tblDetalle_Venta.Id_detalle);"
    Columnas = 2
    Call LlenarGrid(msGrid, Sql, Columnas)
    
    
    msGrid.ColWidth(0) = 0
    msGrid.ColWidth(1) = 1300
    msGrid.ColWidth(2) = 1700
    
    msGrid.TextMatrix(0, 1) = "No. Factura"
    msGrid.TextMatrix(0, 2) = "Valor Total"
    
End Sub

Private Sub cmdBorrarPro_Click()
    If msGrid.Row > 0 Then
       Num_Factura = msGrid.TextMatrix(msGrid.Row, 1)
       If Num_Factura <> "" Then
          Res = MsgBox("¿Esta segúro de borrar la factura temporal No. " & Num_Factura & "? ", vbYesNo, "Borrar Producto")
          If Res = vbYes Then
             Sql = "Delete from tblDetalle_Venta Where Num_VentaTemp = " & Num_Factura
             ConexionADO.Execute Sql
             Call ListarTemporales
          End If
       End If
    End If
End Sub

Private Sub cmdCerrar_Click()
    Unload Me
End Sub

Private Sub cmdSeleccionar_Click()
    Num_Temp = msGrid.TextMatrix(msGrid.Row, 1)
    If Num_Temp <> "" Then
        Call frmVentas.CargarFactTemporal(Num_Temp)
        Unload Me
    End If
End Sub

Private Sub Form_Load()
    Call ListarTemporales
End Sub

Private Sub msGrid_DblClick()
    Call cmdSeleccionar_Click
End Sub

Luego en el formulario de Ventas debemos tener una función llamada CargarFactTemporal que recibo el numero de factura temporal.

Sub CargarFactTemporal(Cons_Temp)
    ConsecutivoTemp = Cons_Temp
    Call LlenarGridProductos
End Sub

En el vídeo explico todo paso a paso:

Total Page Visits: 4254 - Today Page Visits: 4

Deja una respuesta