Olá amigos,
Preciso fazer uma rotina tipo cartão de ponto, quando é lançada a entrada, por exemplo 07:30 hs e saida a 14:29 hs. Preciso que seja informada o resultado da diferença em horas e minutos entre essas duas horas, afim de saber quantas horas esse funcionário trabalhou nesse dia, e por fim somar todas as horas para saber quantas horas ele trabalhou no mês. Outra situação é fazer uma critica quando, por descuido seja informado a hora de saida menor do que a hora de entreda, tipo assim: entrada 09:00hs e saida 08:22hs, pois a hora de saida não pode ser entes da hora de entrada.
Fiz uma rotina usando :
DEFINE TIMEPICKER hora_entrada1
ROW 140
COL 050
WIDTH 080
HEIGHT 20
FONTSIZE 10
TOOLTIP " Informe a hora da entrada do funcionário"
SHOWNONE .f.
VALUE ""
TIMEFORMAT "HH:mm"
on enter {||valida_horaponto( this.value , FORM_CARTAO_PONTO.hora_saida1.value ) }
END TIMEPICKER
DEFINE TIMEPICKER hora_saida1
ROW 140
COL 050
WIDTH 080
HEIGHT 20
FONTSIZE 10
TOOLTIP " Informe a hora da saida do funcionário"
SHOWNONE .f.
VALUE ""
TIMEFORMAT "HH:mm"
on enter {||valida_horaponto(FORM_CARTAO_PONTO.hora_entrada1.value , this.value ) }
END TIMEPICKER
...
Function valida_horaponto()
parameters entrada,saida
if val(saida)<val(entrada)
msgbox('A saida '+saida+' informada não pode ser menor do que a entrada '+entrada+' informada',)
return .f.
endif
return nil
Dessa forma o valor de retorno é sempre a direrença entre as horas e não levando em conta os minutos, por exemplo, para o sistemas a diferença entre 07:30hs e 08:45hs é 1h e não 1:15hs, além de não criticar por exemplo que a saÃda 07:45hs é menor do que a entrada 07:30hs caso eu digite por engano a hora de saÃda anterior a hora de entrada.
Já tentei varias formas, porém sem sucesso.
Fico grato se alguém puder me ajudar.
Abraços.