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]Recalcular parcelas de acordo com a primeira.

    avatar
    FilipeFaria
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 29
    Registrado : 17/06/2017

    [Resolvido]Recalcular parcelas de acordo com a primeira. Empty [Resolvido]Recalcular parcelas de acordo com a primeira.

    Mensagem  FilipeFaria 11/5/2021, 15:22

    Bom dia amigos!

    Procurei no repositório e não encontrei de forma que conseguisse adaptar.

    Tenho o seguinte código a funcionar a contento e gerando as parcelas normalmente.

    O que eu gostaria é que ao alterar o valor da primeira parcela no subformulário, as demais alterassem automaticamente levando em conta o valor total e a quantidade de parcelas.
    O que acontece é que, no meu caso, os boletos de pagamentos os quais recebo dos fornecedores é comum eles jogarem um valor a mais (centavos) na primeira parcela e as demais serem de valores iguais.

    Poderiam me ajudar?!


    If MsgBox("DESEJA GERAR AS PARCELAS?", vbQuestion + vbYesNo, "CONFIRME") = vbYes Then

       Set DB = CurrentDb()
       Set RS = DB.OpenRecordset("DETALHES_CONTAS_PAGAR")
       
       VALOR_PARCELA = VALOR_TOTAL / Me.PARCELAS.Column(1) 'Valor de cada Parcela
           
       For I = 1 To Me.PARCELAS.Column(1)  'Insere as Parcela na Detalhes_contas_Pagar

           RS.AddNew
           RS("NUM_DOC_DETALHE") = Me.NUM_DOC
           RS("DTA_VENCIMENTO") = DateAdd("m", I - 1, Me.DTA_1_PARCELA)
           RS("PARCELA") = I & "/" & Me.PARCELAS.Column(1)
           RS("VALOR_PARCELA") = VALOR_PARCELA
           RS("STATUS") = "EM ABERTO"
                 
           RS.Update
       Next
       RS.Close
       DB.Close

    Else

    end if

    Formulário Principal: frm_contas_pagar
    subformulário: frm_sub_detalhes_contas_pagar

    obrigado!


    Última edição por FilipeFaria em 12/5/2021, 18:56, editado 1 vez(es)
    Noobezinho
    Noobezinho
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4118
    Registrado : 29/06/2012

    [Resolvido]Recalcular parcelas de acordo com a primeira. Empty Re: [Resolvido]Recalcular parcelas de acordo com a primeira.

    Mensagem  Noobezinho 11/5/2021, 19:43

    Felipe

    Se o valor da primeira parcela é diferente das demais parcelas, o único jeito é fazer uma caixa de texto para receber
    o valor dessa primeira parcela, deduzindo do valorTotal, e dividindo o resultado pelo número de parcelas restantes.

    Mas digamos que as vezes as parcelas todas são iguais.

    Então primeiro teste se essa caixa de texto da primeira parcela está sem valor(não irá colocar o valor nela), caso esteja
    o valor total será divido pelo numero de parcela, caso contrário (tem o valor), faz o que falei acima.

    Espero que tenha me entendido.

    { }'s

    Balem





    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    avatar
    FilipeFaria
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 29
    Registrado : 17/06/2017

    [Resolvido]Recalcular parcelas de acordo com a primeira. Empty Re: [Resolvido]Recalcular parcelas de acordo com a primeira.

    Mensagem  FilipeFaria 12/5/2021, 18:52

    Boa tarde a todos!!

    Meu nobre Noobezinho, primeiramente obrigado pela presteza.

    Vou repassar aqui o que fiz que resolveu no meu caso. Acredito que não é a melhor forma de se fazer porém pela limitação de conhecimento foi o que consegui desenvolver e por hora esta funcionando.

    Em cima do que você me orientou fiz o seguinte:

    Criei o campo Valor_1_parcela
    Inseri uma caixa de texto desacoplada (txt_parcelas_restantes) invisível para receber as parcelas restantes.
    Assim ao atualizar o o Valor_1_Parcela automaticamente atualiza o total das parcelas restantes, ou seja, se um parcelamento for em 5x  ao atualizar o valor_1_parcela ele atualiza o valor das parcelas restantes para 04 para efetuar o cálculo correto.

    Fiz as verificações conforme suas orientações.

    Segue conforme consegui.


    If MsgBox("DESEJA GERAR AS PARCELAS?", vbQuestion + vbYesNo, "CONFIRME") = vbYes Then

       If Not IsNull(VALOR_1_PARCELA) Or Me.VALOR_1_PARCELA <> "" Then
       
         
           Set DB = CurrentDb()
           Set RS = DB.OpenRecordset("DETALHES_CONTAS_PAGAR")
           

           VALOR_PARCELA = (Me.VALOR_TOTAL - Me.VALOR_1_PARCELA) / Me.txt_parcelas_restantes
     
           RS.AddNew ' adiciona somente o valor da 1ª parcela na detalhes_contas_pagar
           RS("NUM_DOC_DETALHE") = Me.NUM_DOC
           RS("DTA_VENCIMENTO") = Me.DTA_1_PARCELA
           RS("PARCELA") = 1 & "/" & Me.PARCELAS.Column(1)
           RS("VALOR_PARCELA") = (Me.VALOR_1_PARCELA)
           RS("STATUS") = "EM ABERTO"
           RS.Update
           
           For I = 1 To Nz(Me.txt_parcelas_restantes) 'Insere as Parcelas restantes na Detalhes_contas_pagar
           
           RS.AddNew
           RS("NUM_DOC_DETALHE") = Me.NUM_DOC
           RS("DTA_VENCIMENTO") = DateAdd("m", I, Me.DTA_1_PARCELA)
           RS("PARCELA") = I + 1 & "/" & Me.PARCELAS.Column(1)
           RS("VALOR_PARCELA") = VALOR_PARCELA
           RS("STATUS") = "EM ABERTO"
           RS.Update
       
       
       
       Next
       
       RS.Close
       DB.Close
       
       
       Me.FRM_SUB_DETALHES_CONTAS_PAGAR.Requery  'Atualiza o SubForm

       MsgBox "PARCELAS GERADAS COM SUCESSO!.", vbInformation, "PARCELAS"

         
       Exit Sub
       End If
       
       
     If IsNull(VALOR_1_PARCELA) Or Me.VALOR_1_PARCELA Then
     
           Set DB = CurrentDb()
           Set RS = DB.OpenRecordset("DETALHES_CONTAS_PAGAR")
     
           VALOR_PARCELA = VALOR_TOTAL / Me.PARCELAS.Column(1) 'Valor de cada Parcela
         
           For I = 1 To Me.PARCELAS.Column(1)  'Insere as Parcela na Detalhes_contas_Pagar

          RS.AddNew
          RS("NUM_DOC_DETALHE") = Me.NUM_DOC
          RS("DTA_VENCIMENTO") = DateAdd("m", I - 1, Me.DTA_1_PARCELA)
          RS("PARCELA") = I & "/" & Me.PARCELAS.Column(1)
          RS("VALOR_PARCELA") = VALOR_PARCELA
          RS("STATUS") = "EM ABERTO"
          RS.Update
         
      Next
      End If
           
       
       RS.Close
       DB.Close
       
       
       Me.FRM_SUB_DETALHES_CONTAS_PAGAR.Requery  'Atualiza o SubForm

       MsgBox "PARCELAS GERADAS COM SUCESSO!.", vbInformation, "PARCELAS"


    Else

       Exit Sub

    End If
    Noobezinho
    Noobezinho
    Moderador
    Moderador

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4118
    Registrado : 29/06/2012

    [Resolvido]Recalcular parcelas de acordo com a primeira. Empty Re: [Resolvido]Recalcular parcelas de acordo com a primeira.

    Mensagem  Noobezinho 12/5/2021, 19:36

    Felipe

    Excelente! bounce

    Você entendeu direitinho o que expliquei.

    Em programação VBA, tem várias maneiras de se fazer uma coisa.

    E você conseguiu fazer o que precisava dentro dos teus conhecimentos em VBA.

    Está de parabéns, tem gente que desiste no meio do caminho.

    Abaixo mostro o teu código um pouco mais enxuto, só economizando linhas de VBA. Wink

    Boa sorte

    Balem


    Código:


    If MsgBox("DESEJA GERAR AS PARCELAS?", vbQuestion + vbYesNo, "CONFIRME") = vbYes Then
       Set db = CurrentDb()
       Set rs = db.OpenRecordset("DETALHES_CONTAS_PAGAR")
        
       If Not IsNull(VALOR_1_PARCELA) Or Me.VALOR_1_PARCELA <> "" Then
          
           VALOR_PARCELA = (Me.VALOR_TOTAL - Me.VALOR_1_PARCELA) / Me.txt_parcelas_restantes
           rs.AddNew ' adiciona somente o valor da 1ª parcela na detalhes_contas_pagar
           rs("NUM_DOC_DETALHE") = Me.NUM_DOC
           rs("DTA_VENCIMENTO") = Me.DTA_1_PARCELA
           rs("PARCELA") = 1 & "/" & Me.PARCELAS.Column(1)
           rs("VALOR_PARCELA") = (Me.VALOR_1_PARCELA)
           rs("STATUS") = "EM ABERTO"
           rs.Update
          
           For i = 1 To Nz(Me.txt_parcelas_restantes) 'Insere as Parcelas restantes na Detalhes_contas_pagar
                  
               rs.AddNew
               rs("NUM_DOC_DETALHE") = Me.NUM_DOC
               rs("DTA_VENCIMENTO") = DateAdd("m", i, Me.DTA_1_PARCELA)
               rs("PARCELA") = i + 1 & "/" & Me.PARCELAS.Column(1)
               rs("VALOR_PARCELA") = VALOR_PARCELA
               rs("STATUS") = "EM ABERTO"
               rs.Update
           Next
          
       Else
              
           VALOR_PARCELA = VALOR_TOTAL / Me.PARCELAS.Column(1) 'Valor de cada Parcela
        
           For i = 1 To Me.PARCELAS.Column(1)  'Insere as Parcela na Detalhes_contas_Pagar

               rs.AddNew
               rs("NUM_DOC_DETALHE") = Me.NUM_DOC
               rs("DTA_VENCIMENTO") = DateAdd("m", i - 1, Me.DTA_1_PARCELA)
               rs("PARCELA") = i & "/" & Me.PARCELAS.Column(1)
               rs("VALOR_PARCELA") = VALOR_PARCELA
               rs("STATUS") = "EM ABERTO"
               rs.Update
        
           Next
       End If

       rs.Close
       db.Close
          
       Me.FRM_SUB_DETALHES_CONTAS_PAGAR.Requery  'Atualiza o SubForm

       MsgBox "PARCELAS GERADAS COM SUCESSO!.", vbInformation, "PARCELAS"
    End If


    .................................................................................
    A pergunta que não quer calar:
    Por quê quando alguém vem pedir ajuda e conforme o caso pedimos
    para enviar parte do projeto, não temos mais continuidade do tópico?  
    Crê que temos bolas de cristal ou está com medo que "roubemos"  a
    idéia/projeto dele?  Twisted Evil
    Se é tão bom assim...


    Ajude a ser ajudado:
    Seja objetivo na dúvida, dê os detalhes do que precisa, sem rodeios.
    Quando anexar teu projeto, diga onde está o problema, ganhamos mais tempo
    sem precisar procurar o mesmo.
    avatar
    FilipeFaria
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 29
    Registrado : 17/06/2017

    [Resolvido]Recalcular parcelas de acordo com a primeira. Empty Re: [Resolvido]Recalcular parcelas de acordo com a primeira.

    Mensagem  FilipeFaria 12/5/2021, 20:12

    Boa tarde Meu caro!!

    obrigado pelas dicas, funcionado certinho com código enxuto.

    Um grande abraço!!

      Data/hora atual: 14/6/2021, 06:45