Fórum Como mostrar aviso de férias com dias de antecedência? #333716

25/11/2006

0

Bom dia!

Peguei esse código na net:

procedure TFrm_Princ.SpeedButton2Click(Sender: TObject);
var
 Dias: Real;
 DataAtual, DataFerias: TDateTime;
begin
 DataAtual  := DM_Geral.IBDSFolhaPagamentoVENCIMENTOFERIAS.Value;
 DataFerias := StrToDate(DateToStr(Date));
 Dias := DataAtual - DataFerias;
 ShowMessage(´Faltam ´+FloatToStr(Dias)+ ´ dias para ´+ DM_Geral.IBDSFolhaPagamentoFUNCIONARIO.Value + ´ Sair de Ferias!´);
end;


Como eu faço para mostrar quando dois ou mais funcionários saírem de féria na mesma data.
Já tentei com While, mais não funcionou.

Uso Delphi 7 + FireBird 2.0 + IBX

Desde já agradeço.


Vitoreduardo

Vitoreduardo

Responder

Posts

25/11/2006

Marco Salles

Como eu faço para mostrar quando dois ou mais funcionários saírem de féria na mesma data. Já tentei com While, mais não funcionou.


Claro que não ira funfar .. Pois não tem nada restringindo os registros

Voce deve fazer um um sql ou filtar esses registros por uma data. Assim , voce estar aselecionado esses registros e o comando While ira percorrer todos os registros que satisfaçam a uma determinada condição
, que no seu caso é uma data


Responder

Gostei + 0

25/11/2006

Vitoreduardo

beleza Marco Salles.

Resolvido.


Responder

Gostei + 0

25/11/2006

Marco Salles

Show amigo , muito bom...

So que acho que voce devia postar o codigo, mesmo que para alguns seje simples para muitos pode ter muita utilidade ... Afinal este forum é um enciclopedia ambulante e tem muita valia na difusão de idéias e propostas... Com certeza servira de consulta e referencia para outros que depararem com o mesmo problema :wink:


Responder

Gostei + 0

26/11/2006

Vitoreduardo

Ai Marco Salles blz?

Olha só eu achei um outro jeito aqui que tá funcionando perfeitamente.

A minha idéia é mostrar para o dono da empresa quando um ou mais funcionário sair de férias, só que este aviso tem que ser com antecedência, não adianta nada o sistema mostrar no dia em que o funcionário já estiver de férias.

Então eu criei no folha de pagamento um campo Date (VencimentoFerias).

Ai eu fiz assim no IBDataSet:
select * from folhadepagamento
Where (VencimentoFerias = Current_Date+3) or (VencimentoFerias = Current_Date+2) or (VencimentoFerias = Current_Date+1)
Order by Funcionario


E no Delphi fiz assim usando um Timer:
procedure TFrm_Princ.tmLembreteFeriasTimer(Sender: TObject);
begin
 DM_EstoqueGeral.IBDSFeriasVencimento.First;
while not DM_EstoqueGeral.IBDSFeriasVencimento.Eof do
begin
if (DM_EstoqueGeral.IBDSFeriasVencimentoVENCIMENTOFERIAS.Value = Date+3)or(DM_EstoqueGeral.IBDSFeriasVencimentoVENCIMENTOFERIAS.Value = Date+2)or
   (DM_EstoqueGeral.IBDSFeriasVencimentoVENCIMENTOFERIAS.Value = Date+1) then
begin
 FrmLembreteFerias.ShowModal;
 Break;
end;
 DM_EstoqueGeral.IBDSFeriasVencimento.Next;
end;
end;


Ai no OnActivate do form Principal eu fiz assim:

tmLembreteFerias.Enabled := true;


E no OnShow do FrmLembreteFerias:
Frm_Princ.tmLembreteFerias.Enabled := false;


Se houver um jeito melhor de se fazer, por favor postem o código.

Valeu.


Responder

Gostei + 0

27/11/2006

Marco Salles

A minha idéia é mostrar para o dono da empresa quando um ou mais funcionário sair de férias, só que este aviso tem que ser com antecedência, não adianta nada o sistema mostrar no dia em que o funcionário já estiver de férias.


Então eu criei no folha de pagamento um campo Date (VencimentoFerias).


eu não sei como esta a relaçao entre as tabelas que compoem o seu banco , mas a principio acho redudante fazer um sql que lhe retorna uma detreminada data que satisfaça a uma determinada condição e depois com este resultado , voce a usa comparando percorrendo , todos os registros de uma determinada tabela , para verificar , quais são os funcionarios cujas datas satisfazem a esta condição.... Perceba que ate na hora de falar acaba ficando reduntande...

Então que lhe sugiro é o seguinte : Que seu Sql ja lhe retorne os nomes ou codigos desse funcionario... E´claro que para isso a tabela [b:206119b1f5]folhadepagamento [/b:206119b1f5]ja deva ter o nome , ou o codigo desse funcionário

Muitas das vezes não se usa o Asterisco no [b:206119b1f5] * From [/b:206119b1f5], ja que o que interressa é somente o Nome ou o codigo do funcionário em uma determinada pesquisa.... COm isso ganha na performace etc...

select CampoNome from folhadepagamento Where (VencimentoFerias > Current_Date) and (VencimentoFerias <= Current_Date+3) Order by Funcionario


Outro ponto que eu acho chave é mostrar isso através de um relatorio , ou um botão que chame o formulário , não se deve ficar fazendo em um timer uma consulta ou mesmo um While <percorrendo todos os registros de uma tabela>
muitas vezes durante um dia , que retornara o mesmo resultado... O maximo que voce deve fazer , é um timer para mostrar o Formulário com os nomes dos funcionarios que atende a esta condição.. Mas para isto não precisa do while , basta chamar o formulário que tenha uma grid que aponte para o sql feito anteriomente

Mas ainda para mim não acabou....Acho que voce deve colocar ainda mais um campo no seu banco , ou mesmo estudar outra forma.. São os funcionarios cujas férias não atendem a [b:206119b1f5]condição Where inicialmente proposta[/b:206119b1f5] , [b:206119b1f5][color=red:206119b1f5]porem não tiraram férias[/color:206119b1f5][/b:206119b1f5].. Esses funcionarios acredito eu , que necessitam aparecer de alguma forma no relatório , para não cair no esquecimento


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar