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.
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
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:
En este proyecto, vamos a desarrollar una calculadora sencilla usando Visual Basic 6, que permite…
6 de septiembre de 2024 - La demanda de desarrolladores de software sigue en aumento,…
En un movimiento histórico, la Unión Europea ha aprobado la primera ley de inteligencia artificial…
¿Sigues trabajando con Visual Basic 6 y necesitas una forma eficiente de acceder a tus…
OpenAI revoluciona la interacción con IA: ChatGPT ahora interpreta imágenes En un avance significativo para la…
Bienvenido al Curso Básico de Visual Basic 6! Este curso está diseñado para llevarte a…
Este sitio utiliza cookies desea activarlas
Deja un comentario