Autogera datas de vencimentos de N parcelas
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.
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
Curtidas 0
Respostas
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
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
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:
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.
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
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
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
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
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.
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
15/04/2004
Acho que a função do Aroldo, com uma pequena modificação, seria a melhor forma. Veja abaixo:
Função:
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]
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
15/04/2004
Acho que a função do Aroldo, com uma pequena modificação, seria a melhor forma. Veja abaixo:
Função:
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]
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;
[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
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
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