Bom dia,
Tenho um formulário para controle de contas correntes de clientes e gostaria que se a data do último lançamento de cada conta corrente seja menor do que a data de hoje e o saldo negativo o sistema, ao carregar o formulário principal calculasse o valor dos juros e incluisse esse registro na tabela.
Até aí tudo bem, consegui fazer via VBA através do código abaixo. O problema é que posso ter n clientes com n contas correntes cadastradas e é aí que o código deixa de funcionar porque acaba virando um loop infinito pois ele sempre encontra o cliente 1 e a conta corrente 1. Sintetizando, preciso que o sistema calcule os juros para o cliente 1, conta corrente 1,2,3,4,n e depois passe para o cliente 2, conta corrente 1,2,3,4,n e assim por diante.
Os dados principais das contas correntes estão na tabela tblContaCorrente e os lançamentos, saldos, etc na tblLançamentosContaCorrente.
Alguém tem alguma idéia de como encerrar esse loop infinito?
Grato
Private Sub Form_Load()
Dim rslançamentos As DAO.Recordset
Dim Dt As Date
Dim DtLançamento As Date
Dim txJr As Currency
Dim VlJuros As Currency
Dim idc As Long
Dim idcc As Long
Dim Valor As Currency
Dim sld As Currency
Dim idl As Long
Dim idln As Long
Set rslançamentos = CurrentDb.OpenRecordset("tblLançamentosContaCorrente")
Do While Not rslançamentos.EOF
idc = rslançamentos!idCliente 'código do cliente
idcc = DLookup("idContaCorrente", "tblLançamentosContaCorrente", "idCliente = " & idc) 'código da conta corrente
idl = DLast("idLançamento", "tblLançamentosContaCorrente", "idContaCorrente = " & idcc) 'código do último lançamento da conta corrente idcc
Dt = DLookup("DataLcto", "tblLançamentosContaCorrente", "idLançamento = " & idl) 'data do último lançamento
sld = DLookup("Saldo", "tblLançamentosContaCorrente", "idLançamento = " & idl) 'saldo
txJr = DLookup("TxJuros", "tblContaCorrente", "idContaCorrente = " & idcc & " And idCliente = " & idc) 'taxa de juros a ser utilizada
'verifica se a data do último lançamento é menor do que hoje
If Dt < Date And sld < 0 Then
'se verdadeiro calcula o valor dos juros
VlJuros = ((sld * (txJr / 30)) / 100)
End If
'se o valor dos juros for maior do que 0 cria o registro
If VlJuros <> 0 Then
rslançamentos.AddNew
idln = rslançamentos!idLançamento
idLançamento = idln
rslançamentos!idContaCorrente = idcc
rslançamentos!idCliente = idc
rslançamentos!DataLcto = Date
rslançamentos!Tipo = "Débito"
rslançamentos!Descrição = "JUROS"
rslançamentos!Débito = VlJuros
rslançamentos!Crédito = "0,00"
rslançamentos!SaldoAnterior = sld
rslançamentos!Saldo = (sld + VlJuros)
rslançamentos.Update
End If
Loop
rslançamentos.Close
Set rslançamentos = Nothing
End Sub
Tenho um formulário para controle de contas correntes de clientes e gostaria que se a data do último lançamento de cada conta corrente seja menor do que a data de hoje e o saldo negativo o sistema, ao carregar o formulário principal calculasse o valor dos juros e incluisse esse registro na tabela.
Até aí tudo bem, consegui fazer via VBA através do código abaixo. O problema é que posso ter n clientes com n contas correntes cadastradas e é aí que o código deixa de funcionar porque acaba virando um loop infinito pois ele sempre encontra o cliente 1 e a conta corrente 1. Sintetizando, preciso que o sistema calcule os juros para o cliente 1, conta corrente 1,2,3,4,n e depois passe para o cliente 2, conta corrente 1,2,3,4,n e assim por diante.
Os dados principais das contas correntes estão na tabela tblContaCorrente e os lançamentos, saldos, etc na tblLançamentosContaCorrente.
Alguém tem alguma idéia de como encerrar esse loop infinito?
Grato
Private Sub Form_Load()
Dim rslançamentos As DAO.Recordset
Dim Dt As Date
Dim DtLançamento As Date
Dim txJr As Currency
Dim VlJuros As Currency
Dim idc As Long
Dim idcc As Long
Dim Valor As Currency
Dim sld As Currency
Dim idl As Long
Dim idln As Long
Set rslançamentos = CurrentDb.OpenRecordset("tblLançamentosContaCorrente")
Do While Not rslançamentos.EOF
idc = rslançamentos!idCliente 'código do cliente
idcc = DLookup("idContaCorrente", "tblLançamentosContaCorrente", "idCliente = " & idc) 'código da conta corrente
idl = DLast("idLançamento", "tblLançamentosContaCorrente", "idContaCorrente = " & idcc) 'código do último lançamento da conta corrente idcc
Dt = DLookup("DataLcto", "tblLançamentosContaCorrente", "idLançamento = " & idl) 'data do último lançamento
sld = DLookup("Saldo", "tblLançamentosContaCorrente", "idLançamento = " & idl) 'saldo
txJr = DLookup("TxJuros", "tblContaCorrente", "idContaCorrente = " & idcc & " And idCliente = " & idc) 'taxa de juros a ser utilizada
'verifica se a data do último lançamento é menor do que hoje
If Dt < Date And sld < 0 Then
'se verdadeiro calcula o valor dos juros
VlJuros = ((sld * (txJr / 30)) / 100)
End If
'se o valor dos juros for maior do que 0 cria o registro
If VlJuros <> 0 Then
rslançamentos.AddNew
idln = rslançamentos!idLançamento
idLançamento = idln
rslançamentos!idContaCorrente = idcc
rslançamentos!idCliente = idc
rslançamentos!DataLcto = Date
rslançamentos!Tipo = "Débito"
rslançamentos!Descrição = "JUROS"
rslançamentos!Débito = VlJuros
rslançamentos!Crédito = "0,00"
rslançamentos!SaldoAnterior = sld
rslançamentos!Saldo = (sld + VlJuros)
rslançamentos.Update
End If
Loop
rslançamentos.Close
Set rslançamentos = Nothing
End Sub