Fórum Autogera datas de vencimentos de N parcelas #226325
15/04/2004
0
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
Curtir tópico
+ 0Posts
16/04/2004
Luizfernando777
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
16/04/2004
Aroldo Zanela
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
16/04/2004
Salomao
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
16/04/2004
Jonasaf
Gostei + 0
16/04/2004
Ronylee
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
17/04/2004
Adilsond
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
21/06/2004
Paullsoftware
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
13/09/2007
Robinhocne
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
Clique aqui para fazer login e interagir na Comunidade :)