Calculo de juros e multa

Delphi

15/02/2004

Oi, Pessoal.

Eu tenho uma tabela paradox em delphi 6 com os seguintes campos

Dt.venc
Valor
Dt.pag
Juros (1¬ dia ou seja 30¬ mes)
ValorJuros
Valortotal
Multa (2¬ em cima do total)

Vamos ver se da para ser claro: eu quero informar a ´data do vencimento´ TaB o ´valor´ TaB a ´data do pagamento´ TaB e automaticamente o juros me aparece no campo, TaB automaticamente o valor do ´juros´, TaB automaticamente o ´Valor Total´ TaB ´Multa de 2¬ em cima do ´valor total´ TaB atualiza o ´Valor Total´

Vixi! sera que deu para enternder? :lol:

Agradeço desde Já


Wagner

Wagner

Curtidas 0

Respostas

Marco Salles

Marco Salles

15/02/2004

Crie Um Camp Calculado Na Sua Tabela Chamado ´ValorTotal´ Usando O Editor De Fileds(Duplo Clique No Componente Table1) Selecione a Opção NewAlld e Depois Crie o Campo ValorTotal
No Evento Table1CalcFields Da Tabela Escreva o Código:

If Dtpag.IsNul Then
if DtPag > DtVenc.Value Then //Tem Que Cobrar Juros e Multa
ValorTotal.Value:=Valor + Valor*(Multa + (Dtpag.Value-DtVenc.Value));
else
ValorTotal.Value:=Valor; // Não Cobra Juros Pagou Dentro Do Prazo


GOSTEI 0
Wagner

Wagner

15/02/2004

Eu tenho uma tabela paradox em delphi 6 com os seguintes campos

Dt.venc
Valor
Dt.pag
Juros (1¬ dia ou seja 30¬ mes)
ValorJuros
[color=red:ebd6d58741]Valortotal[/color:ebd6d58741]
Multa (2¬ em cima do total)

Esse campo Valor Total que eu tenho que criar no editor e independente do campo na tabela que eu já tenho criado ou seja e outro campo


GOSTEI 0
Marco Salles

Marco Salles

15/02/2004

Em Vez De Voce Criar Na Tabela o Campo ValorTotal Crie-o O Mesmo Campo Usando o Editor De Fields...Se Este Campo Já Existir Na Sua Tabela Apague-o .. Se Voce Quiser Ver O efeito Sem Antes Apagar Então Mude O Nome Do Campo Calculado Criado No EDITOR Para ValorJuros. Rode O Programa e Analise o Resultado.. Para Esta Última Opção Não Esqueça De Mudar o Valor De ValorTotal Para ValorJuros No Evento No Table1CalcFields Da Tabela


GOSTEI 0
Wagner

Wagner

15/02/2004

:lol: Seguinte

Abre uma janela com os seguintes dados

Field proprieties
Onde eu coloco Name: ValorTotal
Automaticamente Type: Float
Esta selecionado: Calculated
Quando dou OK : Data field not permitted on open dataset

O que eu esqueci?


GOSTEI 0
Edilcimar

Edilcimar

15/02/2004

fechar a tabela


GOSTEI 0
Marco Salles

Marco Salles

15/02/2004

Estou Abismado :?: Recomendo a Principio Salvar , Sair Do Delphi e Novamente Entrar No Programa e Repetir O Processo


GOSTEI 0
Wagner

Wagner

15/02/2004

Deu certo a criação do campo, então fiz dessa forma no evento calcfield da tabela Fiz dessa forma

begin
If Datapag.IsNul Then
if DataPag > DataVenc.Value Then
ValorTotal.Value:=Valor + Valor*(Multa + (Datapag.Value-DataVenc.Value));
else
ValorTotal.Value:=Valor;

mais esta dando esses erros
[Error] U_cadinadimp.pas(339): Undeclared identifier: ´Datapag´
[Error] U_cadinadimp.pas(340): Undeclared identifier: ´DataVenc´
[Error] U_cadinadimp.pas(349): Statement expected but end of file found


GOSTEI 0
Marco Salles

Marco Salles

15/02/2004

Wagner, Observe Que Alem De Criar O Campo Calculado Voce Devia Ter Escolhido Também a Opção [color=red:eabe38270f]New Add All[/color:eabe38270f] Fields No Editor De Campos...Faça Isto Que a Mensagem Irá Desaparecer


GOSTEI 0
Wagner

Wagner

15/02/2004

procedure TF_Form.dadosCalcFields(DataSet: TDataSet);
begin
[color=red:43580f8180]If Datapag[/color:43580f8180].IsNul Then
if DataPag > DataVenc.Value Then
ValorTotal.Value:=Valor + Valor*(Multa + (Datapag.Value-DataVenc.Value));
else
ValorTotal.Value:=Valor;
end;

end.
:cry: Continua os mesmo erros na compilação


GOSTEI 0
Marco Salles

Marco Salles

15/02/2004

O Passo Seguinte é [color=red:3fbb465506]ATENTAR [/color:3fbb465506]Para Os Nomes Usados ...Voce Tem Que Escrever a Rotina Com os Mesmos Nomes Do Componentes Da Sua Tabela Os Quais Forão Criados em Tempo De Projeto Quando Voce Deu o Comando [color=red:3fbb465506]Add All Fileds[/color:3fbb465506]....
Escreva a Rotina Abaixo Com Os Nomes Que Estão No Editor De Campos..
Estou Vendo Aqui Que Esqueci De Colocar a Propiedade VALUE , Portanto Corrija...
procedure TF_Form.dadosCalcFields(DataSet: TDataSet);
begin
If Datapag.IsNul Then
if DataPag > DataVenc.Value Then
ValorTotal.Value:=Valor.[color=red:3fbb465506]Value [/color:3fbb465506]+ Valor.[color=red:3fbb465506]Value[/color:3fbb465506]*(Multa.[color=red:3fbb465506]Value [/color:3fbb465506]+ (Datapag.Value-DataVenc.Value));
else
ValorTotal.Value:=Valor.[color=red:3fbb465506]Value[/color:3fbb465506];
end;


GOSTEI 0
Wagner

Wagner

15/02/2004

acho que ainda estou esquecendo alguma coisa

begin
[color=red:be499b15d6]If Datapag[/color:be499b15d6].IsNul then
if DataPag.value > DataVenc.value Then
ValorTotal.Value:=Valor.value + atraso.value*(Multa.value + (Datapag.Value-DataVenc.Value));
else
ValorTotal.Value:=Valor.value;

[Error] U_cadinadimp.pas(339): Undeclared identifier: ´Datapag´
[Error] U_cadinadimp.pas(340): ´THEN´ expected but identifier ´value´ found
[Error] U_cadinadimp.pas(349): Statement expected but end of file found


Tentei tambem alguma coisa assim, o que eu queria era a quantidade de dias que o meu percentua de juros 1¬ AM multiplicar pelo tota e dividir por 100 e vou ter o valor do juros

datapag-datavenc =atraso, atraso * total /100 + valor * 2/100 = totalgeral
mais nao estou acertando o codigo


GOSTEI 0
Marco Salles

Marco Salles

15/02/2004

Agora Vai Dar Certo. Nós Ja Estamos Cansados é Normal De Realisarmos Alguns Deslises...

acho que ainda estou esquecendo alguma coisa

begin
If Datapag.IsNul then
if DataPag.value > DataVenc.value Then
ValorTotal.Value:=Valor.value + atraso.value*(Multa.value + ValorJuros.Value*(Datapag.Value-DataVenc.Value[color=red:4a6a438920])) //TEM QUE TIRAR VIRGULA[/color:4a6a438920]else
ValorTotal.Value:=Valor.value;

A DIVISÃO POR CEM É UM PASSO PARA DAQUI A POUCO...VAMOS PRIMEIRO COMPILAR E EXECUTAR E VER OS RESULTADOS...

ATENÇÃO : O CAMPO DATAPAG AQUI ESTA INSCRITO ASSIM, NA SUA TABELA VOCE DISSE QUE ESTA ASSIM : Dt.pag . O MESMO OCORRE PARA DATAPAG QUE NA SUA TABELA ESTA INSCRITO ASSIM : Dt.Ven..

Voce Tem Que Escrever a Instrução Com Os Mesmos Nomes Da Tabela, Se Não Ele Não Vai Compilar..Veja Tambem Se Todos Esses Campos Foram DECLARADOS NO EDITOR DE CAMPOS...

IMPORTANTE:SE DEIXAR DE DECLARAR UM CAMPO NO EDITOR DE CAMPOS , ESSE CAMPO NÃO ESTARÁ ACESSÍVEL EM TEMPO DE EXECUÇÃO E PROJETO..Poderá Dar Erro De Compilação Como Erro Na Execução..


GOSTEI 0
Wagner

Wagner

15/02/2004

O erro insiste e o cursor para em if datapag.

Quanto a descrisão dos campos desculpe-me achava que era daquela forma mais estou fazendo de acordo como esta na tabela
Mais uma vez agradeço sua paciencia, mais se quizer para podemos continuar outro dia, não quero abusar da sua boa vontade :oops:


begin
[color=red:127bedf0bc]If Datapag.[/color:127bedf0bc]IsNul then
if DataPag.value > DataVenc.value Then
ValorTotal.Value:=Valor.value + atraso.value*(Multa.value + (Datapag.Value-DataVenc.Value))//tirei a virgula
else
ValorTotal.Value:=Valor.value;

[Error] U_cadinadimp.pas(339): Undeclared identifier: ´Datapag´
[Error] U_cadinadimp.pas(340): ´THEN´ expected but identifier ´value´ found
[Error] U_cadinadimp.pas(349): Statement expected but end of file found


GOSTEI 0
Marco Salles

Marco Salles

15/02/2004

Olha Isto é Muito Simples.... Estamos Errando Nos Detalhes e Vencidos Pelo Cansaço...Mesmo Que Não Esteje Compilando e Consequentemente Executando, [color=red:cfd28f34bf]a [color=red]Sua Formula De Calcular Multa Desta Maneira Esta Errada...[/color:cfd28f34bf]A Multa é Um Valor Fixo e Independe Da Quantidade De Dias Em Atrazo...Tanto Faz Ser Um Dia Como 1 Ano. O Valor Da Multa é Fixo[/color]. O Que Pode Variar Por Determinação Da Justiça e os Juros Cobrados

Então Sugiro Continuar Como o Algorítimo Abaixo... Há Jeito De Resumi-lo, Mas Podemos Fazer Depois De Compilar...Certamente é Um Erro De Digitação...

[color=red:cfd28f34bf]Sugiro Por Fim Deletar o Campo DataPag No Editor..Delete-o e Insere-o Imediatamente[/color:cfd28f34bf]...E MAIS UMA VEZ, VERIFIQUE SE OS CAMPOS DE SUA TABELA POSSUEM AS MESMAS ESPECIFICAÇÕES QUE OS CAMPO DEFINIDO NO CÓDIGO EDITOR E POR FIM NA ROTINA ABAIXO:

No Evento Table1CalcFields Da Tabela Escreva o Código:

procedure TFormAlcc2.Table1CalcFields(DataSet: TDataSet);
begin
If Dtpag.IsNul Then
if DtPag.Value > DtVenc.Value Then //Tem Que Cobrar Juros e Multa
ValorTotal.Value:=Valor.Value + Valor.Value*(Multa.Value +
ValorJuros.Value*(Dtpag.Value-DtVenc.Value))
else
ValorTotal.Value:=Valor; // Não Cobra Juros Pagou Dentro Do Prazo
end;


GOSTEI 0
Wagner

Wagner

15/02/2004

Vai um e-mail pra voce do meu projeto para voce analizar, essa parte ainda não deu certo, não te mandei antes porque queria eu mesmo ir fazendo para poder aprender 5 a 10 minutos ele chegar ai, se puder me da um retorno do que achou eu agradeço


GOSTEI 0
POSTAR