Autogera datas de vencimentos de N parcelas

Delphi

15/04/2004

Cordiais saudações colegas,

Tenho que gerar um formulario c/ vencimentos de N parcelas de um curso semestral sendo que ele terá que fazer o calculo de todo dia 16 de cada mes..., sendo que ao vencer a parcela tenho q atualizar o valor da nova data de vencimento a frente e jogar a outra para outra tabela dai relacionando juros e outros implementos. Gostaria de ter um orientação de como irei autogerar esses vencimentos sendo que á meses de 30 dias e outros de 30 e 28 dias.

Alguem com esse exemplo para enviar ?

Fico grato a quem puder ajudar.


Jonasaf

Jonasaf

Curtidas 0

Respostas

Luizfernando777

Luizfernando777

15/04/2004

Caro colega:
Explique melhor o que vc precisa,

mas é o seguinte,
independente de se tratar de 28, 30 ou 31 dias que tenha o mês,
sempre será contado como 30 dias
tipo assim hoje é 16/04/2004 o próximo vencimento será 30 dias
então será no dia 16/05/2004, agora supondo-se que o mês tenha 31 dias
o vencimento será então no dia 15/06/2004 e assim por diante.
Vencimento := (Data + 30)

espero que tenha lhe ajudado


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

15/04/2004

Colega,

A função ´pronta´ que deveria se aproximar do que você necessita seria a [b:246ff5bd44]IncMonth[/b:246ff5bd44] não fosse um pequeno [b:246ff5bd44]bug[/b:246ff5bd44] existente na mesma. Veja o exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var nI, nX: Byte;
    dData: TDate;
begin
  Memo1.Clear;
  dData := DateTimePicker1.Date;
  For nI := 0 to 12 do
  begin
    dData := IncMonth(dData); // Adicione DateUtils na lista de uses
    Memo1.Lines.Add(DateToStr(dData));
  end;
end;


Para testar, basta adicionar os seguintes componentes: DateTimePicker, Memo e Button (um de cada). Note que as datas no final de Janeiro ou nos finais de meses com 31 dias sofrem um ajuste indevido. Se isto for uma condição extremamente importante, recomendo escrever uma com base nas funções: DecodeDate/EncodeDate.


GOSTEI 0
Salomao

Salomao

15/04/2004

Bom!
Primeiramente você poderia utilizar um valor para o número de parcelas e outro p/ a quant. de dias, após definir os valores você utilizaria um loop de repetição.
ex.:

var parcela, nparc : integer;
dataatual : tdatetime;
begin
parcela:=1;
nparc:=tspinedit.value; //spin com valor 2 por exemplo.
dataatual:=date;

if nparc = 1 then
begin
dataatual:=date+30; // trinta dias para o vencimento
end
else
begin
while parcela <= nparc do begin
nparcela:=parcela;//campo nparcela = parcela.
vencimento:=dataatual+30;
dataatual:=dataatual+30;
inc(parcela);
end;
end;

end;


precisaríamos de mais detalhes dos campos do banco de dados:

você poderia utilizar campo char para armazenar o numero da parcela como por exemplo parcela 02/02.

espeto ter ajudado


GOSTEI 0
Jonasaf

Jonasaf

15/04/2004

vou fazer a análise como o usuario e irei enviar como vou montar meu formulario.... Fico grato a todos que ajudaram...

Bom! Primeiramente você poderia utilizar um valor para o número de parcelas e outro p/ a quant. de dias, após definir os valores você utilizaria um loop de repetição. ex.: var parcela, nparc : integer; dataatual : tdatetime; begin parcela:=1; nparc:=tspinedit.value; //spin com valor 2 por exemplo. dataatual:=date; if nparc = 1 then begin dataatual:=date+30; // trinta dias para o vencimento end else begin while parcela <= nparc do begin nparcela:=parcela;//campo nparcela = parcela. vencimento:=dataatual+30; dataatual:=dataatual+30; inc(parcela); end; end; end; precisaríamos de mais detalhes dos campos do banco de dados: você poderia utilizar campo char para armazenar o numero da parcela como por exemplo parcela 02/02. espeto ter ajudado



GOSTEI 0
Ronylee

Ronylee

15/04/2004

Caro Jonas se entendi bem o seu problema eu resolvi da seguinte forma:
No meu caso, sempre peço o vencimento da primeira parcela e a partir daí é que gero as demais, eñtão peguei a data do primeiro vencimento (que o usuário me fornece) e faço um loop da quantidade de parcelas e vou incrementando um mês a cada nova data (IncMonth).

Dt_Vencimento.Value := IncMonth(Dt_Vencimento.Value,1);

Espero ter ajudado.

Rony Lee.


GOSTEI 0
Adilsond

Adilsond

15/04/2004

Acho que a função do Aroldo, com uma pequena modificação, seria a melhor forma. Veja abaixo:

Função:

procedure TForm1.Button1Click(Sender: TObject);
var
  nI: Byte;
  dData: TDate;
begin
  Memo1.Clear;
  for nI := 1 to 12 do
  begin
    dData := IncMonth(DateTimePicker1.Date,nI);
    Memo1.Lines.Add(DateToStr(dData));
  end;
end;


Resultado com data 31/01/2004:

[list:939f41c139]29/02/2004
31/03/2004
30/04/2004
31/05/2004
30/06/2004
31/07/2004
31/08/2004
30/09/2004
31/10/2004
30/11/2004
31/12/2004
31/01/2005
[/list:u:939f41c139]


GOSTEI 0
Paullsoftware

Paullsoftware

15/04/2004

Acho que a função do Aroldo, com uma pequena modificação, seria a melhor forma. Veja abaixo: Função:
procedure TForm1.Button1Click(Sender: TObject);
var
  nI: Byte;
  dData: TDate;
begin
  Memo1.Clear;
  for nI := 1 to 12 do
  begin
    dData := IncMonth(DateTimePicker1.Date,nI);
    Memo1.Lines.Add(DateToStr(dData));

  end;
end;
Resultado com data 31/01/2004: [list:5bf8ede7c4]29/02/2004 31/03/2004 30/04/2004 31/05/2004 30/06/2004 31/07/2004 31/08/2004 30/09/2004 31/10/2004 30/11/2004 31/12/2004 31/01/2005 [/list:u:5bf8ede7c4]


[b:5bf8ede7c4]
SERÁ QUE NÃO SERIA MELHOR ASSIM:
var
DATAALTUAL:TDATETIME;
I: INTEGER;
DIADOCADASTRO, NOVADATA:STRING;

BEGIN

DATAATUAL:=DATE;
DIADOCADASTRO:=FORMATDATETIME(´DD´,STRDODATE(EDITDIADOCADASTRO.TEXT));

FOR I := 1 TO STRTOINT( EDITNPARCELAS.TEXT) DO BEGIN

IncMonth(DATAATUAL,I);
NOVADATA:=DIADOCADASTRO+´/´+FORMATDATETIME(´MM/YYYY´,DATAATUAL);

// ESSA É A LINHA ORIGINAL --> MEMO1.LINES.ADD(NOVADATA);

TBVENCIMENTO_DATADOVENCIMENTO.ASDATE(NOVADATA) //ESSA LINHA EU ALTEREI

END;



END;
[/b:5bf8ede7c4]


GOSTEI 0
Robinhocne

Robinhocne

15/04/2004

Me ajude a montar os dados que não estou sabendo.

Dados do Banco de Dados:

CODIGO > do Aluno buscado na tabela alunos
STATUS > se é entrada ou saida
PROMISSORIA > qt de parcelas
VENCIMENTO > venc das parcelas
VALOR > val das parcelas
EMISSAO > dia da emissão


GOSTEI 0
POSTAR