Feriado móvel e Datas Comemorativas

Delphi

13/02/2008

Bom dia pessoal. Estou precisando da ajuda de vocês. É o seguinte: estou necessitando fazer o cadastro de feriados (internacionais, nacionais, estaduais e municipais) e também as datas comemorativas (como dia das mães, dos pais, etc.). Em relação aos feriados tá tudo OK, mas tô me batendo à bessa em relação às datas comemorativas, em especial aqueles como o Dia das Mães, que é no segundo domingo de maio. Num formulário eu tenho, além dos demais componentes, um ComboBox que lista a ordem (1º, 2º, 3º, 4º e 5º) e em outro ComboBox tenho os dias da semana (domingo, segunda, ...). O que eu preciso é selecionar o dia da semana e depois a ordem. Por exemplo: para o dia das mães, seleciono DOMINGO e depois 2º (segundo domingo do mês de maio). Feito isso, o sistema deverá apresentar a data correta conforme os parâmetros passado (ordem, dia da semana e mês). Neste caso a data correta será 11/05/2008.
Grande abraço.
Jair


Riaj818

Riaj818

Curtidas 0

Respostas

Riaj818

Riaj818

13/02/2008

Sobe


GOSTEI 0
Marco Salles

Marco Salles

13/02/2008

olha eu fiz aqui rapidinho , ´rapidinho não´ gastei uns 40 minutos . mas tudo bem . Deve funcionar , se é que eu entendi a sua dúvida . Mas por favor , na hora de implementar não ´judia´ de mim não , implemente segundo as especificaçoes Ok !!!!

1)um combobox chamado de cbordem com a Propriedade items prenchido nesta ordem : 1 2 3 4 5


1)um combobox chamado de cbDiaSemana com a Propriedade items prenchido nesta ordem : Sabado Domingo Segunda Terça Quarta Quinta Sexta


1)um combobox chamado de cbmes com a Propriedade items prenchido nesta ordem : 1 2 3 4 5 6 7 8 9 10 11 12


Um Edit com a Propriedade [b:f5e6670c3f]Name edtText [/b:f5e6670c3f]e Finalmente Um Botonn


Escreva os Métodos :

para o OnClick Do Button
procedure TForm1.Button1Click(Sender: TObject);
var
ordem,diaSemana,mes,ano:Word;
begin
try
  ordem:=strtoint(cbOrdem.Items.Strings[cbOrdem.itemIndex]);
  diasemana:=cbDiaSemana.itemIndex;
  mes:=strtoint(cbmes.Items.Strings[cbmes.itemIndex]);
  ano:=strtoint(edtAno.Text);
  Showmessage(DatetoStr(RetornarData(Ordem,DiaSemana,mes,ano)));
except
  on e:econverterror do
    raise exception.Create(´Erro Na Passagem Dos Parâmetros´);
  end;
end;


para a Function RetornarData passando os parâmetros Ordem , DiaSemana , mes e Ano , que é exatamente aquilo que tu queres:
function TForm1.RetornarData(ordem,diaSemana, mes,ano:word): Tdate;
var
DataInicio,DataFim:Tdate;
DiaTeste:integer;
DiaFim:Word;
mensagem:String;
begin
 try
   dataInicio:=encodedate(ano,mes,1);
   DiaTeste:=diaSemana - ((trunc(DataInicio) mod 7));
   if diaTeste < 0 Then
     diaTeste:=DiaTeste+7;
   diaFim:=(diaTeste+1)+7*(ordem-1);
   result:=encodedate(ano,mes,diaFim);
 except
  on e:econverterror do
    begin
    case diaSemana of
      0:mensagem:=´Sabado´;
      1:mensagem:=´Domingo´;
      2:mensagem:=´Segunda´;
      3:mensagem:=´Terça´;
      4:mensagem:=´Quarta´;
      5:mensagem:=´Quinta´;
      6:mensagem:=´Sexta´;
    end;
    raise exception.Create(´Erro : Possivelmente esta Mes Não permite´+#13+
    inttostr(ordem)+´ ´+´Semanas , para o Dia da Semana :´+mensagem);
    end;
  end;
end;


compile , execute e rode...

espero ter sido util afinal 1 Hora são 1 Hora... hehehehe


GOSTEI 0
Riaj818

Riaj818

13/02/2008

Marco,
Funcionou exatamente como eu preciso. Nunca que eu iria conseguir implementar essa funcionalidade. Em relação a não mudar nada, pode ficar tranqüilo, só irei mudar para componentes Dataware, que é o que eu preciso. Vou colocar você nos créditos do sistema que estou desenvolvendo, pois sem a sua ajuda (digo rotina inteira) eu não iria mesmo conseguir fazer.
Fiquei vários dias pesquisando aqui no fórum, na ajuda do Delphi, dicas, tutoriais, revistas e sei lá mais onde para achar como fazer e nada. Parecia que não tinha jeito.
Valeu cara, grande abraço.
Jair


GOSTEI 0
Marco Salles

Marco Salles

13/02/2008

fico muito feliz :P e me sinto lisonjiado :P pelos ´créditos´ . Não mereço tanto :lol:

Obrigado...


GOSTEI 0
POSTAR