Array
(
)

Cadastrar todos os domingos

Paullsoftware
   - 03 fev 2006

Galera como faço para cadastrar todos os domingos em uma tabela de feriados?

gostaria de selecionar um período por exemplo:

01/01/2006
31/12/2006

e ao clicar no botão ele preencher a minha tabela de feriados com todos os domingos (datas) existentes entre elas!


Cabelo
   - 03 fev 2006

Use a função dayofweek, para saber qual o dia da semana da data corrente.. se for 1, então cadastra na tabela, senão incrementa a data..

assim :

v_range := v_data_final - v_data_inicial;
for v_i := 0 to round(v_range) - 1 do
begin
if dayofweek(v_data_inicial) = 1 then
begin
P_grava_data;
end;
v_data := v_data_inicial + 1;
end;


Aroldo Zanela
   - 03 fev 2006

Colega,

Acho que isso é gastar espaço desnecessário em disco, pois você recupera essa informação por meio de função, mas uma solução é:
#Código


var dInicio, dTermino: TDateTime;
I, X: Integer;
begin
dInicio := StrToDate(´01/01/2006´);
dTermino := StrToDate(´31/12/2006´);
X := Trunc(dTermino - dInicio);
for I := 1 to X do
begin
if DayOfWeek(dInicio+i)=1 then
GravarDomingo(DateToStr(dInicio+i));
end;
end;



Paullsoftware
   - 03 fev 2006


Citação:
Use a função dayofweek, para saber qual o dia da semana da data corrente.. se for 1, então cadastra na tabela, senão incrementa a data..

assim :

v_range := v_data_final - v_data_inicial;
for v_i := 0 to round(v_range) - 1 do
begin
if dayofweek(v_data_inicial) = 1 then
begin
P_grava_data;
end;
v_data := v_data_inicial + 1;
end;


????
valeu a intensão, mais não entendi nada...
usando essa rotina consigo cadastrar todos os domingos do ano??

não entendi alguns pontos
sei que
v_range, v_data_final,v_data_inicial,_grava_data podem ser variaveis do tipo ´DOUBLE´ mais ondem vc passa o valor para:
P_grava_data;

ta meio vago!


Weber
   - 03 fev 2006

Fiz uma função que retorna a diferença entre dias descontando se o dia do vencimento é sábado, domingo ou feriado.
Talvez de para aproveitar em seu código.

#Código

function CalcDiasVencto(DtAtual, DtVencto: ShortString): Integer;
var
dDtTemp: TDateTime;
function VerFeriados(DtAtual, DtVencto: ShortString): Boolean;
var
Ano, Mes, Dia: Currency;
c,n,k,i,j,l: Currency;
cFeriados: TStringList;
dDtTemp: TDateTime;
nI, nY: Integer;
begin
Ano := StrToInt(Trim(Copy(DtAtual,7,4)));
c := Trunc(Ano / 100);
n := Ano - (19 * Trunc(Ano / 19));
k := Trunc((c - 17) / 25);
i := c - Trunc((c/4)) - Trunc((c-k)/3) + (19*n) + 15;
i := i - (30*Trunc(i/30));
i := i - (Trunc(i/28)*(1-Trunc(i/28))*Trunc(29/(i+1))*Trunc((21-n)/11));
j := Ano + Trunc(Ano / 4) + i + 2 -c + Trunc(c/4);
j := j - (7*Trunc(j/7));
l := i - j;
Mes := 3 + Trunc((l+40)/44);
Dia := l + 28 - (31*Trunc(Mes/4));
cFeriados := TStringList.Create;
cFeriados.Add(FormatDateTime(´dd/mm´,StrToDate(CurrToStr(Dia)+´/´+CurrToStr(Mes)))); //Pascoa
cFeriados.Add(FormatDateTime(´dd/mm´,IncDay(StrToDate(cFeriados[0]), -2))); //6.Santa
cFeriados.Add(FormatDateTime(´dd/mm´,IncDay(StrToDate(cFeriados[0]),-47))); //Carnaval
cFeriados.Add(FormatDateTime(´dd/mm´,IncDay(StrToDate(cFeriados[0]), 60))); //Corpus Crhist
cFeriados.Add(´01/01´); //Ano Novo
cFeriados.Add(´21/04´); //Tiradentes
cFeriados.Add(´01/05´); //Trabalho
cFeriados.Add(´07/09´); //Indenpencia
cFeriados.Add(´12/10´); //N.Senhora
cFeriados.Add(´02/11´); //Finados
cFeriados.Add(´15/11´); //Replublica
cFeriados.Add(´25/12´); //Natal
cFeriados.Add(´10/05´); //Aniversario de Maringa
cFeriados.Add(´15/08´); //Padroeira de Maringa
dDtTemp := StrToDate(DtAtual);
dDtTemp := IncDay(dDtTemp, -1);
while dDtTemp >= StrToDate(DtVencto) do //domingos e sabado
if (DayOfWeek(dDtTemp) = 7) or (DayOfWeek(dDtTemp) = 1) then
begin
cFeriados.Add(FormatDateTime(´dd/mm´,dDtTemp));
dDtTemp := IncDay(dDtTemp, -1);
end
else
Break;
Result := False;
dDtTemp := StrToDate(DtVencto);
for nI := 0 to cFeriados.Count -1 do
if cFeriados[nI] = FormatDateTime(´dd/mm´,dDtTemp) then
begin
for nY := 0 to cFeriados.Count -1 do
if cFeriados[nY] = FormatDateTime(´dd/mm´,IncDay(StrToDate(DtAtual), -1)) then
begin
Result := True;
Break;
end;
if Result then
Break;
end;
cFeriados.Free;
end;
begin
Result := DaysBetween(StrToDate(DtAtual), StrToDate(DtVencto));
if StrToDate(DtAtual) <= StrToDate(DtVencto) then
Result := 0
else
begin
dDtTemp := StrToDate(DtVencto);
while StrToDate(DtAtual) > dDtTemp do
begin
if VerFeriados(DtAtual,DateToStr(dDtTemp)) then
begin
Result := Result - 1;
dDtTemp := IncDay(dDtTemp, 1);
end
else
Break;
end;
end;
end;



Paullsoftware
   - 03 fev 2006

Valeu Weber, vou dar uma estudada!! :wink:


Cabelo
   - 03 fev 2006


Citação:

Citação:
Use a função dayofweek, para saber qual o dia da semana da data corrente.. se for 1, então cadastra na tabela, senão incrementa a data..

assim :

v_range := v_data_final - v_data_inicial;
for v_i := 0 to round(v_range) - 1 do
begin
if dayofweek(v_data_inicial) = 1 then
begin
P_grava_data;
end;
v_data := v_data_inicial + 1;
end;


????
valeu a intensão, mais não entendi nada...
usando essa rotina consigo cadastrar todos os domingos do ano??

não entendi alguns pontos
sei que
v_range, v_data_final,v_data_inicial,_grava_data podem ser variaveis do tipo ´DOUBLE´ mais ondem vc passa o valor para:
P_grava_data;

ta meio vago!


var v_range, v_data_final, v_data_inicial : TDateTime

P_Grava_Data; Rotina onde vc insere o domingo no BD... como vc está gravando ? Se for um campo do Tipo Date, vc passa o parâmetro nesta procedure para gravar a data que será o domingo....


Paullsoftware
   - 17 fev 2006

ok valeu Cabelo...


Marco Salles
   - 18 fev 2006

pode ser fazer assim tb :

#Código

function VerData(data:TDate):boolean;
begin
result:=((Trunc(Data) - 1) mod 7 = 0);
end;


#Código
procedure TForm1.Button1Click(Sender: TObject);
begin
if Verdata(strtodate(edit1.text)) then
showmessage(´é domingo´)
else
showmessage(´não é´);
end;