Si notaran el titulo en este articulo voy a regalar el código para que lo descarguen y les sea mas fácil terminar.
Como ya ha demorado mucho este curso voy a montar casi todo lo que falta en este articulo lo descarguen y quede prácticamente listo el software.
Pero primero debemos tener algunas cosas listas:
La base de datos debe tener las siguientes tablas:
Tabla ClaseMovimiento:
Esta tabla tiene los siguientes registros predeterminados:
Tabla Movimientos:
Tabla Tipo Movimientos con sus registros predeterminados:
Tabla Personas Movimiento:
Para el Cierre de Caja se necesita la siguiente Tabla:
Debe dejar todo esto listo para poder pasar al siguiente paso.
Siguiente paso es Pegas las siguientes funciones en el Modulo Consultas Mod_consultas
'---- MOVIMIENTOS Function Fun_GuardarPersona(Cedula, Nombres, Telefono, Direccion) Dim RecorsetTemp As New ADODB.RecordSet Dim sql As String On Error GoTo error RecorsetTemp.Open "Select * From PersonaMovimiento Where CedulaPersona = '" & Cedula & "'", ConexionADO, adOpenKeyset, adLockOptimistic If RecorsetTemp.RecordCount > 0 Then Fun_GuardarPersona = RecorsetTemp("idPersonaMovimiento") Exit Function Else IdPersona = UltimoIdTabla("PersonaMovimiento", "idPersonaMovimiento") RecorsetTemp.AddNew RecorsetTemp!idPersonaMovimiento = IdPersona RecorsetTemp!CedulaPersona = Cedula RecorsetTemp!NombresPersona = Nombres RecorsetTemp!TelefonoPersona = Telefono RecorsetTemp!DireccionPersona = Direccion RecorsetTemp.Update Fun_GuardarPersona = IdPersona End If Exit Function error: MsgBox "Fun_GuardarPersona - " & Err.Description, vbInformation, "Error - Guardar Nº " & Err.Number End Function Sub Fun_GuardarMovimiento(CodigoMov, NMov, Fecha, Tipo, ClaseMov, IdPers, Concepto, Valor) Dim RecorsetTemp As New ADODB.RecordSet Dim sql As String On Error GoTo error RecorsetTemp.Open "Select * From Movimientos Where idMovimientos = " & CodigoMov, ConexionADO, adOpenKeyset, adLockOptimistic If RecorsetTemp.RecordCount > 0 Then Else RecorsetTemp.AddNew RecorsetTemp!idMovimientos = UltimoIdTabla("Movimientos", "idMovimientos") End If RecorsetTemp!ConceptoMovimeinto = Concepto RecorsetTemp!Fecha_Movimiento = Fecha RecorsetTemp!Valor_Movimeinto = CCur(Valor) RecorsetTemp!idPersonaMovimiento = IdPers RecorsetTemp!idClaseMovimieno = ClaseMov 'Gatos o Ingreso RecorsetTemp!idTipoMovimiento = Tipo 'A que cuenta RecorsetTemp.Update MsgBox "Movimiento Guardado", vbInformation, "Guardar" Exit Sub error: MsgBox "Fun_GuardarMovimiento - " & Err.Description, vbInformation, "Error - Guardar Nº " & Err.Number End Sub Sub Fun_BorrarCampoTablaCodigo(Campo, Codigo, Tabla) Dim RecorsetTemp As New ADODB.RecordSet Dim sql As String If Codigo <> "" Then sql = "DELETE FROM " & Tabla & " Where " & Campo & " = " & Codigo RecorsetTemp.Open sql, ConexionADO, adOpenKeyset, adLockOptimistic End If End Sub Sub Fun_GuardarCuenta(Codigo, Nombre) Dim RecorsetTemp As New ADODB.RecordSet Dim sql As String On Error GoTo error RecorsetTemp.Open "Select * From ClaseMovimiento Where idClaseMovimieno = " & Codigo, ConexionADO, adOpenKeyset, adLockOptimistic If RecorsetTemp.RecordCount > 0 Then Else RecorsetTemp.AddNew RecorsetTemp!idClaseMovimieno = UltimoIdTabla("ClaseMovimiento", "idClaseMovimieno") End If RecorsetTemp!Nombre_Clase = Nombre RecorsetTemp.Update Exit Sub error: MsgBox "Fun_GuardarCuenta - " & Err.Description, vbInformation, "Error - Guardar Nº " & Err.Number End Sub
En el Modulo de Conexión:
En Código por si prefiere copiar y pegar:
Global Glo_UsuarioLogin As String Global Glo_NombreUsuario As String Global Glo_IdentificacionUs As String Global Glo_IdUsuario As Integer Global Glo_FormQueAbre As String Global glob_ModificarPro As Boolean Global glob_ModificarCliente As Boolean '---- Variables de Datos de la empresa Global Glo_NombreEmpresa As String Global Glo_NitEmpresa As String Global Glo_PropietarioEmpresa As String Global Glo_TelefonoEmpresa As String Global Glo_DireccionEmpresa As String Global Glo_DescripcionEmpresa As String Global Glo_LogoEmpresa As String Global G_Empresa_Regimen As String Global Path_Archivo_Ini As String '-------------- Variables Configuracion --------------- Global glob_conf_ImpreFacturacion As String Global glob_conf_ImpreInformes As String Global glob_conf_ImpreCierreCaja As String Global glob_conf_ImpresoraTikets As String Global glob_ModificarProveedor As Boolean '----------- variable de impresion ----------------- Global glob_Item_Impresion_mes As String Global glob_Item_Impresion_dia As String Global glob_FormularioSolicBuscarCli As String Global glob_FormularioSolicBuscarPro As String Global Glo_FormularioFacturasCli As Form
En el formulario Buscar Cliente en el botón Factura hay que agregar la siguiente linea:
Private Sub cmdFacturas_Click() Set Glo_FormularioFacturasCli = Me IdCliente = msGrid.TextMatrix(msGrid.Row, 1) If IdCliente <> "" Then frmFacturasCliente.Show End If End Sub
Luego de esto reemplazamos en el formulario frmFacturasCliente en el Sub Procedimiento DatosCliente quedando de la siguiente manera:
Sub DatosCliente() Fila = Glo_FormularioFacturasCli.msGrid.Row txtCodigoCli.Text = Glo_FormularioFacturasCli.msGrid.TextMatrix(Fila, 1) txtNombre_Cli.Text = Glo_FormularioFacturasCli.msGrid.TextMatrix(Fila, 2) End Sub
Lo unico que se hizo fue cambiar frmBuscarCliente por Glo_FormularioFacturasCli que es la variable que declaramos esto es necesario porque hay 2 maneras de llegar al formulario de frmFacturasCliente y debe tomar ese valor dependiendo el formulario que lo abrio.
Todo listo para agregar los formularios al software.
Descargue de este link los formulario y los informes:
Formularios Y Reportes Finales Software (335 descargas )
Puede descomprimir y luego pegar todos dentro de la carpeta del proyecto en el vídeo explico detallado estos pasos:
Esta es la lista de de formularios:
Para agregar un formulario al proyecto debe dar clic derecho en la ventana del Proyecto y le da clic derecho sobre el nombre del proyecto
Paso 1:
Paso 2:
Seleccionamos el formulario y le damos al botón Abrir
Para agregar un Reporte debemos seleccionar otra opción
Después de agregar los formularios y los reportes hay que agregar los item al Menú del formulario Principal, los que se deben crear de la siguiente manera:
La configuración de cada uno es la siguiente:
Caption: Cartera de Clientes
Name: mnuCarteraClientes
Caption: Movimientos
Name: mnuMovimientos
Caption: Caja
Name: mnuCaja
Caption: Abrir Caja
Name: mnuAbrirCaja
Caption: Cierre Caja
Name: mnuCierreCaja
Caption: –
Name: mnuRaya3
Caption: Egresos – Ingresos
Name: mnuEgresosIngresos
Caption: Lista de Ingresos y Egresos
Name: mnuListaIngrEgre
Caption: Informe de Ventas por dia
Name: mnuInformeVentasDia
En el evento clic de algunos menús va lo siguiente:
Private Sub mnuCarteraClientes_Click() frmCarteraClientes.Show End Sub Private Sub mnuAbrirCaja_Click() frmAbrirCaja.Show End Sub Private Sub mnuCierreCaja_Click() frmCuadreCaja.Show End Sub Private Sub mnuEgresosIngresos_Click() frmMovimientos.Show End Sub Private Sub mnuListaIngrEgre_Click() frmListaMovimientos.Show End Sub Private Sub mnuInformeVentasDia_Click() glob_Item_Impresion_dia = "VentasDia" frmInformeDia.Show End Sub
Con estos cambios ya tienen todo el software listo para trabajar, faltaría el pago de facturas de proveedor pero es lo mismo que clientes solo que para proveedores al igual que la cartera de Proveedores en el vídeo explico en detalle todo el funcionamiento de los formularios.
Pude comprar el Código Listo con el instalador incluido Software de Ventas Cactus 1.0 + Código
Corrección Formulario Ventas Guardado de Saldo de Cliente:
En el formulario de Ventas Puede reemplazar el procedimiento de Finalizar_Guardado_Factura:
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 'Registramos el Saldo Total en la Tabla Saldos IdCliente = CodigoCliente consulta = "Select IdCliente, Saldo from tblSaldos_Clientes Where IdCliente = " & IdCliente Set RecordCliente = ConexionADO.Execute(consulta) If RecordCliente.RecordCount = 0 Then sqlSaldo = "Insert into tblSaldos_Clientes (IdCliente, Saldo, FechaMod) Values (" & IdCliente & ", '" & SaldoFactura & "', now()) " Else 'Se toma el saldo guardado en la tabla y se le suma al saldo de la factura actual y se actualiza el saldo en la tabla Saldo = RecordCliente("Saldo") + SaldoFactura sqlSaldo = "Update tblSaldos_Clientes SET Saldo = '" & Saldo & "', FechaMod = Now() Where IdCliente = " & IdCliente End If ConexionADO.Execute sqlSaldo If chkImprimirSiNo.Value = 1 Then ' si el checkbox esta chuliado se imprime If glob_conf_ImpresoraTikets = 0 Then Call ImprimirFactura_carta(Num_Factura) Else Call ImprimirFactura_Ticket(Num_Factura) End If End If ConsecutivoTemp = UltimaVentaTemp Call LlenarGridProductos MsgBox "Venta Guardada", vbInformation, "Guardar" Call LimpiarVenta End Sub