En esta lección mejorare el guardado de Facturas Temporales agregando los datos del cliente.
Al final encontrara el vídeo explicativo.
Lo primero es crear una tabla nueva llamada tblVentas_Temp que tendría los siguientes campos:
Los números en rojo es el tamaño del campo.
Luego se creas una consulta que se llamara cta_Listado_Fact_Temp la cual relacionamos ambas tablas tblDetalle_Ventas y tblVentas_Temp la consulta queda de la siguiente manera:
Esta es la consulta SQL.
SELECT tblVentas_Temp.IdVentTemp, tblVentas_Temp.nombre_cliente, Sum(((tblDetalle_Venta.Cantidad_dv*tblDetalle_Venta.P_Venta_dv)-tblDetalle_Venta.Descuento_dv)) AS Total, tblVentas_Temp.IdCliente, tblVentas_Temp.identificacion, tblVentas_Temp.telefono FROM tblDetalle_Venta INNER JOIN tblVentas_Temp ON tblDetalle_Venta.Num_VentaTemp = tblVentas_Temp.IdVentTemp GROUP BY tblVentas_Temp.IdVentTemp, tblVentas_Temp.nombre_cliente, tblVentas_Temp.IdCliente, tblVentas_Temp.identificacion, tblVentas_Temp.telefono;
Lo siguiente es modificar CrearFactura_Temp en el formulario de Ventas quedando de la siguiente manera:
Sub CrearFactura_Temp(IdVentTemp) Sql = "Insert into tblVentas_Temp (IdVentTemp, IdCliente, nombre_cliente, telefono, identificacion, total) " _ & "Values (" & IdVentTemp & ", " & CodigoCliente & ", '" & txtNombre_Cli & "', '" & txtTelefono_cli & "', '" & txtIdentificacion_Cli & "', '" & CCur(txtTotalFactura) & "' )" ConexionADO.Execute Sql End Sub
El Siguiente paso es modificar la el formulario de frmFacturasTemp todo el código para que les sea mas fácil queda de la siguiente manera:
Sub ListarTemporales() Dim Sql As String Dim Columnas As Integer Sql = "Select IdVentTemp, nombre_cliente, Total, IdCliente, identificacion, telefono from cta_Listado_Fact_Temp " Columnas = 6 Call LlenarGrid(msGrid, Sql, Columnas) msGrid.ColWidth(0) = 0 msGrid.ColWidth(1) = 1300 msGrid.ColWidth(2) = 2800 msGrid.ColWidth(3) = 1700 msGrid.ColWidth(4) = 0 'idcliente msGrid.ColWidth(5) = 0 'identifi msGrid.ColWidth(6) = 0 'telefono msGrid.TextMatrix(0, 1) = "No. Factura" msGrid.TextMatrix(0, 2) = "Cliente" msGrid.TextMatrix(0, 3) = "Valor Total" With msGrid For I = 1 To .Rows - 1 .TextMatrix(I, 3) = Format(.TextMatrix(I, 3), "currency") Next I End With 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 nombre_cliente = msGrid.TextMatrix(msGrid.Row, 2) id_cliente = msGrid.TextMatrix(msGrid.Row, 4) idenfi_cliente = msGrid.TextMatrix(msGrid.Row, 5) telef_cliente = msGrid.TextMatrix(msGrid.Row, 6) Call frmVentas.CargarFactTemporal(Num_Temp, id_cliente, nombre_cliente, idenfi_cliente, telef_cliente) Unload Me End If End Sub Private Sub Form_Load() Call ListarTemporales End Sub Private Sub msGrid_DblClick() Call cmdSeleccionar_Click End Sub
Y por ultimo se modifica el procedimiento que carga la factura temporal llamdo CargarFactTemporal en la tabla frmVentas
Sub CargarFactTemporal(Num_Temp, id_cliente, nombre_cliente, idenfi_cliente, telef_cliente) ConsecutivoTemp = Num_Temp CodigoCliente = id_cliente txtIdentificacion_Cli.Text = idenfi_cliente txtNombre_Cli.Text = nombre_cliente txtTelefono_cli = telef_cliente Call LlenarGridProductos End Sub
Con lo anterior cuando se selecciona una factura temporal se carga los productos y la información del cliente.
Impuesto en Ventas
Las modificaciones para que funcione los impuestos en ventas son las siguientes:
Tabla tblVentas
Para guardar el valor del impuesto en la tabla se modifica la consulta de la siguiente manera:
'Se guarda en la tabla ventas Sql = "Insert Into tblVentas (Num_Factura, FechaHora, TipoFact, Dias, ImpuestoTotal, TotalFactura, EstadoFact, Comentario, Efectivo, Cambio, IdCliente, IdUsuario, SaldoFactura) " _ & " VALUES (" & Num_Factura & ",'" & FechaHora & "'," & Me.cmdTipoFact.ListIndex & "," & txtDias.Text & ",'" & CCur(txtImpuestoFact) & "','" & CCur(txtTotalFactura) & "',1,'" & Comentario & "','" & CCur(txtVECambio.Text) & "','" & CCur(txtCambio.Text) & "'," & CodigoCliente & "," & Glo_IdUsuario & ", '" & SaldoFactura & "')" ConexionADO.Execute Sql
El procedimiento completo queda así:
Sub Finalizar_Guardado_Factura() Num_Factura = Ultima_Factura_Venta() 'Ultima venta FechaHora = txtFechaApro.Text & " " & Time 'fecha y hora Comentario = "-" If txtObervacionesPro.Text <> "" Then 'comentario Comentario = txtObervacionesPro.Text End If 'calcular saldo SaldoFactura = 0 If cmdTipoFact.ListIndex = 1 Then If CCur(txtAbonoFact.Text) > 0 Then SaldoFactura = CCur(txtTotalFactura) - CCur(txtAbonoFact.Text) Else SaldoFactura = CCur(txtTotalFactura) End If End If 'Se guarda en la tabla ventas Sql = "Insert Into tblVentas (Num_Factura, FechaHora, TipoFact, Dias, ImpuestoTotal, TotalFactura, EstadoFact, Comentario, Efectivo, Cambio, IdCliente, IdUsuario, SaldoFactura) " _ & " VALUES (" & Num_Factura & ",'" & FechaHora & "'," & Me.cmdTipoFact.ListIndex & "," & txtDias.Text & ",'" & CCur(txtImpuestoFact) & "','" & CCur(txtTotalFactura) & "',1,'" & Comentario & "','" & CCur(txtVECambio.Text) & "','" & CCur(txtCambio.Text) & "'," & CodigoCliente & "," & Glo_IdUsuario & ", '" & SaldoFactura & "')" ConexionADO.Execute Sql 'A los productos del detalle se les asigna el numero de factura Sql = "Update tblDetalle_Venta set Num_Factura = '" & Num_Factura & "', Num_VentaTemp = '0' where Num_VentaTemp = " & ConsecutivoTemp ConexionADO.Execute Sql '*************** Consulta que resta todos los articulos de 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 '/*//*********************** crear el historial de cada articulo en el kardex Sql = "INSERT INTO tblKardex (Fecha, IdProducto, Detalle, D_C, Cantidad, Costo,Cant_Saldo) Select '" & FechaHora & "', dt.IdProducto, 'Venta de Mercancia según Fra. N° " & Num_Factura & " '," _ & Num_Factura & ", dt.Cantidad_dv * -1, 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 If glob_conf_ImpresoraTikets = 0 Then Call ImprimirFactura_carta(Num_Factura) Else Call ImprimirFactura_Ticket(Num_Factura) End If ConsecutivoTemp = UltimaVentaTemp Call LlenarGridProductos MsgBox "Venta Guardada", vbInformation, "Guardar" Call LimpiarVenta End Sub