Validación de horarios

A ver si me puedes ayudar, requiero realizar cálculos en campo tipo datetime o character que contienen datos de tipo hora, campo carácter de 5 posiciones "13:40", yo tengo una tabla donde almaceno la lectura de un código de barras que pertenece a un empleado entre otros datos, lo que quiero realizar es una tabla, curso o vista que quede de esta manera:
Día, Empleado, hora entrada, incidencia, h salida comida, h regreso comida, salida definitiva, etc.
Las dudas están en que 4 registros de la primera tabla los tengo que convertir en uno solo de la nueva tabla además de validar si su entrada fue normal, retardo etc, de la misma manera la salida definitiva y salidas temporales por visita a proveedores en el inter del día, Además cuento con un catalogo de turnos donde tengo h ent, h retardo, es comida, r comí, h salida, el cual esta ligado con el empleado
Es para un control de asistencia, mil gracias de antemano (moisesvs en hot)

3 Respuestas

Respuesta
1
Curiosamente yo diseñe un sistema checador donde válido todo eso y considero que el pretender hacer todo eso en una consulta, puede ser muy confuso, mejor haz cada cosa aparte, es decir la conversión de los 4 registros en 1 solo, ya con la conversión los validas 1 a 1, etc. etc..
Te anexo estas rutinas de hora que te pueden servir
Function sumarhoras
Parameter chora1,chora2
nhoras = 0
nmin = 0
nseg = Val(Substr(chora1,7,2)) + Val(Substr(chora2,7,2))
Do While nseg >= 60
nmin = nmin + 1
nseg = nseg - 60
Enddo
nmin = nmin + Val(Substr(chora1,4,2)) + Val(Substr(chora2,4,2))
Do While nmin >= 60
nhoras = nhoras + 1
nmin = nmin - 60
Enddo
nhoras = nhoras + Val(Substr(chora1,1,2)) + Val(Substr(chora2,1,2))
m.HoraFin = Padl(Ltrim(Str(nhoras)),2,'0')+ ':' + ;
Padl(Ltrim(Str(nmin)),2,'0')+ ':' + ;
Padl(Ltrim(Str(nseg)),2,'0')
Return m.HoraFin
************
=RestarHoras('02:30:05', '01:00:01')
* Retorna ... ('01:30:04')
Function RestarHoras
Parameter chora1,chora2
m.hora1 = chora1
m.hora2 = chora2
Horas1 = Val(Substr(m.hora1,1,2)) * 60
Minutos1 = Val(Substr(m.hora1,4,2)) * 60
Segundos1 = Val(Substr(m.hora1,7,2)) * 60
Horas2 = Val(Substr(m.hora2,1,2)) * 60
Minutos2 = Val(Substr(m.hora2,4,2)) * 60
Segundos2 = Val(Substr(m.hora2,7,2)) * 60
Horas3 = (Horas1 - Horas2)/60
Minutos3 = (Minutos1 - Minutos2)/60
Segundos3 = (Segundos1 - Segundos2)/60
If Segundos3 < 0
Minutos3 = Minutos3 - 1
Segundos3 = Segundos3 + 60
Endif
If Minutos3 < 0
Horas3 = Horas3 - 1
Minutos3 = Minutos3 + 60
Endif
If Horas3 < 0
Horas3 = 0
Endif
m.HoraFin = Padl(Alltrim(Str(Horas3)),2,'0') + ':' + ;
PADL(Alltrim(Str(Minutos3)),2,'0') + ':' + ;
PADL(Alltrim(Str(Segundos3)),2,'0')
Return m.HoraFin
***********
* =HorasNumeros(4.25)
* Retorna ... ('04:15:00')
Function NumeroHoras
Parameter pNumero
pNumero = Round(pNumero,2)
Entero = Int(pNumero)
Decimales = ((60*(pNumero - Int(pNumero))* 100))/100
m.HoraFin = Padl(Alltrim(Str(Entero)),2,'0') + ':' + ;
PADL(Alltrim(Str(Decimales)),2,'0') + ':00'
Return m.HoraFin
****************************
*Devuelve los minutos transcurridos entre las horas x1 y x2, retorna un numero.
** Parametros : x1=Hora Inicial; x2=Hora Final (en formato 99:99 24 horas, caracter)
FUNCTION Minutos_Entre
Para x1, x2
If x1>=x2
RETURN 0
EndIf
If Empty(x1) Or Empty(x2)
RETURN 0
EndIf
x_Hora=x1
x_Rt=0
Do While x_Hora<x2
x_Rt=x_Rt+1
x_Ho=Left(x_Hora,2)
x_Mi=Right('00'+Alltrim(Str(Val(Right(x_Hora,2))+1)),2)
If x_Mi='60'
x_Mi='00'
x_Ho=Right('00'+Alltrim(Str(Val(x_Ho)+1)),2)
If x_Ho='24'
x_Ho='00'
EndIf
EndIf
x_Hora=x_Ho+':'+x_Mi
EndDo
RETURN (x_Rt)
Respuesta
1
Moydf hace bastante que no programo en fox, mira en delphi lo hice de esta manera
select campo1 & campo2 & comp3 as horarios, campo4 from empleados into cursor;
Con esto contatenas tres campos y le pones como nombre de columna /horarios/ y creo un cursor, tienes que ver la manera también de poner separadores, si van a quedar todos los datos pegados y no se entenderá nada, algo así:
select campo1 & ' - ' &  campo2 & ' - ' & comp3 as horarios, campo4 from empleados into cursor;
sql es válido para cualquier lenguaje así queno creo que tengas problemas.
Respuesta
1
Tal vez te pueda ayudar pero con la información que me das no puedo, puedes ser más explicito y dar la estructura de todas las tablas que utilizas.
En ocasiones tardo para responder porque no siempre me conecto y entro ha este foro. Espero comprendas. By
Ok mi correo es moisesvs de hot. en donde te puedo enviar toda la información que requieres, gracias
Mi correo es :jahs2891 de hotmail
No es necesario que me mandes tus tablas, solo explica mejor tus requerimientos (lo que quieres hacer) y la estructura de tus tablas; y eso lo puedes enviar desde este medio, para que otros usuarios que tengan un problema parecido al tuyo puedan cunsultarlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas