Tabela temporária e gerar parcelas
Opa pessoal, fiz meu código baseado em exemplos que encontrei no forum, esse código até gera as parcelas mas como podem ver, as datas de venciemento não estão funcionando corretamente, ou seja, se digito 3 parcelas os vencimentos saem com a mesma data e não para 3 meses por exemplo, se pudessem dar dicas de como melhorar esse código seria de grande valia. Além disso estou usando um clientdataset para essa tabela temporária, como posso gravar essas parcelas na minha tabela contaspagar
.
.
procedure TEntradaProd.GeraParcelasClick(Sender: TObject); var i, parcelas, parcela : integer; valor, total : currency; data : Tdatetime; begin inherited; cdsParcelas.CreateDataSet; cdsParcelas.Open; IBDataset1.Open; // ** aqui cada variavel vai receber um valor ** // data := IBDataSet1DATA_EMISSAO.Value; // recebe a data parcelas := JvSpinEdit1.AsInteger; // aqui recebe as parcelas valor := IBDataSet1TOTAL_NOTA.Value; // aqui o valor total total := valor / parcelas; // aqui eu divido o valor total pelo nº de parcelas parcela := 0; // ** agora vem a operação ** // for i:= 1 to parcelas do // vai adicionar no banco a qtd de registros referente ao nº de parcelas begin parcela := parcela + 1; // aqui vai sair a qtd de parcela vou mostrar no grid data := IncMonth(date,1); // aqui a data acrescida de um mes total := valor / parcelas; cdsParcelas.Append; cdsParcelasnumDoc.Value := IBDataSet1NOTAFISCAL.Value; cdsParcelasDataEmissao.Value := IBDataSet1DATA_EMISSAO.Value; cdsParcelasvalorTotal.Value := IBDataSet1TOTAL_NOTA.Value; cdsParcelasvalorParc.Value := total; cdsParcelasDataVenc.Value := data; cdsParcelasnumParc.Value := i; cdsParcelas.Active:= true; cdsParcelas.Post; end; end;
Afterdev
Curtidas 0
Respostas
Juniorvieira
04/11/2008
TEM UM ERRO NO SEU CODIGO..
data := IncMonth(date,1); tá errado isso..
vc deve colocar
data := incmonth(DATA,1);
´O seu erro é sempre passar a data atual + 1´ ou seja
quantas vezes ele passar no loop ele faria (date+1) e naum (data+1).
antes de passar no loop inicializa a variavel data;
data := date;
loop
data := incmonth(data,1);
end loop
data := IncMonth(date,1); tá errado isso..
vc deve colocar
data := incmonth(DATA,1);
´O seu erro é sempre passar a data atual + 1´ ou seja
quantas vezes ele passar no loop ele faria (date+1) e naum (data+1).
antes de passar no loop inicializa a variavel data;
data := date;
loop
data := incmonth(data,1);
end loop
GOSTEI 0
Afterdev
04/11/2008
Problema resolvido, obrigado !
GOSTEI 0
Juniorvieira
04/11/2008
8)
GOSTEI 0
Emerson Nascimento
04/11/2008
não sei se você limita os valores totais da nota, mas se não limita, teste sua função com o valor R$ 50,32. não dar dar o valor exato.
sugiro a você fazer uma pequena alteração:
sugiro a você fazer uma pequena alteração:
procedure TEntradaProd.GeraParcelasClick(Sender: TObject); var i, parcelas: integer; valor: currency; data : Tdatetime; begin inherited; cdsParcelas.CreateDataSet; cdsParcelas.Open; IBDataset1.Open; // ** aqui cada variavel vai receber um valor ** // data := IBDataSet1DATA_EMISSAO.Value; // recebe a data parcelas := JvSpinEdit1.AsInteger; // aqui recebe as parcelas valor := IBDataSet1TOTAL_NOTA.Value; // aqui o valor total parcela := RoundTo(valor / parcelas, -2); // aqui o valor da parcela // ** agora vem a operação ** // for i := 1 to parcelas do // vai adicionar no banco a qtd de registros referente ao nº de parcelas begin data := IncMonth(data,1); // aqui a data acrescida de um mes if i = parcelas then // avalia o valor da parcela parcela := valor - (parcela * (parcelas - 1)); cdsParcelas.Append; cdsParcelasnumDoc.Value := IBDataSet1NOTAFISCAL.Value; cdsParcelasDataEmissao.Value := IBDataSet1DATA_EMISSAO.Value; cdsParcelasvalorTotal.Value := valor; cdsParcelasvalorParc.Value := parcela; cdsParcelasDataVenc.Value := data; cdsParcelasnumParc.Value := i; cdsParcelas.Post; end; end;
GOSTEI 0