Fórum Tabela temporária e gerar parcelas #365819

04/11/2008

0

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

Afterdev

Responder

Posts

04/11/2008

Juniorvieira

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


Responder

Gostei + 0

04/11/2008

Afterdev

Problema resolvido, obrigado !


Responder

Gostei + 0

05/11/2008

Juniorvieira

8)


Responder

Gostei + 0

05/11/2008

Emerson Nascimento

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:
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;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar