Para terminar de configurar la Factura de Ticket nos falta algunas modificaciones.
El sistema hay que cargarle la configuración de archivo INI para eso hay que crear el siguiente procedimiento:
Sub CargarArchivoConfiguracion() glob_conf_ImpreFacturacion = Leer_Ini(Path_Archivo_Ini, "ImpreFacturacion", "") glob_conf_ImpreInformes = Leer_Ini(Path_Archivo_Ini, "ImpreInformes", "") glob_conf_ImpreCierreCaja = Leer_Ini(Path_Archivo_Ini, "ImpreCierreCaja", "") glob_conf_ImpresoraTikets = Leer_Ini(Path_Archivo_Ini, "ImpresoraTicket", 0) End Sub
Este procedimiento va en el formulario principal frmPrincipal, con esto ya el sistema va a tener cargada las variables con las configuraciones que tenemos.
Nos falta indicarle a la ventana de ventas que si escogimos que imprima con la impresora de Ticket use el procedimiento que creamos para eso:
Para indicarle esto debemos ir al formulario de ventas y irnos al procedimiento Sub Finalizar_Guardado_Factura()
Vamos a modificar la siguientes lineas:
If glob_conf_ImpresoraTikets = 0 Then Call ImprimirFactura_carta(Num_Factura) Else Call ImprimirFactura_Ticket(Num_Factura) End If
Si glob_conf_ImpresoraTikets es igual a cero entonces imprime con la impreso normal pero si es 1 entonces con la de ticket.
El procedimiento completo queda de la siguiente manera:
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 'Se guarda en la tabla ventas Sql = "Insert Into tblVentas (Num_Factura, FechaHora, TipoFact, Dias, TotalFactura, EstadoFact, Comentario, Efectivo, Cambio, IdCliente, IdUsuario) " _ & " VALUES (" & Num_Factura & ",'" & FechaHora & "'," & Me.cmdTipoFact.ListIndex & "," & txtDias.Text & ",'" & CCur(txtTotalFactura) & "',1,'" & Comentario & "','" & CCur(txtVECambio.Text) & "','" & CCur(txtCambio.Text) & "'," & CodigoCliente & "," & Glo_IdUsuario & ")" 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
Corrección de Errores
Mientras hice pruebas al sistema note algunos errores por corregir y pego el código ya corregido para que ustedes lo corrijan:
Sub BuscarProductoCodigo() Dim Sql As String Sql = "Select * From tblProductos Where CodigoPro = '" & txtCodigoPro.Text & "'" Set RecordSet_Producto = ConexionADO.Execute(Sql) If RecordSet_Producto.RecordCount > 0 Then Call DatosProducto(RecordSet_Producto("IdProducto")) txtCant_Pro.SetFocus End If End Sub
En lo anterior agregue un condicional que valida que el producto exista If RecordSet_Producto.RecordCount > 0 Then
Luego:
Sub DatosProducto(Id_Producto) IdProducto = Id_Producto RecordSet_Producto.Filter = " IdProducto = " & Id_Producto If RecordSet_Producto.RecordCount > 0 Then With RecordSet_Producto txtCodigoPro.Text = !CodigoPro txtNombrePro.Text = !NombrePro txtPrecioV_Pro.Text = !PVenta1Pro If cmbPrecios.ListIndex = 0 Then txtPrecioV_Pro.Text = !PVenta1Pro ElseIf cmbPrecios.ListIndex = 1 Then txtPrecioV_Pro.Text = Format(!PVenta2Pro, "currency") Else txtPrecioV_Pro.Text = Format(!PVenta3Pro, "currency") End If PrecioVentaGlob = txtPrecioV_Pro.Text txtPrecioMinimoPro.Text = Format(!PMinimoPro, "currency") txtExistPro.Text = !ExistPro Precio2_Producto = !PVenta2Pro Precio3_Producto = !PVenta3Pro PrecioC_Pro = !PCostoPro End With End If End Sub
Agregue la linea IdProducto = Id_Producto porque no tomaba el producto cuando buscaba por código
Private Sub txtCodigoPro_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = 13 And txtCodigoPro.Text <> "" Then Call BuscarProductoCodigo Exit Sub End If If msGrid.Rows > 0 And KeyCode = 13 Then Call cmdGuardarFact_Click End If End Sub
Existía otro error al dar Enter al buscar por código en ves de buscar el producto me salia la ventana de cobro esto se solucion agregando:
txtCant_Pro.SetFocus y Exit Sub
Private Sub cmdGuardarFact_Click() If cmdTipoFact.ListIndex = 0 Then 'contado Call AbrirVentanaCambio Call DesactivarBotones ElseIf cmdTipoFact.ListIndex = 1 Then 'crédito If txtAbonoFact.Text <> "" Then If CCur(txtAbonoFact.Text) > 0 Then Call AbrirVentanaCambio Call DesactivarBotones Else Call Finalizar_Guardado_Factura End If End If End If End Sub
En este procedimiento agregue el codicional If txtAbonoFact.Text <> “” Then para que valide si el campo abono no esta vació al guardar una venta a crédito.
En El formulario de Buscar Cliente debemos corregir la función que selecciona al cliente:
Private Sub cmdSeleccionar_Click() Dim Codigo As Long Dim Identifi As String Dim Nombre As String Dim Telefono As String Dim Cupo As Currency Dim PrecioVenta As Integer 'If msGrid.Row > 0 Then ' IdTipoUsuario = msGrid.TextMatrix(msGrid.Row, 1) ' Call frmAdministacionUsuarios.LlenarUsuario(IdTipoUsuario) ' Unload Me 'End If Codigo = msGrid.TextMatrix(msGrid.Row, 1) If Codigo <> 0 Then If glob_FormularioSolicBuscarCli = "frmVentas" Then Nombre = msGrid.TextMatrix(msGrid.Row, 2) Identifi = msGrid.TextMatrix(msGrid.Row, 3) Telefono = msGrid.TextMatrix(msGrid.Row, 4) Cupo = msGrid.TextMatrix(msGrid.Row, 5) PrecioVenta = Val(msGrid.TextMatrix(msGrid.Row, 6)) If IsNull(PrecioVenta) = True Then PrecioVenta = 0 End If Call frmVentas.SeleccionarCliente(Codigo, Identifi, Nombre, Telefono, Cupo, PrecioVenta, "") Unload Me End If End If End Sub
Corregí la linea Call frmVentas.SeleccionarCliente(Codigo, Identifi, Nombre, Telefono, Cupo, PrecioVenta, “”) le faltaba el parametro final