Fórum Calculo baseado em horas #330513
02/10/2006
0
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
Curtir tópico
+ 0Posts
02/10/2006
Micheus
Gostei + 0
02/10/2006
Aloizio Castro
é o ID de uma tabela de eventos, para fazer o relacionamento...
+----------+-----------+ | ID_EVENT | DESCRICAO | +----------+-----------+ | 1 | "ENTRADA" | | 2 | "SAIDA" | +----------------------+
Gostei + 0
02/10/2006
Micheus
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
02/10/2006
Aloizio Castro
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
02/10/2006
Raserafim
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
02/10/2006
Aloizio Castro
Ok, é uma idéia simples e prática, mas sou novo no FreeReport, sabe como implementar isto no FreeReporte??
Gostei + 0
03/10/2006
Aloizio Castro
Gostei + 0
05/10/2006
Aloizio Castro
Gostei + 0
05/10/2006
Micheus
[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
05/10/2006
Aloizio Castro
Vou analisar e implementar...
abraços
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)