Ir para conteúdo
Fórum Script Brasil
  • 0

Cacular hora extra


Felipee

Pergunta

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

  • 0
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.

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.

Link para o comentário
Compartilhar em outros sites

  • 0
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

Link para o comentário
Compartilhar em outros sites

  • 0

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 outro

CREATE 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 funcionarios

CREATE 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 hora

segundo 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:

select

DATA, FUNCIONARIO.FUNCIONARIO,

sum(TOTALHORA - CAST ('0000:00:00' AS TIME))/60/60 AS HORATRABALHADA,

(SELECT FIRST 1 CARGAHORARIA

FROM

ITMHORARIODETRABALHO

WHERE ITMHORARIODETRABALHO.CODHORTRAB=CONTROLEPONTO.CODHORTRAB

AND

ITMHORARIODETRABALHO.CODDIASEM=CONTROLEPONTO.CODDIASEM)

AS CARGAHORARIA,

CARGAHORARIA-HORATRABALHADA AS HORAEXTRA

FROM

CONTROLEPONTO, FUNCIONARIO

WHERE

CONTROLEPONTO.DATA between :CDATA1

AND :CDATA2

AND CONTROLEPONTO.CODFUNC=FUNCIONARIO.CODFUNC

AND HORAEXTRA>0

GROUP BY DATA, FUNCIONARIO

agora 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.5

agradeço muito a ajuda.

Felipee.

Editado por Felipee
Link para o comentário
Compartilhar em outros sites

  • 0

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 HORASTRABALHADAS

FROM 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.CARGAHORARIA

GROUP BY CONTROLE.DATA, CONTROLE.CODFUNC, FUNCIONARIO, ITMHORARIODETRABALHO.CARGAHORARIA, DIASSEMANA.DIADASEMANA

ORDER BY CONTROLE.DATA

mas 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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...