Cálculo de juros com Relatório Diário

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
EANDRIOLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 109
Registrado em: 22 Jun 2007 18:31
Localização: Sorriso-MT

Cálculo de juros com Relatório Diário

Mensagem por EANDRIOLI »

Amigos, bom dia!

Tenho o seguinte fonte e preciso saber onde está o problema que está ocasionando diferenças nos juros quando o programa calcula os valores.

Estou fazendo os JUROS MENSAIS dividido por 30 (o que é normal a meu ver) - assim obtenho os juros diários.

Fazendo o mesmo cálculo no Excel, alguns diferenças aparecem em relação aos juros diários.

O fonte está pronto pra compilar no Xharbour. Quem quiser testar, por favor.

Vejam a partir da linha 170 do código fonte que anexei; É a parte que "joga" na tela o resultado.

Inclusive pra quem quiser testar com o mesmo valor pra tela e pra arquio (imprimindo em PDF Impressora), verá as diferenças que ocorrem também nas duas "procedures".

Aguardo amigos!

Anexo o CLC.BC para compilar com HBMAKE (extensão BC o sistema não aceita - por isso anexei como TXT - altere para compilar).

OBS.: Das linhas 222 a 228 - desconsidere por ser teste por enquanto.


ERASMO ANDRIOLI

Código: Selecionar todos

Function Main

sbGuiSupport   := .T.
sbGuiSupportEx := .T.
/*
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒ Modulo Principal..........: CLC.PRG - SISTEMA CALC                      ▒▒
▒▒ Linguagem de Programacao..: CLIPPER 5.2e -> XHARBOUR                    ▒▒
▒▒ Programador...............: ERASMO ANDRIOLI SANTOS - 9629-9454          ▒▒
▒▒ Iniciado em...............: 01/03/1994                                  ▒▒
▒▒ Ultima Alteracao em.......: 19/08/2015                                  ▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
*/
#include "common.ch"
#include "gtinfo.ch"
#include "hbdll.ch"
#include "Inkey.ch"
#include "ORD.CH"
#include "visual2.ch"
#include "windows.ch"

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850

HB_LANGSELECT("PT")
HB_SETCODEPAGE( "PT850" )

REQUEST WVT_SETCODEPAGE
WVT_Core()   // Inicializa lib wvtgui
WVT_Utils()
WVT_SETTITLE("CLC 1.0")
WVT_SetFont('Courier New',10,0)
WVT_SETICON("dolar.ico")

WVT_SETCODEPAGE(255)            // habilitar essa linha para usar GTWVL
SET EVENTMASK TO 159

Do case  // Identifica a resolucao do video
   case Gtinfo(GTI_DESKTOPWIDTH) > 1365
        Gtinfo(GTI_FONTWIDTH, 14) // largura 12 anterior   //   13  //   12
        Gtinfo(GTI_FONTSIZE, 28)  // altura 29 anterior   //   29  //   27
   case Gtinfo(GTI_DESKTOPWIDTH) > 1023
        Gtinfo(GTI_FONTWIDTH, 12) // largura 12 anterior   //   13  //   12
        Gtinfo(GTI_FONTSIZE, 27)  // altura 29 anterior   //   29  //   27
   case Gtinfo(GTI_DESKTOPWIDTH) > 799
        Gtinfo(GTI_FONTWIDTH, 10 ) // 10 anterior
        Gtinfo(GTI_FONTSIZE, 20 )  // 20 anterior
   otherwise
        Gtinfo(GTI_FONTWIDTH, 8) // anterior 8
        Gtinfo(GTI_FONTSIZE, 17) // anterior 17
Endcase

* Comandos de configuracao de ambiente
SET DATE BRITISH         && Coloca variaveis data no formato dd/mm/aa
SET CURSOR ON            && Liga a apresentacao do cursor na tela
SET CONSOLE OFF          && Desliga a apresentacao de saidas de comandos
SET WRAP ON              && Aceita deslizamento das setas de direcao
SET CENTURY ON           && Transforma data para formato dd/mm/aaaa
SET SCOREBOARD OFF       && Desliga avisos na primeira linha da tela
SET EPOCH TO 2000        && Acertar data ate 31/12/2100
SET EXACT ON             && Ignora diferencas de Maiusculas/Minusculas
SET DELETED ON           && Ignora registros excluidos
SET SOFTSEEK ON

* Torna Publica as Variaveis para todo o sistema...
PUBLIC empresa,eu,mfone,sistema,m_i,tipo_e
PUBLIC usuario_m,senhacrpt,nivel_usu,integra,cli_int

eu     ="Desenvolvido em Xharbour por Erasmo Andrioli - "
mfone  ="(66) 9629-9454"
sistema="CLC * Sistema de Cálculo de Juros"
tlinpag=63

DESKTOP("SISTEMA CLC")

DESKTOP("CLC * Sistema Calc  │  Programado por Erasmo Andrioli   │  V.1.0 (C) 1994-2015")
VLMouseON() // (VISUAL LIB)

cl2="R+" // Cor de fundo da 2ª Linha do Menu...
empresa="ICC CONTABILIDADE"

SET COLOR TO N+/&cl2
@1,0 CLEAR TO 1,79
SET COLOR TO GR+/&cl2
@1,1 SAY empresa
SHOWTIME(1,59,.F.,"BG/&cl2",.F.,.F.)    // CHAMA O RELOGIO NA TELA
SET COLOR TO BG/&cl2
@1,68 SAY CHR(254)
@1,70 say date()

* Papel de Parede...
for l := 2 to 22 step 2
    @ l  ,00 say "─┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴─┬─" color "bg/w"
    @ l+1,00 say "─┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬─┴─" color "bg/w"
end

CLC()

*****************
PROCEDURE CLC
*****************
WIN(9,10,17,65,"CALCULO DE JUROS CAPITALIZADOS")
SET CURSOR ON
SET COLOR TO "N*/W,W/BG+"

DO WHILE .T.
   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
   TEL=SAVENV()
   READ

   IF LastKey()=27
      RETURN
   ENDIF

   IF Date() > CToD("31/12/2020") .OR. FIM > CToD("31/12/2020")
      MSGBOX1("SISTEMA BLOQUEADO A PARTIR DESTA DATA!","ATENÇ╟O",10)
      QUIT
   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
      LOOP //RETURN
   ENDIF
   RSTENV(TEL)

   LOOP

ENDDO

*----------------------
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

@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"

DATAF=DTINI1-1

ACUMVAL = VALOR + VALORJU

DO WHILE DATAF < FIM

   MES = MONTH(DTINI1)

   DTINI1 = DTINI1 + 1

   JUR_ACUM=JUR_ACUM + JUROS_D

   VALORJU = ACUMVAL*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"
   DATAF=DATAF+1

   IF DATAF=CTOD("15/01/2015")
      @PROW()+1,5 SAY DATAF
      @PROW(),20  SAY "Amortizacao"
      @PROW(),34  SAY 1000 PICT "999,999.99"
      @PROW(),45  SAY "D"
      @PROW(),47  SAY "#"
   ENDIF

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 "SISTEMA CALC - DEMONSTRATIVO DE CALCULO DE JUROS"
   @PROW(),65   SAY DATE()
   @PROW()+1,0  SAY "Desenvolvido por Erasmo Andrioli / Sorriso-MT"
   @PROW(),67   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

   IF PROW() = 0
      @PROW()+1,0  SAY "SISTEMA CALC - DEMONSTRATIVO DE CALCULO DE JUROS"
      @PROW()+1,00 SAY REPL("-",75)
      @PROW()+1,5  SAY "DATA           HISTORICO        VALORES                 SALDO"
      @PROW()+1,00 SAY REPL("-",75)
   ENDIF   

   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 - 1
   @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

*************
FUNC CHAMAIMP
*************
LOCAL aINCCLI
Private nPrn    := 1
Private aPrn    := GetPrinters() // Detecta impressoras instaladas
PARA COP    // S = IMPRESSAO EM 136 COL.   N = IMPRESSAO EM 79COL.
TAM = "N"
If Empty(aPrn)
   wvt_messagebox("Nao foi encontrada nenhuma impressora instalada, Favor verificar !!!","ATENCAO !!!",48)
   Return
else
   aINCCLI:= nbox(10,39,24,68,"n+/b",.F.)
   @ 11,43 say "Selecione a impressora" colo "w+/b"
   @ 23,50 say "ESC - VOLTA" colo "n+/b"
   SETCOLOR( "w/b,n/gr*,,,n*/w" )
   nPrn:= ACHOICE(13,40,22,67,aPrn,.T.,,nPrn)  // LISTA DE IMPRESSORAS
EndIf
if lastkey() = K_ESC
   RstEnv(aINCCLI)
   RETURN NIL
endif
IF TAM="S"
   IF !EMPTY(nPrn)
      Imprime(ARQ_X+".PRN",136,aPrn[nPrn])
   ENDIF
ELSE
   IF !EMPTY(nPrn)
      Imprime(ARQ_X+".PRN",80,aPrn[nPrn])
   ENDIF
ENDIF
RstEnv(aINCCLI)
RETURN NIL

****************************
STATIC FUNC Imprime( cArq, tamrel ,cPrinter )
****************************
local cTexto, nLinhas, nA, cLinha

LOCAL oPrinter := Win32prn():New(cPrinter)
cText := memoread ( cArq )
oPrinter:Landscape := .F.
oPrinter:FormType  := 9   // Usar 9 para A4
oPrinter:SetPrintQuality(-1)    // qualidade da impressao
oPrinter:Copies    := 1

IF !oPrinter:Create()
   wvt_messagebox("Nao foi encontrada nenhuma impressora instalada, Favor verificar !!!","ATENCAO !!!",48)
   return NIL
ELSEIF !oPrinter:StartDoc("CLC - Calculo") // MENSAGEM NO SPOOL
   wvt_messagebox("Problema ao Imprimir....Favor Verificar a Impressora "+ aPrn[nPrn] ,"ATENCAO !!!",48)
   return NIL
endif

FOR TT=1 TO 2
    oPrinter:newline()
NEXT

IF tamrel > 80
   oPrinter:setfont('Courier New',13,{3,-50},0,.F.,.F.)
   nLines2 := 150
else
   oPrinter:setfont('Courier New',,12,,,,255)
   nLines2 := 85
endif
oPrinter:Bold(0)  //  normal

nLines := mlcount( cText, nLines2 )
nConta  := 0

for nA := 1 to nLines
    cLine := memoline ( cText, nLines2, nA, 1, .F. )

    oPrinter:TextOut ( cLine, .T. )
    oPrinter:Bold(0)  //  Normal

    IF nConta = tlinpag+3  // QUANDO CHEGAR NO FINAL DA PAGINA
       oPrinter:NewPage()
       FOR TT = 1 TO 3
          oPrinter:newline()
       NEXT
       nConta=0
    endif

    nConta=nConta+1

next
oPrinter:EndDoc()
oPrinter:Destroy()

RETURN NIL

*----------------
FUNC FIMIMP()
*----------------
SETPRC(0,0)
SET DEVICE TO SCREEN
SET PRINTER TO
* Salvar o caminho...
csDir:=CURDRIVE()+":\"+CURDIR()
CHAMAIMP()   // somente para Xharbour
DIRCHANGE(csDir)
DELETEFILE(arq_x+".PRN")
RETURN


Anexos
CLC.TXT
(1.61 KiB) Baixado 59 vezes
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo de juros com Relatório Diário

Mensagem por JoséQuintas »

Crie uma rotina simplificada antes de postar.
Talvez até resolva sozinho depois disso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo de juros com Relatório Diário

Mensagem por JoséQuintas »

E simplifique, pra facilitar encontrar problemas.
Por exemplo:

Código: Selecionar todos

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 
Porque não algo mais simples:

Código: Selecionar todos

nMes := Month( dDatIni1 )
DO WHILE Month( dDatIni1 ) = nMes
   dDatIni1 += 1
   nJurosAcumulados += nJurosDiarios
ENDDO
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Cálculo de juros com Relatório Diário

Mensagem por Toledo »

EANDRIOLI escreveu:Fazendo o mesmo cálculo no Excel, alguns diferenças aparecem em relação aos juros diários.
EANDRIOLI escreveu:Inclusive pra quem quiser testar com o mesmo valor pra tela e pra arquio (imprimindo em PDF Impressora)
Sempre que possível, anexar cópias do resultado dos relatórios (Excel, arquivo Tela e para arquivo), para fazer a comparação dos resultados.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
EANDRIOLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 109
Registrado em: 22 Jun 2007 18:31
Localização: Sorriso-MT

Cálculo de juros com Relatório Diário

Mensagem por EANDRIOLI »

ANEXO TELA DE RESULTADOS:

EXCEL e via programa CLC.
Anexos
Image1.jpg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo de juros com Relatório Diário

Mensagem por JoséQuintas »

é isto?

Código: Selecionar todos

PROCEDURE Main
   SetMode( 30, 80 )
   CLS
   nValor          := 1000000
   nJuros          := 1 / 30
   nValorOriginal  := nValor
   FOR nCont = 1 TO 20
      nJurosDia := nValor * nJuros / 100
      ? PicNum( nValor ), PicNum( nJurosDia ), PicNum( nValor + nJurosDia ), PicNum( nValor + nJurosDia - nValorOriginal )
      nValor += nJurosDia
   NEXT
   RETURN

FUNCTION PicNum( nValor )
   RETURN Transform( nValor, "@E 999,999,999.99" )

Código: Selecionar todos

 1.000.000,00         333,33   1.000.333,33         333,33
 1.000.333,33         333,44   1.000.666,78         666,78
 1.000.666,78         333,56   1.001.000,33       1.000,33
 1.001.000,33         333,67   1.001.334,00       1.334,00
 1.001.334,00         333,78   1.001.667,78       1.667,78
 1.001.667,78         333,89   1.002.001,67       2.001,67
 1.002.001,67         334,00   1.002.335,67       2.335,67
 1.002.335,67         334,11   1.002.669,78       2.669,78
 1.002.669,78         334,22   1.003.004,00       3.004,00
 1.003.004,00         334,33   1.003.338,34       3.338,34
 1.003.338,34         334,45   1.003.672,78       3.672,78
 1.003.672,78         334,56   1.004.007,34       4.007,34
 1.004.007,34         334,67   1.004.342,01       4.342,01
 1.004.342,01         334,78   1.004.676,79       4.676,79
 1.004.676,79         334,89   1.005.011,68       5.011,68
 1.005.011,68         335,00   1.005.346,69       5.346,69
 1.005.346,69         335,12   1.005.681,80       5.681,80
 1.005.681,80         335,23   1.006.017,03       6.017,03
 1.006.017,03         335,34   1.006.352,37       6.352,37
 1.006.352,37         335,45   1.006.687,82       6.687,82
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo de juros com Relatório Diário

Mensagem por JoséQuintas »

Como observação:

Juros:
1) 333.33
2) 333.34
3) 333.56

No Excel mostra correto 1 + 2, que é 333.33 + 333.34 = 666.78
No seu mostra errado 1 + 3, que é 333.33 + 333.56 = 666.89

Revise a lógica do programa.
Simplifique que dá mais certo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Cálculo de juros com Relatório Diário

Mensagem por Toledo »

Só complementando a mensagem do José Quintas:

Alterando seu código:

Código: Selecionar todos

DO WHILE DATAF < FIM

   MES = MONTH(DTINI1)

   DTINI1 = DTINI1 + 1

   VALORJU = ACUMVAL*JUROS_D / 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 = VAL(STR(ACUMVAL + VALORJU,12,2))

   @PROW(),52  SAY ACUMVAL PICT "999,999,999.99"
   DATAF=DATAF+1

   IF DATAF=CTOD("15/01/2015")
      @PROW()+1,5 SAY DATAF
      @PROW(),20  SAY "Amortizacao"
      @PROW(),34  SAY 1000 PICT "999,999.99"
      @PROW(),45  SAY "D"
      @PROW(),47  SAY "#"
   ENDIF

ENDDO
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo de juros com Relatório Diário

Mensagem por JoséQuintas »

E mais próximo do que precisa:

Código: Selecionar todos


PROCEDURE Main

   LOCAL nValorOriginal, nTaxaJuros, dDataOriginal, nValorCalculo, dDataCalculo, nJurosDia, nNumMes

   SET DATE BRITISH
   SetMode( 40, 80 )
   CLS
   nValorOriginal := 1000000
   nTaxaJuros     := 1 / 30
   dDataOriginal  := Ctod( "01/11/15" )

   nValorCalculo  := 1000000
   dDataCalculo   := dDataOriginal

   ? Pad( "DATA", 8 ), Padl( "VALOR", 14 ), Padl( "JUROS/DIA", 14 ), Padl( "JUROS/ACUM", 14),  Padl( "ORIGINAL+JUROS", 14 )
   nNumMes := Month( dDataCalculo )
   DO WHILE Month( dDataCalculo ) == nNumMes
      IF dDataCalculo == dDataOriginal
         nJurosDia := 0
      ELSE
         nJurosDia := nValorCalculo * nTaxaJuros / 100
      ENDIF
      ? dDataCalculo, ;
        Transform( nValorCalculo, "@E 999,999,999.99" ), ;
        Transform( nJurosDia, "@E 999,999,999.99" ), ;
        Transform( nValorCalculo + nJurosDia - nValorOriginal, "@E 999,999,999.99" ), ;
        Transform( nValorCalculo + nJurosDia, "@E 999,999,999.99" )
      nValorCalculo += nJurosDia
      dDataCalculo  += 1
   ENDDO
   RETURN

Código: Selecionar todos


DATA              VALOR      JUROS/DIA     JUROS/ACUM    ORIGINAL+JUROS
01/11/15   1.000.000,00           0,00           0,00   1.000.000,00
02/11/15   1.000.000,00         333,33         333,33   1.000.333,33
03/11/15   1.000.333,33         333,44         666,78   1.000.666,78
04/11/15   1.000.666,78         333,56       1.000,33   1.001.000,33
05/11/15   1.001.000,33         333,67       1.334,00   1.001.334,00
06/11/15   1.001.334,00         333,78       1.667,78   1.001.667,78
07/11/15   1.001.667,78         333,89       2.001,67   1.002.001,67
08/11/15   1.002.001,67         334,00       2.335,67   1.002.335,67
09/11/15   1.002.335,67         334,11       2.669,78   1.002.669,78
10/11/15   1.002.669,78         334,22       3.004,00   1.003.004,00
11/11/15   1.003.004,00         334,33       3.338,34   1.003.338,34
12/11/15   1.003.338,34         334,45       3.672,78   1.003.672,78
13/11/15   1.003.672,78         334,56       4.007,34   1.004.007,34
14/11/15   1.004.007,34         334,67       4.342,01   1.004.342,01
15/11/15   1.004.342,01         334,78       4.676,79   1.004.676,79
16/11/15   1.004.676,79         334,89       5.011,68   1.005.011,68
17/11/15   1.005.011,68         335,00       5.346,69   1.005.346,69
18/11/15   1.005.346,69         335,12       5.681,80   1.005.681,80
19/11/15   1.005.681,80         335,23       6.017,03   1.006.017,03
20/11/15   1.006.017,03         335,34       6.352,37   1.006.352,37
21/11/15   1.006.352,37         335,45       6.687,82   1.006.687,82
22/11/15   1.006.687,82         335,56       7.023,38   1.007.023,38
23/11/15   1.007.023,38         335,67       7.359,06   1.007.359,06
24/11/15   1.007.359,06         335,79       7.694,84   1.007.694,84
25/11/15   1.007.694,84         335,90       8.030,74   1.008.030,74
26/11/15   1.008.030,74         336,01       8.366,75   1.008.366,75
27/11/15   1.008.366,75         336,12       8.702,87   1.008.702,87
28/11/15   1.008.702,87         336,23       9.039,11   1.009.039,11
29/11/15   1.009.039,11         336,35       9.375,45   1.009.375,45
30/11/15   1.009.375,45         336,46       9.711,91   1.009.711,91
Nota:
É criar variáveis à vontade pra facilitar, e deixar o fonte com uma lógica fácil de entender.
E não precisa economizar no nome das variáveis, para o compilador tanto faz, mas pra você que vai enxergar o fonte é melhor.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Cálculo de juros com Relatório Diário

Mensagem por Eolo »

Estou fazendo os JUROS MENSAIS dividido por 30 (o que é normal a meu ver) - assim obtenho os juros diários.
Andrioli,

Esse “dividir por 30”, logo no começo do seu post, é o problema.

Em juros compostos, pra achar a taxa diária equivalente a (por exemplo) 5% ao mês, não pode dividir por 30.

Precisa extrair a raiz 30 de 0,05 (ou 5%).

Dá uma olhada neste post, onde a coisa tá mais explicada:
https://pctoledo.org/forum/viewto ... 43&t=12365
Avatar do usuário
EANDRIOLI
Usuário Nível 3
Usuário Nível 3
Mensagens: 109
Registrado em: 22 Jun 2007 18:31
Localização: Sorriso-MT

Cálculo de juros com Relatório Diário

Mensagem por EANDRIOLI »

Perfeito senhores...

Obrigado!

ERASMO ANDRIOLI
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cálculo de juros com Relatório Diário

Mensagem por JoséQuintas »

Eu criei o www.harbourdoc.com.br pra facilitar procurar funções.
Vai encontrar em mathematical, hbct, funções pra cálculo financeiro.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder