Felipee Postado Dezembro 14, 2007 Denunciar Share Postado Dezembro 14, 2007 Amigos,estou com uma pipinosa..estou desenvolvimento um controle de ponto. a duvida é com hora extra.vamos dizer o cara faz horario de 12:00 as 20:00.se ele chegar as 11:00, 1 hora de hora extra.se sair as 20:30, 30 minutos de hora extra. show!mas ele pode entrar as 8:00 da manha, sair as 11:00 e voltar para trabalhar as 12:00, ou seja, 3 horas de hora extra.como jogar estas consideracoes num select que retorne quem fez hora extra?conteudo da tabela controledeponto:codcontrolepontocodfunccodescalahentradahsdaidahtotaluso d7 e firebird.obrigado a qualquer ajuda.felipee. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Recife Postado Dezembro 17, 2007 Denunciar Share Postado Dezembro 17, 2007 Amigos,estou com uma pipinosa..estou desenvolvimento um controle de ponto. a duvida é com hora extra.vamos dizer o cara faz horario de 12:00 as 20:00.se ele chegar as 11:00, 1 hora de hora extra.se sair as 20:30, 30 minutos de hora extra. show!mas ele pode entrar as 8:00 da manha, sair as 11:00 e voltar para trabalhar as 12:00, ou seja, 3 horas de hora extra.como jogar estas consideracoes num select que retorne quem fez hora extra?conteudo da tabela controledeponto:codcontrolepontocodfunccodescalahentradahsdaidahtotaluso d7 e firebird.obrigado a qualquer ajuda.felipee.Fala felipe,você não acharia melhor adicionar a sua tabela mais campos, hentradaprimeiroperiodo, hsaidaprimeiroperiodo, e para tarde a mesma coisa so que segundo periodo. Pois desta forma você teria um melhor controle sobre a entrada e saida. Poderia se pensar em dois totais por periodos. Dai você poderia dentro do select trabalhar so com os totais de periodos e poder calcular as horas extras.Entenda esta não é a solução do seu problema, porem é uma forma de comecarmos a descascar este pepino. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Dezembro 18, 2007 Denunciar Share Postado Dezembro 18, 2007 vamos dizer o cara faz horario de 12:00 as 20:00.se ele chegar as 11:00, 1 hora de hora extra.se sair as 20:30, 30 minutos de hora extra. show!mas ele pode entrar as 8:00 da manha, sair as 11:00 e voltar para trabalhar as 12:00, ou seja, 3 horas de hora extra.como jogar estas consideracoes num select que retorne quem fez hora extra?Felipee, a grosso modo, pelo seu exemplo e supondo que sua única dúvida seja levantar quem fez hora-extra, daria para dizer que: - quem registrou o ponto antes do horário inicial da sua escala, fez hora-extra;- quem registrou o ponto depois do horário final da sua escala, fez hora-extra.mas, se por acaso há horário flexível e, o cara tem que cumprir as 08:00h, ele poderia entrar às 11:00h e sair ás 19:00h, cumprindo sua jornada, mas não fazendo hora-extra.Também, pode ocorrer de que o sujeito registre seu ponto uns 20 minutos antes ou depois do horário sem que isso represente hora-extra. Provavelmente há algum critério neste sentido e deverá ser levado em conta.Aqui onde trabalho, é padrão eu ter 20minutos de hora-extra, contudo eu devo ter este excedente registrado, caso contrário é validado apenas o disponível. Qualquer outra hora-extra que faça, deverá ser justificada e autorizada para que seja computada e eu a receba.Conforme a complexidade do caso, acho pouco provável que seja possível resolver este problema com um simples SELECT. Muito provavelmente envolverá adição de campos na tabela (como sugeriu o colega Recife) ou o processamento em batch, seja em código no programa ou em uma procedure no banco (preferível).Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Felipee Postado Dezembro 20, 2007 Autor Denunciar Share Postado Dezembro 20, 2007 (editado) oh galera!muito obrigado mesmo pela ajuda.//registra os dias da semana e respectivos horarios e cargas de acordo com dia.//o cara pode entrar as 22:00 e sair as 6:00 da manha.//entrar as 8:00 num dia e entrar as 10:00 no outroCREATE TABLE ITMHORARIODETRABALHO ( CODITMHORTRAB INTEGER NOT NULL, CODHORTRAB INTEGER, CODDIASEM INTEGER, HORARIOENTRADA TIME, HORARIOSAIDA TIME, CARGAHORARIA TIME, INTERVALOALMOCO TIME, HORARIOALMOCO TIME, CONSIDERARINTERVALOALMOCO VARCHAR(3) ); //cabecalho do itmhorariodetrabalho e respectivos totais//tipo DESCRICAO = "horario de 8:00 as 18:00"CREATE TABLE HORARIODETRABALHO ( CODHORTRAB INTEGER NOT NULL, CARGAHORARIASEMANAL VARCHAR(20), CARGAHORARIAMENSAL VARCHAR(20), DESCRICAO VARCHAR(30) ); //registro a abertura e fechamento do ponto//o cara pode abrir e fechar seu ponto n vezes no dia.//assim não dá para fixar um horario de entrada e outro de saida as e depois do almoco.CREATE TABLE CONTROLEPONTO ( CODCONTROLEPONTO INTEGER NOT NULL, CODFUNC INTEGER, CODHORTRAB INTEGER, CODDIASEM INTEGER, DATAENTRADA DATE, HORAENTRADA TIME, DATASAIDA DATE, HORASAIDA TIME, TOTALHORA TIME, JUSTIFICATIVA BLOB SUB_TYPE 0 SEGMENT SIZE 500 ); //registro funcionariosCREATE TABLE FUNCIONARIO ( CODFUNC INTEGER NOT NULL, FUNCIONARIO VARCHAR(50) ); Entendo que preciso fazer:1-somar as horas_trabalhadas agrupadas por dia;2-diminuir estas horas_trabalhadas pelas horas que deveria ter trabalhado (carga_horaria_dia);3-assim horas_trabalhadas-carga_horaria_dia>0 fez hora extra. se = 0 sem hora extra. se <0 deve horasegundo a empresa o cara que pega 13:00h faz hora extra de 8:00 as 11:00. assim existirão dois registros de abertura e fechamento de ponto no mesmo dia.a select teria que exibir o nome do funcionario e o calculo acima.o que fiz:selectDATA, FUNCIONARIO.FUNCIONARIO,sum(TOTALHORA - CAST ('0000:00:00' AS TIME))/60/60 AS HORATRABALHADA,(SELECT FIRST 1 CARGAHORARIAFROMITMHORARIODETRABALHO WHERE ITMHORARIODETRABALHO.CODHORTRAB=CONTROLEPONTO.CODHORTRABAND ITMHORARIODETRABALHO.CODDIASEM=CONTROLEPONTO.CODDIASEM)AS CARGAHORARIA,CARGAHORARIA-HORATRABALHADA AS HORAEXTRAFROMCONTROLEPONTO, FUNCIONARIO WHERECONTROLEPONTO.DATA between :CDATA1AND :CDATA2AND CONTROLEPONTO.CODFUNC=FUNCIONARIO.CODFUNCAND HORAEXTRA>0GROUP BY DATA, FUNCIONARIOagora o problema é que realmente não estou sabendo fazer esta query.quando tento diminuir os campos diz que ele não existe por ser um campo calculado...estou utilizando o d7 e firebird 1.5agradeço muito a ajuda.Felipee. Editado Dezembro 20, 2007 por Felipee Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Felipee Postado Dezembro 20, 2007 Autor Denunciar Share Postado Dezembro 20, 2007 como fazer para ele levar em consideracao campo calculado?cheguei a:select CONTROLE.DATA, CONTROLE.CODFUNC, FUNCIONARIO, ITMHORARIODETRABALHO.CARGAHORARIA, DIASSEMANA.DIADASEMANA,(select ((SUM( SUBSTRING(TOTALHORA from 1 for 3) * 3600 + SUBSTRING(TOTALHORA from 5 for 2) * 60 + SUBSTRING(TOTALHORA from 8 for 2) * 1))/3600) from CONTROLEPONTO WHERE data=CONTROLE.DATA and CODFUNC=CONTROLE.CODFUNC) AS HORASTRABALHADASFROM FUNCIONARIO "FUNC", CONTROLEPONTO "CONTROLE", ITMHORARIODETRABALHO, DIASSEMANA WHERE CONTROLE.DATA BETWEEN :CDATA1 AND :CDATA2 AND CONTROLE.CODFUNC=FUNC.CODFUNC and NOT CONTROLE.HORASAIDA IS NULL AND CONTROLE.CODDIASEM=ITMHORARIODETRABALHO.CODDIASEM AND CONTROLE.CODDIASEM=DIASSEMANA.CODDIASEM AND HORASTRABALHADAS>ITMHORARIODETRABALHO.CARGAHORARIAGROUP BY CONTROLE.DATA, CONTROLE.CODFUNC, FUNCIONARIO, ITMHORARIODETRABALHO.CARGAHORARIA, DIASSEMANA.DIADASEMANAORDER BY CONTROLE.DATAmas está dando erro. ele esta calculando legal agora, mas gostaria que funcionasse quando HORASTRABALHADAS>ITMHORARIODETRABALHO.CARGAHORARIA e ele diz que o campo HORASTRABALHADAS não existe...claro que ele não existe fisicamente, mas como fazer com que a query leve ele em consideracao no where? to agarrado nisso.obrigado por sua ajuda. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Ismaelmar Postado Outubro 19, 2015 Denunciar Share Postado Outubro 19, 2015 Poderiam postar algum banco de dados para interagirmos e acharmos a melhor solução? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Felipee
Amigos,
estou com uma pipinosa..
estou desenvolvimento um controle de ponto. a duvida é com hora extra.
vamos dizer o cara faz horario de 12:00 as 20:00.
se ele chegar as 11:00, 1 hora de hora extra.
se sair as 20:30, 30 minutos de hora extra. show!
mas ele pode entrar as 8:00 da manha, sair as 11:00 e voltar para trabalhar as 12:00, ou seja, 3 horas de hora extra.
como jogar estas consideracoes num select que retorne quem fez hora extra?
conteudo da tabela controledeponto:
codcontroleponto
codfunc
codescala
hentrada
hsdaida
htotal
uso d7 e firebird.
obrigado a qualquer ajuda.
felipee.
Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.