Multiplicar Datas

Delphi

06/02/2003

Olá caro amigos programadores tudo bem
estou vindo até esse seleto grupo para acabar com um problema é o seguinte e um programa em piradox 7 com delphi 6.
Bem eu tenho um cadastro de venda e quero fazer um crediario o que eu estava pensando assim a pessoa determinava o dia de pagamento e as parcelas e o programa pegava por exemplo 3 parcelas data pagamento dia 20 ele registraria tres cadastro 1º 20/02/03 - 2º 20/03/03 - 3º 20/04/03
só que eu não faço nem ideia de como fazer isso se alguem poder me dar uma luz alguma dica algo eu agradeço muito mais se não tiver agradeço do mesmo jeito
Abraços para todos :D


Anonymous

Anonymous

Curtidas 0

Respostas

Anonymous

Anonymous

06/02/2003

Voce pode usar a função IncMonth() para acrescentar para formar os
vencimentos das parcelas.


GOSTEI 0
Eduardo Costa

Eduardo Costa

06/02/2003

Uma outra solução é acrescentar 30 dias ao valor da data, exemplo:

dbdata.field.value:=date+30;


GOSTEI 0
Anonymous

Anonymous

06/02/2003

{abaixo estao algumas funcoes com data}
unit FaCDate;
{** Criada em 24/07/1999 - Baseada em necessidades genericas de tratamento de datas ** Autor : Fabio Camara}
interface
uses
Forms, Dialogs, Messages, WinProcs, SysUtils, Classes,
Graphics, ExtCtrls, Controls;

Type {Tipos criados}
TSemestre = record
Mes, Ano : Word;
end;
Semestre = array[0..5] of TSemestre;

function ReturnSixMonth(Actual:TDateTime):Semestre;
function NameMonth(Mes:Word;Abrev:Boolean):string;
function DataExtenso(Data:TDateTime): string;
function DataValida(StrD: string): boolean;
function PrimeiroDiaUtil(Data:TDateTime):TDateTime;
function IsWeekEnd(dData : TDateTime) : boolean;

implementation

function ReturnSixMonth(Actual:TDateTime):Semestre;
{Retorna 6 meses atrás da data enviada, de mes em mes}
var
d,m,y : word;
i : byte;
Data : TDateTime;
begin
for i := 6 downto 1 do begin
Data := Actual - (30 * i);
DecodeDate(Data,y,m,d);
Result[i].Mes := m;
Result[i].Ano := y;
end;
end;

function NameMonth(Mes:Word;Abrev:Boolean):String;
{Retorna o nome de um mês abreviado ou não}
const
NameL : array [1..12] of String[9] = (´JANEIRO´,´FEVEREIRO´,´MARÇO´,´ABRIL´,
´MAIO´,´JUNHO´,´JULHO´,´AGOSTO´,
´SETEMBRO´,´OUTUBRO´,´NOVEMBRO´,
´DEZEMBRO´);
begin
if (Mes in [1..12]) then
if Abrev then
Result := Copy(NameL[Mes],1,3)
else
Result := NameL[Mes];
end;

function DataExtenso(Data:TDateTime): String;
{Retorna uma data por extenso}
var
NoDia : Integer;
DiaDaSemana : array [1..7] of String;
Meses : array [1..12] of String;
Dia, Mes, Ano : Word;
begin
{ Dias da Semana }
DiaDasemana [1]:= ´Domingo´;
DiaDasemana [2]:= ´Segunda-feira´;
DiaDasemana [3]:= ´Terçafeira´;
DiaDasemana [4]:= ´Quarta-feira´;
DiaDasemana [5]:= ´Quinta-feira´;
DiaDasemana [6]:= ´Sexta-feira´;
DiaDasemana [7]:= ´Sábado´;
{ Meses do ano }
Meses [1] := ´Janeiro´;
Meses [2] := ´Fevereiro´;
Meses [3] := ´Março´;
Meses [4] := ´Abril´;
Meses [5] := ´Maio´;
Meses [6] := ´Junho´;
Meses [7] := ´Julho´;
Meses [8] := ´Agosto´;
Meses [9] := ´Setembro´;
Meses [10]:= ´Outubro´;
Meses [11]:= ´Novembro´;
Meses [12]:= ´Dezembro´;
DecodeDate (Data, Ano, Mes, Dia);
NoDia := DayOfWeek (Data);
Result := DiaDaSemana[NoDia] + ´, ´ +
IntToStr(Dia) + ´ de ´ + Meses[Mes]+ ´ de ´ + IntToStr(Ano);
end;

function DataValida(StrD: string): Boolean;
{Testa se uma data é valida}
begin
Result := true;
try
StrToDate(StrD);
except
on EConvertError do Result:=False;
end;
end;

function PrimeiroDiaUtil(Data:TDateTime):TDateTime;
{Retorna data do primeiro dia Util do mes, de uma data informada}
var Ano, Mes, Dia : word;
DiaDaSemana : Integer;
begin
DecodeDate (Data, Ano, Mes, Dia);
Dia := 1;
DiaDaSemana := DayOfWeek(Data);
if DiaDaSemana in [1,7] then
Dia := 2;
Result := EncodeDate(Ano, Mes, Dia);
end;

function IsWeekEnd(dData : TDateTime) : boolean;
{Verifica se uma data informada cai em um final de semana}
begin
if DayOfWeek(dData) in [1,7] then
result := true
else
result := false;
end;
end.


GOSTEI 0
Anonymous

Anonymous

06/02/2003

Meu bruxo...Li todas as dicas mas, acredito que a melhor solução é pegar uma UNIT que está disponivel aqui neste site mesmo..O nome da UNIT é ESBDATES ela é totalmente FREE...e serve para calculos de datas..

Espero ter ejudado


GOSTEI 0
Anonymous

Anonymous

06/02/2003

eu uso essa que eu fiz bem simles

Function AddDate(xData: TDateTime; xMeses : Integer ) : TDateTime ;
Var Dia,Mes,Ano : Word ;
j : Integer ;
begin
DecodeDate(xData,Ano,Mes,Dia);
For j := 1 to xMeses do
begin
Inc(Mes);
end;

if Mes > 12 then
begin
Mes := Mes - 12 ;
Ano := Ano + 1 ;
end;

if Mes > 24 then
begin
Mes := Mes - 24 ;
Ano := Ano + 2 ;
end;

if Mes > 36 then
begin
Mes := Mes - 36 ;
Ano := Ano + 3 ;
end;

if Mes > 48 then
begin
Mes := Mes - 48 ;
Ano := Ano + 4 ;
end;

if Dia > DaysInMonth(StrToDate(´01´+´/´+IntToStr(Mes)+´/´+IntToStr(Ano))) then
Result := StrToDate( IntToStr(DaysInMonth(StrToDate(´01´+´/´+IntToStr(Mes)+´/´+IntToStr(Ano)))) +´/´+IntToStr(Mes)+´/´+IntToStr(Ano) )
else
Result := StrToDate( IntToStr(Dia)+´/´+IntToStr(Mes)+´/´+IntToStr(Ano) );

end;


GOSTEI 0
POSTAR