O sistema abaixo faz o cálculo de juros corrigindo um valor diariamente.
Gostaria de fazer com que o calculo fosse feito mensalmente (isso gera diferenças). Se alguem disponibilizar tem um tempinho para nos mostrar como ficaria o novo fonte que fará esse cálculo, agradeço. Inclusive, se abrir opção para escolher JUROS MENSAIS ou DIARIOS, melhor ainda.
Segue fonte:
Código: Selecionar todos
*****************
PROCEDURE CLC
*****************
TEL=SAVENV()
WIN(9,10,17,65,"CALCULO DE JUROS ENTRE DATAS")
SET CURSOR ON
SET COLOR TO "N*/W,W/BG+"
VALOR =0
JUROS_M=0
INICIO =DATE()
FIM =DATE()
MULTA =0
OBSERVA=SPACE(30)
@11,15 SAY "VALOR DO CAPITAL..:"
@12,15 SAY "DATA DE ORIGEM....:"
@13,15 SAY "DATA DE VENCIMENTO:"
@14,15 SAY "TAXA DE JUROS (M).: %"
@15,15 SAY "MULTA NO FINAL....: %"
@16,15 SAY "OBSERVACOES.......:"
@11,35 GET VALOR PICT "9,999,999.99"
@12,37 GET INICIO
@13,37 GET FIM
@14,41 GET JUROS_M PICT "99.999"
@15,42 GET MULTA PICT "99.99"
@16,35 GET OBSERVA
READ
IF LASTKEY()=27
RSTENV(TEL)
RETURN
ENDIF
IF VALOR < 0
TPMOV="D" // Debito
ELSEIF VALOR >= 0
TPMOV="C" // Credito
ENDIF
JUROS_D = JUROS_M/30 // Obtendo Juros Diarios
DTINI1 = INICIO+1 // Nao corrigir o Dia Inicial
DTINI2 = 0
ACUMVAL2= 0
ACUMVAL1= 0
ACUMVAL = 0
SALDO = 0
VALORJU = 0
JUR_ACUM= 0
nOpc := MsgBox3("ONDE DESEJA IMPRIMIR?",,12,"TELA","IMPRESSORA","CANCELAR")
IF nOpc == 1
WIN(12,13,17,64,"AGUARDE!!! IMPRIMINDO...","GR+/N","N+/W")
FRAME(14,14,16,63)
DO IMP_CLC_T
ELSEIF nOpc == 2
DO IMP_CLC_I
ELSEIF nOpc == 3
RETURN
ENDIF
RSTENV(TEL)
RETURN
*----------------------
PROCEDURE IMP_CLC_T // IMPRIMINDO EM TELA...
*----------------------
SET DEVICE TO PRINTER
SET PRINTER TO EXTRA1.PRN
IF PROW() = 0
@PROW()+1,00 SAY "TAXA DE JUROS MENSAL:"
@PROW(),22 SAY JUROS_M PICT "99.999"
@PROW(),28 SAY "%"
@PROW(),38 SAY "OBS.: "+OBSERVA
@PROW()+1,00 SAY "PERIODO DE..........: "+DTOC(INICIO)+" A "+DTOC(FIM)
@PROW(),60 SAY "MULTA:"
@PROW(),67 SAY MULTA PICT "99.99"
@PROW(),72 SAY "%"
@PROW()+1,00 SAY REPL("-",75)
ENDIF
DO WHILE .T.
DO WHILE .T.
MES = MONTH(DTINI1)
IF DTINI1 - 1 = FIM
EXIT
ENDIF
DTINI1 = DTINI1 + 1
JUR_ACUM = JUR_ACUM + JUROS_D
IF MONTH(DTINI1) <> MES
EXIT
ELSE
LOOP
ENDIF
EXIT
ENDDO
@PROW()+1,5 SAY "DATA HISTORICO VALORES SALDO"
@PROW()+1,0 SAY REPL("-",75)
@PROW()+1,5 SAY INICIO
@PROW(),20 SAY "Movimento"
@PROW(),30 SAY VALOR PICT "999,999,999.99"
@PROW(),45 SAY TPMOV
@PROW(),47 SAY "*"
@PROW(),52 SAY VALOR PICT "999,999,999.99"
VALORJU = VALOR * JUR_ACUM / 100
@PROW()+1,5 SAY DTINI1 - 1 // Ultimo dia do Mes...
@PROW(),20 SAY "Juros"
@PROW(),30 SAY VALORJU PICT "999,999,999.99"
@PROW(),45 SAY TPMOV
ACUMVAL = VALOR + VALORJU
@PROW(),52 SAY ACUMVAL PICT "999,999,999.99"
EXIT
ENDDO
JUR_ACUM=0
DATAF=DTINI1-1
DO WHILE DATAF < FIM
DATAF=DATAF+1
MES=MONTH(DATAF+1)
JUR_ACUM=JUR_ACUM + JUROS_D
IF MONTH(DATAF) < MES .OR. MONTH(DATAF) > MES
@PROW()+1,5 SAY DATAF
@PROW(),20 SAY "Juros"
VALORJU=ACUMVAL*JUR_ACUM/100
@PROW(),30 SAY VALORJU PICT "999,999,999.99"
@PROW(),45 SAY TPMOV
ACUMVAL1=ACUMVAL1+VALORJU
@PROW(),52 SAY ACUMVAL+VALORJU PICT "999,999,999.99"
JUR_ACUM=0
ELSE
LOOP
ENDIF
ACUMVAL=ACUMVAL+VALORJU
LOOP
ENDDO
DO WHILE .T.
IF DAY(DATAF) = DAY(FIM)
IF JUR_ACUM <> 0
@PROW()+1,5 SAY FIM
@PROW(),20 SAY "Juros"
VALORJU=ACUMVAL*JUR_ACUM/100
@PROW(),30 SAY VALORJU PICT "999,999,999.99"
@PROW(),45 SAY TPMOV
ACUMVAL1=ACUMVAL1+VALORJU
@PROW(),52 SAY ACUMVAL+VALORJU PICT "999,999,999.99"
JUR_ACUM=0
ACUMVAL=ACUMVAL+VALORJU
ENDIF
ENDIF
EXIT
ENDDO
@PROW()+2,20 SAY "Saldo Atualizado:"
@PROW(),52 SAY ACUMVAL PICT "999,999,999.99"
@PROW()+1,0 SAY REPL("-",75)
@PROW()+1,5 SAY "TOTAL DE VALOR ORIGINAL:"
@PROW(),32 SAY VALOR PICT "999,999,999.99"
@PROW()+1,5 SAY "TOTAL DOS JUROS........:"
@PROW(),32 SAY ACUMVAL-VALOR PICT "999,999,999.99"
IF MULTA <> 0
TOTMUL=0
TOTMUL=ACUMVAL*MULTA/100
@PROW()+1,5 SAY "TOTAL DA MULTA.........:"
@PROW(),32 SAY TOTMUL PICT "999,999,999.99"
ENDIF
@PROW()+1,0 SAY REPL("-",75)
@PROW()+1,0 SAY "* = Lancamento de Movimento"
SETPRC(0,0)
SET DEVICE TO SCREEN
SET PRINTER TO
WIN(3,1,22,78,"DEMONSTRATIVO DE CALCULO DE JUROS","GR+/R","R*/W")
MOSTRA("EXTRA1.PRN")
ERASE EXTRA1.PRN
RETURN
*----------------------
PROCEDURE IMP_CLC_I // ENVIANDO P/ IMPRESSORA...
*----------------------
WIN(12,13,17,64,"AGUARDE!!! IMPRIMINDO...","GR+/N","N+/W")
FRAME(14,14,16,63)
arq_x ="C:\TEMP\"+LEFT(TIME(),2)+RIGHT(LEFT(TIME(),5),2)+RIGHT(TIME(),2)+"BA"
SET DEVICE TO PRINTER
SET PRINTER TO &arq_x
termom:= 53 / RECCOUNT()
porce := 100 / RECCOUNT()
control= 0
PAGINA=1
IF PROW() = 0
@PROW()+1,0 SAY "ERASMO ANDRIOLI - PROGRAMADOR *** SISTEMA BANK ***"
@PROW()+1,0 SAY "DEMONSTRATIVO DE CALCULO"
@PROW(),30 SAY DATE()
@PROW(),40 SAY "-"
@PROW(),42 SAY TIME()
@PROW()+1,00 SAY REPL("-",75)
@PROW()+1,00 SAY "TAXA DE JUROS MENSAL:"
@PROW(),22 SAY JUROS_M PICT "99.999"
@PROW(),28 SAY "%"
@PROW(),39 SAY "OBS.: "+OBSERVA
@PROW()+1,00 SAY "PERIODO DE..........: "+DTOC(INICIO)+" A "+DTOC(FIM)
@PROW(),60 SAY "MULTA:"
@PROW(),67 SAY MULTA PICT "99.99"
@PROW(),72 SAY "%"
@PROW()+1,00 SAY REPL("-",75)
ENDIF
DO WHILE .T.
DO WHILE .T.
MES = MONTH(DTINI1)
DTINI1 = DTINI1 + 1
JUR_ACUM = JUR_ACUM + JUROS_D
IF MONTH(DTINI1) <> MES
EXIT
ELSE
LOOP
ENDIF
EXIT
ENDDO
@PROW()+1,5 SAY "DATA HISTORICO VALORES SALDO"
@PROW()+1,0 SAY REPL("-",75)
@PROW()+1,5 SAY INICIO
@PROW(),20 SAY "Movimento"
@PROW(),34 SAY VALOR PICT "999,999.99"
@PROW(),45 SAY TPMOV
@PROW(),47 SAY "*"
@PROW(),52 SAY VALOR PICT "999,999,999.99"
VALORJU = VALOR * JUR_ACUM / 100
@PROW()+1,5 SAY DTINI1 - 1 // Ultimo dia do Mes...
@PROW(),20 SAY "Juros"
@PROW(),34 SAY VALORJU PICT "999,999.99"
@PROW(),45 SAY TPMOV
ACUMVAL = VALOR + VALORJU
@PROW(),52 SAY ACUMVAL PICT "999,999,999.99"
EXIT
ENDDO
JUR_ACUM=0
DATAF=DTINI1-1
DO WHILE DATAF < FIM
SET DEVICE TO SCREEN
control++
@15,15+(control*termom) SAY "±" COLOR("BG+/W")
SET DEVICE TO PRINTER
DATAF=DATAF+1
MES=MONTH(DATAF+1)
JUR_ACUM=JUR_ACUM + JUROS_D
IF MONTH(DATAF) < MES .OR. MONTH(DATAF) > MES
@PROW()+1,5 SAY DATAF
@PROW(),20 SAY "Juros"
VALORJU=ACUMVAL*JUR_ACUM/100
@PROW(),34 SAY VALORJU PICT "999,999.99"
@PROW(),45 SAY TPMOV
ACUMVAL1=ACUMVAL1+VALORJU
@PROW(),52 SAY ACUMVAL+VALORJU PICT "999,999,999.99"
JUR_ACUM=0
IF PROW() = TLINPAG .OR. PROW() > TLINPAG
@PROW()+1,0 SAY REPL("-",75)
@PROW()+1,0 SAY eu+mfone
@prow(),66 SAY "Pag.: "+ STRZERO(PAGINA,3,0)
@prow()+1,0 SAY repl("-",75)
PAGINA++
SETPRC(0,0)
ENDIF
ELSE
LOOP
ENDIF
ACUMVAL=ACUMVAL+VALORJU
LOOP
ENDDO
DO WHILE .T.
IF DAY(DATAF) = DAY(FIM)
@PROW()+1,5 SAY FIM
@PROW(),20 SAY "Juros"
VALORJU=ACUMVAL*JUR_ACUM/100
@PROW(),34 SAY VALORJU PICT "999,999.99"
@PROW(),45 SAY TPMOV
ACUMVAL1=ACUMVAL1+VALORJU
@PROW(),52 SAY ACUMVAL+VALORJU PICT "999,999,999.99"
JUR_ACUM=0
ACUMVAL=ACUMVAL+VALORJU
ENDIF
EXIT
ENDDO
IF PROW() = TLINPAG .OR. PROW() > TLINPAG
@PROW()+1,0 SAY REPL("-",75)
@PROW()+1,0 SAY eu+mfone
@prow(),66 SAY "Pag.: "+ STRZERO(PAGINA,3,0)
@prow()+1,0 SAY repl("-",75)
PAGINA++
SETPRC(0,0)
ENDIF
@PROW()+2,20 SAY "Saldo Atualizado:"
@PROW(),52 SAY ACUMVAL PICT "999,999,999.99"
@PROW()+1,0 SAY REPL("-",75)
@PROW()+1,5 SAY "TOTAL DE VALOR ORIGINAL:"
@PROW(),32 SAY VALOR PICT "999,999,999.99"
@PROW()+1,5 SAY "TOTAL DOS JUROS........:"
@PROW(),32 SAY ACUMVAL-VALOR PICT "999,999,999.99"
IF MULTA <> 0
TOTMUL=0
TOTMUL=ACUMVAL*MULTA/100
@PROW()+1,5 SAY "TOTAL DA MULTA.........:"
@PROW(),32 SAY TOTMUL PICT "999,999,999.99"
ENDIF
@PROW()+1,0 SAY REPL("-",75)
@PROW()+1,0 SAY "* = Lancamento de Movimento"
DO WHILE PROW() < TLINPAG
@PROW()+1,0 SAY ""
ENDDO
@PROW()+1,0 SAY REPL("-",75)
@PROW()+1,0 SAY eu+mfone
@prow(),66 SAY "Pag.: "+ STRZERO(PAGINA,3,0)
@prow()+1,0 SAY repl("-",75)
FIMIMP()
RETURN
EANDRIOLI

