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

