MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


    [Resolvido]Calculo de Juros automático

    avatar
    PCAMARAL
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 57
    Registrado : 16/02/2012

    [Resolvido]Calculo de Juros automático Empty Calculo de Juros automático

    Mensagem  PCAMARAL 16/8/2012, 16:56

    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
    avatar
    Convidado
    Convidado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Convidado 17/8/2012, 01:00

    Boas Amaral...

    Primeiramente você executa o Loop na tblClientes... dentro desse loop o loop pela conta conrrente sendo o segundo recordset filtrado pelo cliente do primeiro recordset.

    Algo assim:

    Do While Not rsCliente.EOF

    Do While Not rsContas.EOF
    Executa o código
    rsContas.MoveNext
    Loop
    Executa código
    rsCliente.MoveNext
    Loop


    Assim Vai para o cliente 1
    Calcula os juros para suas contas
    Loop pelas contas
    Vai para o cliente 2 etc....

    é por ai.
    avatar
    PCAMARAL
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 57
    Registrado : 16/02/2012

    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  PCAMARAL 17/8/2012, 14:15

    Bom dia Piloto,

    Entendi mas não compreendi...kkkk

    Não consegui colocar em operação, tem como exemplificar os códigos a serem executados dentro do loop de cada tabela?

    Abs
    avatar
    Convidado
    Convidado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Convidado 17/8/2012, 14:27

    Ajudaria se postasse o teu bd.

    Cumprimentos.
    avatar
    PCAMARAL
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 57
    Registrado : 16/02/2012

    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  PCAMARAL 17/8/2012, 14:36

    Piloto, pode ser em access 2010?
    avatar
    Convidado
    Convidado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Convidado 17/8/2012, 14:45

    Veja bem...

    Observo que não está aplicando no código comando para ir ao proximo registro após o loop e isto gerará loop infintos, pois veja:

    Do While Not rslançamentos.EOF

    uma tradução da expressão acima seria: Caso não chegou ao final da Fila... EOF (End Of File)
    Então com o recordset carregado.. ele comportará n registro dispostos e organizados.. e o loop percorrerá os mesmo até que chegue o seu fim...
    Mas isso só é possível se a cada loop ir para o proximo registro...


    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
    relançamentos.MoveNext
    Loop
    rslançamentos.Close
    Set rslançamentos = Nothing
    End Sub




    Cumprimentos.
    avatar
    PCAMARAL
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 57
    Registrado : 16/02/2012

    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  PCAMARAL 17/8/2012, 15:01

    Entendi Piloto, mas nesse caso ele continua percorrendo todos os registro, eu gostaria que em cada loop ele localizasse somente o último registro da conta corrente 1 e depois o último da 2 e aí por diante. Caso contrário ele fica calculando os juros para todos os registros e eu preciso que calcule somente sobre o último registro com data inferior a hoje e somente 1 vez.

    Segue o bd pra você dar uma olhada. Estou trabalhando no evento ao carregar do form TELA PRINCIPAL e as tabelas envolvidas são tblContaCorrente e tblLançamentosContaCorrente.

    Grato

    Anexos
    [Resolvido]Calculo de Juros automático AttachmentGiro.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (231 Kb) Baixado 39 vez(es)
    avatar
    Convidado
    Convidado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Convidado 17/8/2012, 15:24

    Considerando as tabelss tblContaCorrente e tblLançamentosContaCorrente


    Especifique como seria a logica... mais ou menos assim:

    Recordset x
    Executa isso
    Dentro Desse o recorset y
    Executa aquilo

    Vai para o registro do recordet x..


    Detalhe a grosso modo a logica para que eu entenda.

    Cumprimentos.

    Post o BD em 2007
    avatar
    PCAMARAL
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 57
    Registrado : 16/02/2012

    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  PCAMARAL 17/8/2012, 15:54

    Segue

    Recordset tblContaCorrente
    Localiza o idCliente
    Localiza o idContaCorrente do idCliente
    Localiza a taxa de juros a ser aplicada para o idContaCorrente

    Recordset tblLançamentosContaCorrente
    Localiza o último idLançamento para o idContaCorrente do idCliente
    Localiza a data do último idLançamento
    Localiza o saldo do último idLançamento

    Verifica se a data do último lançamento é menor que a data atual e se o saldo é maior que 0
    Se verdadeiro calcula o valor dos juros
    Adiciona um novo registro na tblLançamentosContaCorrente
    Verifica se existe outra conta corrente para o idCliente, se existir repete o procedimento, se não existir passa para o próximo cliente e executa o código para o novo cliente.

    Grato
    Anexos
    [Resolvido]Calculo de Juros automático AttachmentGiro.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (92 Kb) Baixado 22 vez(es)
    avatar
    Convidado
    Convidado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Convidado 17/8/2012, 16:32

    Qual o form?
    avatar
    Convidado
    Convidado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Convidado 17/8/2012, 16:34

    Não relacionou as tabelas??????


    avatar
    PCAMARAL
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 57
    Registrado : 16/02/2012

    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  PCAMARAL 17/8/2012, 16:56

    Piloto, segue novamente com as tabelas relacionadas.

    o Formulário é o TELA PRINCIPAL.

    Grato
    Anexos
    [Resolvido]Calculo de Juros automático AttachmentGiro.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (93 Kb) Baixado 40 vez(es)
    avatar
    Convidado
    Convidado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Convidado 17/8/2012, 17:10

    Boas amigão.. o seu problema é o seguinte...

    Vccê abre o redordset rsLançamentos...

    Suponha que o mesmo contenha 10 registros... o que ocorre é que quando adiciona um registro e utiliza o update... ele passa a 11 e assim sussecivamente, nunca saindo do loop pois o loop é ate chegar o final da fila ... mas como a cada loop adiciona um registro.. isso nunca irá ocorrer..
    avatar
    Convidado
    Convidado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Convidado 17/8/2012, 17:13

    Agora... na tabela tblLançamentosContaCorrente...

    Qual registro deseja verificar e atualizar?

    será sempre 1 registro ou poderá conter mais de um?


    de exemplo..

    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Convidado 17/8/2012, 17:43

    Pois então creio que desta forma não funcionará.. ou seja com o loop..

    Tem que saber o registro que deseja pegar para calcular os juros...

    Se for o ultimo lancamento... Creio que devemos ja abrir o recordset filtrado.. Talvez um SELECT MAX...

    Compreendeu?
    avatar
    PCAMARAL
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 57
    Registrado : 16/02/2012

    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  PCAMARAL 17/8/2012, 18:50

    Então Piloto, não dá pra fazer atualizando um registro porque preciso que calcule os juros todos os dias e que o juro do dia anterior fique registrado na tabela, tem que ser via inclusão de registro mesmo.

    Agora a idéia de abrir o recordset jah filtrado no último lançamento da conta corrente pode ser que dê certo, como faço isso?

    Grato
    avatar
    Convidado
    Convidado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Convidado 17/8/2012, 19:28

    Amigão voce não me compreendeu... Da forma como fez não dará certo.. Leia os posts acima... O porque do loop infinito...

    >>>>>> O Recordset vai aumentando a medida da adição, assim o loop nunca termina.


    Mudei a logica para o que pretende.. Veja se lhe sai a contento.


    1 - Carrego o recordset baseado na tabela contas.. e apenas neste será executado o loop.
    2 - Carego o recordset lançamento filtrando pelo cliente do recordset conta
    3 - Movo para o ultimo registro do recordset lancamento.
    4 - após isso faz os calculos e uma instrução INSERT INTO introduz os valores na tabela.


    Private Sub Form_Open(Cancel As Integer)
    Dim rsConta As DAO.Recordset
    Dim rsLançamentos As DAO.Recordset
    Dim txJr As Currency
    Dim VlJuros As Currency
    Dim StrSQLançamento As String
    Dim SaldoTot As String


    Set rsConta = CurrentDb.OpenRecordset("tblContaCorrente")
    Set rsLançamentosAdd = CurrentDb.OpenRecordset("tblLançamentosContaCorrente")


    Do While Not rsConta.EOF
    'Carreo na variável a SQL baseado na tblLançamentoContaCorrente filtrado pelo IdContaCorrente no rsConta, sendo mudado a cada loop
    StrSQLLançamento = "SELECT * FROM tblLançamentosContaCorrente WHERE idContaCorrente =" & rsConta!IdContaCorrente & ";"
    'Carrego o recordset
    Set rsLançamentos = CurrentDb.OpenRecordset(StrSQLLançamento)
    'Vai para o ultimo Registro
    rsLançamentos.MoveLast
    'Aqui é necessário o Dlookup para buscar ba tbContaCorrente a txJuros correspondete a conta e cliente
    txJr = DLookup("TxJuros", "tblContaCorrente", "idContaCorrente = " & rsLançamentos!IdContaCorrente & " And idCliente = " & rsLançamentos!IdCliente) 'taxa de juros a ser utilizada

    'verifica se a data do último lançamento é menor do que hoje
    If rsLançamentos!DataLcto < Date And rsLançamentos!Saldo > 0 Then
    'se verdadeiro calcula o valor dos juros
    VlJuros = ((rsLançamentos!Saldo * (txJr / 30)) / 100)
    End If

    'se o valor dos juros for maior do que 0 cria o registro
    If VlJuros <> 0 Then
    SaldoTot = (rsLançamentos!Saldo + VlJuros)
    'Adiciona a tabela os valores
    CurrentDb.Execute "INSERT INTO tblLançamentosContaCorrente (IdContaCorrente,IdCLiente, DataLcto, Tipo, Descrição, Débito, Crédito, SaldoAnterior, Saldo) " _
    & " Values(""" & rsLançamentos!IdContaCorrente & """,""" & rsLançamentos!IdCliente & """,""" & Format(Date, "dd/mm/yyyy") & """,'Débito','Juros',""" & VlJuros & """,'0,00',""" & rsLançamentos!Saldo & """,""" & SaldoTot & """)"
    End If
    'Vai para a próxima conta
    rsConta.MoveNext
    Loop


    rsLançamentos.Close
    rsConta.Close
    Set rsLançamentos = Nothing
    Set rsConta = Nothing
    End Sub
    avatar
    PCAMARAL
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 57
    Registrado : 16/02/2012

    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  PCAMARAL 17/8/2012, 19:58

    Piloto tinha entendido sim, tinha até mudado o código pra executar o loop na tblContaCorrente como vc fez mas é claro que de uma maneira bem mais amadora.

    Agora o código caiu como uma luva. Obrigado.

    Abraço
    avatar
    Convidado
    Convidado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Convidado 17/8/2012, 20:03

    O Fórum agradece o retorno.

    >>>> Não se esqueça de clicar no Joinha da menssagem que o auxiliou.

    Conteúdo patrocinado


    [Resolvido]Calculo de Juros automático Empty Re: [Resolvido]Calculo de Juros automático

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 19/4/2024, 04:39