Feriado entre duas data

06/07/2008

2

Pessoal!

Estou tendo dificuldade para pegar a quantidade de feriado entre duas datas para um sistema de locadora onde tenho a data prevista para devolucao e a data da devolucao, tenho a tabela calendario com os feriados uso o Firebir 2.0. delphi 7.

Agradeço.


Responder

Posts

07/07/2008

Paulo

Cara uma vez fiz algo semelhante. Criei uma tabela com todos os feriados nos próximos 10 anos e fui setando variáveis caso acontecesse um desses feriados. Aí com as variáveis carregadas ou não, eu então fazia meus códigos. Eu tinha dois tipos. Os feriados com dia e mes fixos, tipo(01/01, 21/04,01/05,07/09,12/10,02/11,15/11 e 25/12). Esses eu não precisava carregar nas tabelas pois são fixos, ou seja, serão sempre nesse dia e mes. Eu apenas criava uma rotina para saber se esse dia é:
Sexta, ou Segund(Prolongado), Sábado ou Domingo(Nada acontecia) ou outro dia da semana. A tabela eu criei para os feriados religiosos, que variam, como: Carnaval, Sexta da Paixão e Copus Cristis. Para esse sim eu setava as variáveis, de acordo com a minha tabela para os próximos 10 anos. Claro que há várias formas de se fazer. Essa forma é apenas uma de muitas.


Responder

07/07/2008

Javapaulomg

A dica que posso lhe dar que utilizo e que itero a quantidade de dias e vejo dia a dia se o mesmo e feriado, caso não seja incremento a contagem.


Responder

07/07/2008

Fernandoaco

Valeu a dica, vou fazer incrementando.

Obrigado.


Responder
isso pode ser muito fácil, dependendo da estrutura da sua tabela Calendario.

supondo que a sua tabela Calendario contenha apenas os feriados, e a estrutura seja:
Data         Descricao                     Tipo*
01/01/2008   Confraternização Universal    Nacional
25/01/2008   Aniversário de São Paulo      Municipal
01/05/2008   Dia do trabalho               Nacional
09/07/2008   Revolução Const. de 1932      Estadual
25/12/2008   Natal                         Nacional
*o tipo baseia-se no estado/município de origem. como estou em São Paulo/SP, os feriados de 25/01/2008 e 09/07/2008 são válidos

agora, para contar, basta:
select count(*) from Calendario where Data between DataInicio and DataFim

no Delphi:
cds.Close;
cds.CommandText :=
  ´select count(*) from Calendario ´+
  ´where Data between :DataInicio and :DataFim ´;
cds.Params.ParamByName(´DataInicio´).AsSQLTimeStamp := DateTimeToSQLTimeStamp( DateTimePicker1.Date );
cds.Params.ParamByName(´DataFim´).AsSQLTimeStamp := DateTimeToSQLTimeStamp( DateTimePicker2.Date );
cds.Open;

ShowMessage(´Há ´+cds.Fields[0].AsString+
  ´ feriados entre ´+DateToStr(DateTimePicker1.Date)+
  ´ e ´+DateToStr(DateTimePicker2.Date)
)

cds.Close;

(adicione a unit SQLTimSt para poder utilizar a função DateTimeToSQLTimeStamp())


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira