Curso de Software de Ventas Pt 51 – Cartera, Movimientos, Cierra de Caja

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:

FormulariosVarios_2.zip (27 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

 

 

Comentarios de Facebook
Total Page Visits: 3577 - Today Page Visits: 3

Deja una respuesta