Fórum Como mostrar aviso de férias com dias de antecedência? #333716
25/11/2006
0
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
Curtir tópico
+ 0Posts
25/11/2006
Marco Salles
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
Gostei + 0
25/11/2006
Vitoreduardo
Resolvido.
Gostei + 0
25/11/2006
Marco Salles
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:
Gostei + 0
26/11/2006
Vitoreduardo
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.
Gostei + 0
27/11/2006
Marco Salles
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...
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)