Convidado 21/7/2012, 16:59
Boas Gerson... Vamos então começar para casos de o atrazo ser maior que 30 dias.
Abra sua tabela parcelamentos em modo design e nos campo Juros, Multa e ValorPago:
Tipo: Numero
Tamanho do Campo: Duplo
Formato: Numero Geral
Casas Decimais: 2
Bem... neste código abaixo... preve mais de 30 dias de atrazo...
Este código está calculando os meses extraidos
Ex: 120 dias >>>> ele calcula os 4 meses sendo juros sobre juros.
No caso de Meses + dias (mes incompleto) ex: 125 (4 meses + 5 dias)
Ele calcula os 4 meses, ainda nao fiz o modulo para calcular os 5 dias.
Testemos esse e seguimos para calcular os dias excedentes (mes incompleto)
Private Sub DataPagamento_AfterUpdate()
'Declaração de variáveis que comportarão os valores utilizados nos cálculos
Dim StrMulta, StrJuros, StrJurosCal, StrValorPag, ValorJuros As Double
Dim X As Variant
Dim I, DiasAtrazos As Integer
'Checa se a data de pagamento é maior que a data da parcela
If Me.DataPagamento > Me.DataParcela Then
'Carrega as variáveis com o valor correspondente para o cálculo
StrMulta = 2
StrJuros = 1
'Carrego a variável com o número de dias de atrazo, conseguido com a diferença entre as data
DiasAtrazos = Me.DataPagamento - Me.DataParcela
'Aplico a condição para caso ocorra mais de 30 dias de atrazos
If DiasAtrazos > 30 Then
'Carrego a variável x com o numero de meses de atrazos.. Este numero dependendo da quantidade de dias, será exprimido em decimais
'Ex: 25,2
X = DiasAtrazos / 30
'Em sendo um numero decimal, extraio apenas o numero de meses, Ex: de 25,2 Pego apenas o Numero de meses: 25
X = Mid(X, 1, (InStr(1, X, ",") - 1))
'Faço um loop de acordo com o nuemero de meses para calcular o juros Mes a Mes, ou seja:
'Valor da Parcela + Juros, e no proximo laço, esta soma + os juros extraidos dessa soma (Juros sobre Juros)
For I = 1 To X
'Executo esta condição apenas para o primeiro mês de cálculo, caso tenha mais de um mes de atrazo
If StrValorPag = 0 Then
'Calculo de juros do primeiro mês de atrazo
StrJurosCal = Me.ValorParcela * StrJuros / 100
'Carrego a variável com o valor em real dos Juros no primeiro mês de atrazo
ValorJuros = StrJurosCal
'Carrego a variável com o Valor da Parcela + o Juros
StrValorPag = Me.ValorParcela + ValorJuros
'Caso seja o segundo mês de atrazo a variável StrValorPag terá o valor diferente de 0, portanto irá para esta condição
Else
'Calculo de juros para os meses seguintes de atrazo, observe que o valor aqui não é mais o da parcela e sim o valor ja acrecido do
'Primeiros juros
StrJurosCal = StrValorPag * StrJuros / 100
'Carrego a variável com o valor em real + Juros
StrValorPag = StrValorPag + StrJurosCal
'Carrego a variável com o valor de juros somados a cada loop
ValorJuros = ValorJuros + StrJurosCal
End If
Next I
End If
'Lanço no campo o valor total de juros
Me.Juros = ValorJuros
'Lanço no campo o valor da multa
Me.Multa = Nz(Me.ValorParcela, 0) * StrMulta / 100
'Lanço no campo a somatória de: Parcela, Juros e Multa
Me.ValorPago = Me.ValorParcela + Me.Juros + Me.Multa
Else
'Limpo as campos caso o pagamento seja antecipado
Me.Juros = ""
Me.Multa = ""
End If
End Sub
Cumprimentos.