Multiplicar Datas
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
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
Curtidas 0
Respostas
Anonymous
06/02/2003
Voce pode usar a função IncMonth() para acrescentar para formar os
vencimentos das parcelas.
vencimentos das parcelas.
GOSTEI 0
Eduardo Costa
06/02/2003
Uma outra solução é acrescentar 30 dias ao valor da data, exemplo:
dbdata.field.value:=date+30;
dbdata.field.value:=date+30;
GOSTEI 0
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.
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
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
Espero ter ejudado
GOSTEI 0
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;
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