Verificar se funcionário entrou ou saiu

BrunoGomes_PT

Power Member
Olá a todos, precisava de uma ajudinha :)

Tenho 2 tabelas sql server:

Código:
Funcionarios:

Id                         1
Nome                    JoséFerreira
HorarioEntrada1     08:00
HorarioSaida1        12:30
HorarioEntrada2     13:30
HorarioSaida2        17:00

Picagem:

Id                         267384
Func_Id                1
Pica                      2018-08-08 12:32:34

O que quero fazer é ao percorrer todas os registos na tabela Picagem, verificar se o funcionário saiu ou entrou na empresa, de acordo com o horário do mesmo. Qual a forma mais simples e eficaz de resolver isto?

Desde já, muito obrigado.
 
Nao tens nenhum timespan... Tens uma tabela com 4 datetimes e vais fazer um join com uma tabela com um datetime. O join e feito pelo Id.
Tens os seguintes casos:
Pica <= horarioEntrada1 (entrada)
Pica >horarioEntrada1 && pica <= horarioSaida1 (Entrada mas atrasado)
Pica > horarioSaida1 && pica <= horarioEntrada2 (saida hora de almoço)
Pica> horarioEntrada2 && pica< horarioSaida2 (regresso do almoço atrasado)
Pica>= horarioSaida2 (saida)
Possivelmente podes ignorar o caso 2 e 4 ja que sao entradas e saidas tambem.
 
Nao tens nenhum timespan... Tens uma tabela com 4 datetimes e vais fazer um join com uma tabela com um datetime. O join e feito pelo Id.
Tens os seguintes casos:
Pica <= horarioEntrada1 (entrada)
Pica >horarioEntrada1 && pica <= horarioSaida1 (Entrada mas atrasado)
Pica > horarioSaida1 && pica <= horarioEntrada2 (saida hora de almoço)
Pica> horarioEntrada2 && pica< horarioSaida2 (regresso do almoço atrasado)
Pica>= horarioSaida2 (saida)
Possivelmente podes ignorar o caso 2 e 4 ja que sao entradas e saidas tambem.

Obrigado, mas por exemplo se eu tiver um horarioEntrada1 = 21.32 e horarioSaida1 = 06:04 o caso já não funciona...
 
A meu ver o ideal é usares uma linguagem de programação para tratar dessa verificação, php, asp, Java..
É mais simples, a base de dados guarda as entradas e saídas, depois crias um script com php ou asp.. Que recolhe os dados da base dados e verifica, até podes por isso numa tabela, e onde fica assinalado os dias em que o empregado entrou fora de horas bem como se há horas extras..
 
Obrigado, mas por exemplo se eu tiver um horarioEntrada1 = 21.32 e horarioSaida1 = 06:04 o caso já não funciona...

Bem visto. Se o empregado trabalhar de noite e o turno comecar na noite de um dia e acabar na manha do outro, a saida acaba por ser anterior a entrada, visto que nao estamos a comparar com a data.
Se puderes alterar a tabela Picagem, podes adicionar um boleano true para entrada e false para saida. Usavas um trigger, em que o evento seria uma nova entrada na tabela picagem, e ia buscar a ultima picagem do empregado. O problema aqui e se o empregado se esquece de picar algum dia :P

Se nao queres usar um script noutra linguagem para verificar isso, podes sempre criar uma stored procedure em T-SQL (visto que estas a usar SQL Server). Ai podes sempre criar uma variavel com o dia da linha da tabela de picagem que estas a analizar e a hora em horaEntrada. Depois usas essa variavel no case. Assim ja estas a comparar datetime com datetime e mesmo que o apanhe a meia noite, nao afecta o resultado.
Seja como for, se estamos a ter tanto problema com esta verificacao, significa que a base de dados nao esta bem desenhada para o efeito pretendido.
 
Back
Topo