Que tal programadores siguiendo con el Listado de Ventas, esta ves vamos a trabajar la parte de Anular la factura.
Colabora y Suscribete a mi canal de
Para hacer la anulación de una factura hay que hacer varios pasos que son los siguientes:
- Hacer la devolución en el inventario de los productos (suma la existencia)
- Hacer el Registro de este movimiento en el kardex de cada producto
- Editar la Factura y cambiar el estado a 0 (Anulado)
En el evento clic de botón anular hacer la validación de si se quiere o no anular la factura para evitar un error de procedimiento que sin querer de de clic para esto se hace la confirmación de la acción.
Nfactura = msGrid.TextMatrix(msGrid.Row, 1) If Nfactura <> "" Then Res = MsgBox("Está seguro de anular la factura No. " & Nfactura & " ?", vbYesNo, "Anular Factura") Call Anular_Factura(Nfactura) End If
Los siguiente es crear el procedimiento para que haga el proceso de Anulación y lo llamaremos Anular_Factura al cual le pasaremos el número de la factura.
Ya dentro del procedimiento el primer paso es hacer la devolución de cada producto en la tabla productos en pocas palabras sumar la existencia que se vendió.
Para eso hacer una sola consulta donde se relación la tabla producto y la tabla detalle_venta y mediante un update.
'*************** Consulta que suma todos los articulos del detalle a inventario Sql = "UPDATE tblProductos as ar INNER JOIN tblDetalle_Venta as d ON ar.IdProducto = d.IdProducto SET ar.ExistPro = (ar.ExistPro + d.Cantidad_dv) where d.Num_Factura = " & Num_Factura ConexionADO.Execute Sql
El siguiente punto registrar este movimiento en el kardex, para eso se escribe un nuevo registro por cada producto donde se suma la cantidad que se vendió.
'/*//*********************** crear el historial de cada articulo en el kardex Sql = "INSERT INTO tblKardex (Fecha, IdProducto, Detalle, D_C, Cantidad, Costo,Cant_Saldo) Select Now, dt.IdProducto, 'Anulación de Venta Fra. N° " & Num_Factura & " '," _ & Num_Factura & ", dt.Cantidad_dv, dt.P_Costo_dv, (Select ExistPro from tblProductos where IdProducto = dt.IdProducto) from tblDetalle_Venta as dt Where dt.Num_Factura = " & Num_Factura ConexionADO.Execute Sql
La diferencia de esta consulta con la que se ejecuta cuando se hace la venta esta en dt.Cantidad_dv * -1 se quita la multiplicación para que no quede negativo quedando solamente dt.Cantidad_dv y se coloque una función llamada Now de sql para la fecha actual en el select.
Y el ultimo paso es cambiar el estado de la factura para se hace un update y se cambia el estado de la factura a 0.
Sql = "Update tblVentas SET EstadoFact = 0 Where Num_Factura = " & Num_Factura ConexionADO.Execute Sql
Para que nos refleje el cambio en el grid hay que llamar al procedimiento de listado de facturas:
Call ListarFacturasVenta
Hay que hacer unas modificaciones en el ListarFacturasVenta para que me muestre en rojo la factura anulada y para que no sume estas al mostrarnos el total de las ventas.
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" SumaT = SumaT + msGrid.TextMatrix(I, 5) Else msGrid.TextMatrix(I, 6) = "Anulada" msGrid.Col = 6 msGrid.CellBackColor = &HC0& 'color de fondo msGrid.CellForeColor = &H80000005 'color de la letra End If Next I msGrid.Redraw = True txtTotalLista.Text = Format(SumaT, "currency")
Subí dentro del condiciona la suma de la Factura solo si es 1 se suma la factura.
Y en la parte del else se cambia el color de fondo de la celada a rojo y la fuente de color blanco quedando de la siguiente manera al mostrar una factura anulada:
Suscribete a Youtube
Siguenos en Twitter
Siguenos en Facebook