Ajuda com Parcelas em Delphi
10/12/2009
0
estou fazendo programação em Delphi 5 e estou querendo calcular parcelas em uma venda a prazo ...
mas está doando looping infinito na minha programação ... alguém pode me ajudar ???
desde já agradeço !!!
procedure TformVendasBalcao.btnGravarClick(Sender: TObject);
var fltValorTotal: double;
var qtdparcelas, total, totaldividido: real;
var data : String;
var mes, ano: Integer;
var data2 : TDateTime;
var Ano2, Mes2, Dia2: Word;
begin
Begin
data2:= Now; // ou a data que você quer trabalhar o mês
DecodeDate(data2, Ano2, Mes2, Dia2); // essa função "quebra" a data para você
if rbprazo.Checked then
begin
total := dmBaseDados.tblSaidaValorTotal.Asfloat;
qtdparcelas := StrToFloat(Edtparc.Text);
totaldividido := total/qtdparcelas;
mes := Mes2;
ano := Ano2;
dmbaseDados.ds_parcelas.DataSet.Open;
while qtdparcelas <> 0 do
begin
data := inttostr (Dia2) + '/' + IntToStr(mes) + '/' + IntToStr(ano);
dmBaseDados.tbl_parcelas.Append;
dmBaseDados.tbl_parcelasValor.AsCurrency := total;
dmBaseDados.tbl_parcelasData.AsDateTime := StrToDateTime(data);
dmBaseDados.tbl_parcelas.Post;
mes := mes + 1;
if (mes = 13) then
begin
mes := 1;
ano := ano + 1;
end;
end;
end;
... depois daki ainda continua uma programação que está correta ... mas suspeito deste While ...
att;
Thiago Bardez
Web Design - Design Gráfico - Programador - Técnico em Informática.
www.studiosdk.nightop.com.br
Thiago
Posts
11/12/2009
Wilson Junior
Espero ter ajudado.
06/01/2010
Emerson Nascimento
imagine que a primeira parcela seja para 30 de Janeiro. pelo seu código, a segunda cairá no dia 30 de Fevereiro, que não existe!
o correto é sempre somar 30 dias na data da parcela.
outra coisa: lembre-se que as parcelas devem ser arredondadas para 2 casas decimais e a diferença deve ser colocada na primeira ou na última parcela, a seu critério (eu coloco na primeira).
porque falo que a "difereça deve ser colocada na primeira ou na última parcela"? eis um exemplo...
imagime que o valor total da compra seja de R$ 250,00, a ser pago em três vezes.
fazendo a divisão simples: 250 / 3 = 83,3333333333333 (dízima)
então pegaremos duas casas decimais: 83,33. porém se multiplicarmos 83,33 pelo número de parcelas o total será de R$ 249,99.
por isso é preciso calcular a diferença e acrescentá-la em alguma parcela.
então a primeira parcela será de 83,34 e as outras duas de 83,33, o que dará um total de 250,00.
(note que não há juros no exemplo)
vamos ao código:
procedure TformVendasBalcao.btnGravarClick(Sender: TObject);
var fltValorTotal: double;
var qtdparcelas, total, totaldividido, primeiraparcela: real;
var numparcela: Integer;
var data2 : TDateTime;
begin
data2 := Now; // ou a data que você quer trabalhar o mês
if rbprazo.Checked then
begin
total := dmBaseDados.tblSaidaValorTotal.Asfloat;
qtdparcelas := StrToFloat(Edtparc.Text);
totaldividido := trunc((total / qtdparcelas) * 100) / 100; // garanto duas casas decimais
primeiraparcela := total - (totaldividido * (qtdparcelas - 1));
dmbaseDados.ds_parcelas.DataSet.Open;
for numparcela := 1 to qtdparcelas
begin
dmBaseDados.tbl_parcelas.Append;
if numparcela = 1
dmBaseDados.tbl_parcelasValor.AsCurrency := primeiraparcela // valor com a possível diferença
else
dmBaseDados.tbl_parcelasValor.AsCurrency := totaldividido;
dmBaseDados.tbl_parcelasData.AsDateTime := data2; // gravo o conteúdo da variável
dmBaseDados.tbl_parcelas.Post;
data2 := data2 + 30; // acrescenta 30 dias para a próxima parcela
end
end;
[..]
end;
06/01/2010
Pjrm1470
28/02/2011
Thiago
todas as dicas foram úteis ..
agradeço a atenção de todos.
abraços
Clique aqui para fazer login e interagir na Comunidade :)