Calculo baseado em horas
Boa tarde a todos...
Pessoal, eu desenvolvi um sistema de ponto, onde fica registrado a saída e entrada dos usuários, bem sendo assim tenho uma tabela de registro com os campos:
Sendo assim, no fim o meu relatório exibirá os seguintes dados:
A minha dúvida é como somar somente os periodos aproveitados, ignorando os intervalos..
Antecipadamente agradeço a todos...
Pessoal, eu desenvolvi um sistema de ponto, onde fica registrado a saída e entrada dos usuários, bem sendo assim tenho uma tabela de registro com os campos:
+------------------+ |DATA | DATE | |HORA | TIME | |ID_USER | INTEGER| |ID_EVENT | INTEGER| +----------+-------+
Sendo assim, no fim o meu relatório exibirá os seguintes dados:
+==============================================+ | RELATORIO DE PONTO | +==============================================+ | | +----------------------------------------------+ | * DATA: 02/10/2006 * | +----------------------------------------------+ | 08:10 ENTRADA | | 12:07 SAIDA ALMOCO | | 13:35 RETORNO ALMOCO | | 17:00 SAIDA | +----------------------------------------------+ | Tempo trabalhado: ??:??:?? | +----------------------------------------------+ | * DATA: 03/10/2006 * | +----------------------------------------------+ | 08:07 ENTRADA | | 12:05 SAIDA ALMOCO | | 13:32 RETORNO ALMOCO | | 17:02 SAIDA | +----------------------------------------------+ | Tempo trabalhado: ??:??:?? | +----------------------------------------------+ | Total trabalhado: ??:??:?? | +==============================================+
A minha dúvida é como somar somente os periodos aproveitados, ignorando os intervalos..
Antecipadamente agradeço a todos...
Aloizio Castro
Curtidas 0
Respostas
Micheus
02/10/2006
Que valores assume ID_EVENT?
GOSTEI 0
Aloizio Castro
02/10/2006
Que valores assume ID_EVENT?
é o ID de uma tabela de eventos, para fazer o relacionamento...
+----------+-----------+ | ID_EVENT | DESCRICAO | +----------+-----------+ | 1 | "ENTRADA" | | 2 | "SAIDA" | +----------------------+
GOSTEI 0
Micheus
02/10/2006
Perguntei pois poderia haver a possibilidade de identificar entrada e saída nos diferentes períodos (4 valores), e então iria lhe sugerir algo como:
Mas neste caso não funcionará.
Vc não poderia fazer isto no processo de geração do relatório. Faça sua consulta ordenada por data e hora. Para o relatório crie um grupo por data, as horas correção pela detalhe. Horas trabalhadas no dia ficariam num groupfooter onde vc totaliza o dia. Uma banda de sumario totalizaria os dias.
Informe que componente vc pretende utilizar para gerar o relatório, assim, pode ser mais fácil de alguém dar uma sugestão.
[]s
select (RS.HORA -RE.HORA) HR_TRABALHADA
from registro RE, registro RS
where RE.DATA = RS.DATA
and RE.ID_EVENT = 1
and RS.ID_EVENT = 2
Mas neste caso não funcionará.
Vc não poderia fazer isto no processo de geração do relatório. Faça sua consulta ordenada por data e hora. Para o relatório crie um grupo por data, as horas correção pela detalhe. Horas trabalhadas no dia ficariam num groupfooter onde vc totaliza o dia. Uma banda de sumario totalizaria os dias.
Informe que componente vc pretende utilizar para gerar o relatório, assim, pode ser mais fácil de alguém dar uma sugestão.
[]s
GOSTEI 0
Aloizio Castro
02/10/2006
Eu pretendia fazer uso do FreeReport...
Qto aos eventos, vc acha q se eu criasse flag para identificar entrada e saida, o calculo de horas trabalhadas ficaria mais simples?
Qto aos eventos, vc acha q se eu criasse flag para identificar entrada e saida, o calculo de horas trabalhadas ficaria mais simples?
GOSTEI 0
Raserafim
02/10/2006
vc pode fazer o seguinte.
vá para o primeiro registro (pelo que vc mostrou vai ser a hora de entrada, ID = 1) e pegue a hora que entrou.
vá para o próximo registro (que vai ser a hora de saída, ID = 2).
agora calcule a diferença em um array dinâmico.
vá para o próximo registro, caso tenha, faça o mesmo procedimento.
até varrer a tabela intera, e sempre armazenando a diferenca no array que vc vai dimensionando a medida em for varrendo a tabela e encontrando a diferença da hora.
e finalmente vc varre o array somando os tempos.
para calcular as direfenças de tempo nas horas, vá ho help do delphi, na guia Índice, e digite [b:7f0ab37cd0]datetime routines[/b:7f0ab37cd0]
vai mostrar um monte de funções para este tipo de tratamento.
vá para o primeiro registro (pelo que vc mostrou vai ser a hora de entrada, ID = 1) e pegue a hora que entrou.
vá para o próximo registro (que vai ser a hora de saída, ID = 2).
agora calcule a diferença em um array dinâmico.
vá para o próximo registro, caso tenha, faça o mesmo procedimento.
até varrer a tabela intera, e sempre armazenando a diferenca no array que vc vai dimensionando a medida em for varrendo a tabela e encontrando a diferença da hora.
e finalmente vc varre o array somando os tempos.
para calcular as direfenças de tempo nas horas, vá ho help do delphi, na guia Índice, e digite [b:7f0ab37cd0]datetime routines[/b:7f0ab37cd0]
vai mostrar um monte de funções para este tipo de tratamento.
GOSTEI 0
Aloizio Castro
02/10/2006
vc pode fazer o seguinte.
vá para o primeiro registro (pelo que vc mostrou vai ser a hora de entrada, ID = 1) e pegue a hora que entrou.
vá para o próximo registro (que vai ser a hora de saída, ID = 2).
agora calcule a diferença em um array dinâmico.
vá para o próximo registro, caso tenha, faça o mesmo procedimento.
até varrer a tabela intera, e sempre armazenando a diferenca no array que vc vai dimensionando a medida em for varrendo a tabela e encontrando a diferença da hora.
e finalmente vc varre o array somando os tempos.
para calcular as direfenças de tempo nas horas, vá ho help do delphi, na guia Índice, e digite [b:11e79e2ce7]datetime routines[/b:11e79e2ce7]
vai mostrar um monte de funções para este tipo de tratamento.
Ok, é uma idéia simples e prática, mas sou novo no FreeReport, sabe como implementar isto no FreeReporte??
GOSTEI 0
Aloizio Castro
02/10/2006
up
GOSTEI 0
Aloizio Castro
02/10/2006
up
GOSTEI 0
Micheus
02/10/2006
Qto aos eventos, vc acha q se eu criasse flag para identificar entrada e saida, o calculo de horas trabalhadas ficaria mais simples?
Acho que não.[b:07631ece5f]_anderson_[/b:07631ece5f], como não obteve solução ainda, vou dar a sugestão se vc utilizar QuickReport. Pelo menos pode servir de referência:
+==============================================+ | RELATORIO DE PONTO | +==============================================+ | |
+----------------------------------------------+ | * DATA: 02/10/2006 * | +----------------------------------------------+
| 08:10 ENTRADA |
| 12:07 SAIDA ALMOCO | | 13:35 RETORNO ALMOCO | | 17:00 SAIDA |
A questão do texto entrada/saída almoço/retorno almoço/saída teria que ser gerenciado no before print da banda de modo que utilizando um indicador (inicializado na GroupHeader) vc modificaria o caption do texto e incrementaria este indicador. Poderia iniciar em 1 e terminar em 4, daí utilizando um case no evento, daria para ajustar o texto.
+----------------------------------------------+ | Tempo trabalhado: ??:??:?? | +----------------------------------------------+
+----------------------------------------------+ | Total trabalhado: ??:??:?? | +==============================================+
As variáveis para totalização da hora podem ser TDateTime, mas para visualizar total de horas superior a 24:00, não há uma formatação que contemple isto. Uma alternativa está neste post que coloquei em outro forum ([url=http://www.activedelphi.com.br/modules.php?op=modload&name=XForum&file=viewthread&tid=24194#pid61619][b:07631ece5f]link[/b:07631ece5f][/url]).
[]s
GOSTEI 0
Aloizio Castro
02/10/2006
Obrigadissimo pela boa vontade....
Vou analisar e implementar...
abraços
Vou analisar e implementar...
abraços
GOSTEI 0