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

Somar Horas


robinhocne

Pergunta

Preciso somar a quantidade de horas trabalhada de um funcionario, mas é assim, na minha tabela ponto eu tenho os seguintes campos:

Funcionario

Data

HorEnt1

HorSai1

HorEnt2

HorSai2

pois eu preciso que me em um relatorio me mostre as somas das:

HorEnt1

HorSai1

HorEnt2

HorSai2

mas não sei se tem como fazer isso com instrução sql, ou por alguma função

Preciso de ajuda!

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Select

f.funcionario,

Sum(f.HorSai1-f.HorEnt1) AS SOMAHORA1,

Sum(f.HorSai2-f.HorEnt2) AS SOMAHORA2

From tb_func f

Group By Funcionario

Order By Funcionario

/**

...

Depois tem que definir a data, isso é só incluir a clausula WHERE usando BETWEEN.

Nestas linhas SQL ele soma as horas separadamente, se quiser ter as duas, é só depois somar OS CAMPOS [sOMAHORA1 e SOMAHORA2]

*/

P.S: Corrigido ... ahuuahuaau

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

  • 0
Select

f.funcionario,

Sum(f.HorEnt1+f.HorSai1) AS SOMAHORA1,

Sum(f.HorEnt2+f.HorSai2) AS SOMAHORA2

Luis Ricardo, apenas uma correção.

O somatório das horas trabalhadas se fará pela diferença entre a hora de saída e a de entrada, logo, a ordem deve ser invertida:

Sum(f.HorSai1-f.HorEnt1) AS SOMAHORA1,

Sum(f.HorSai2-f.HorEnt2) AS SOMAHORA2

mas pode ser feito tudo de uma só vez:

Sum((f.HorSai1-f.HorEnt1) + (f.HorSai2-f.HorEnt2)) AS HORAS_TRABALHADAS

Lembrando que o resultado da operação com o SUM resultará uma valor real (um float, não um time) - esteja atento para este fato. A título de exemplo, 8:00 trabalhadas será listado como 28800.

Querendo listar em termos de quantidade de horas, basta que seja dividido este valor por 3600. Neste caso, 28800/3600 => 8;

Para usar este valor corretamente no Delphi, como um TTime, ele deverá ser dividido por 60s x 60m x 24h => 3600 x 24 => 86400

Assim, 28800/86400=0,333333.. que aplicado a função TimeToStr, mostrará: 08:00:00

A forma como usar a informação depende da aplicação que será dada a mesma.

Abraços

p.s. estes comentários são válidos, pelo menos para uso com Firebird - banco que o robinhocne provavelmente ainda usa.

Link para o comentário
Compartilhar em outros sites

  • 0

Mas não deu certo!

dá esse erro:

Unsuccessful execution caused by a system error that precludes

successful execution of subsequent statements.

Dynamic SQL Error.

expression evaluation not supported.

A minha tabela tem essa estrutura:

Codigo

Funcionario

Data

HorEnt1

HorSai1

HorEnt2

HorSai2

Eu utilizo o Firebird 2.0 e delphi 7

Link para o comentário
Compartilhar em outros sites

  • 0
Select

f.funcionario,

Sum(f.HorSai1-f.HorEnt1) AS SOMAHORA1,

Sum(f.HorSai2-f.HorEnt2) AS SOMAHORA2

From tb_func f

Group By Funcionario

Order By Funcionario

colocou esse tmb.

Por que quando se da uma soma você precisa agrupar os dados.

Neste caso precisamos agrupar por funcionarios.

Tenta e me avisa.

cara deu certo sim, olha o jeito que ficou:

var

  Total : Integer;
  Horas : TTime;

  with QryHora do
    begin
      close;
      sql.Clear;
      sql.Add('Select f.funcionario, Sum((f.HorSai1-f.HorEnt1) + (f.HorSai2-f.HorEnt2)) AS HORAS_TRABALHADAS From ponto f'
              +' where F.Funcionario = :Fun and (Data >= :DtInicial) and (Data <= :DtFinal) Group By Funcionario Order By Funcionario');
      ParamByName('Fun').AsString := TxtCodFun.Text;
      ParamByName('DtInicial').AsDate := TxtDatIni.Date;
      ParamByName('DtFinal').AsDate   := TxtDatFin.Date;
      open;
    end;

   Total :=  QryHora.FieldByName('Horas_Trabalhadas').AsInteger;
   Horas :=  Total / 86400;
   txthoras.Text := TimeToStr(Horas);

Resolvido

Link para o comentário
Compartilhar em outros sites

  • 0

Mesmo sabendo que o tópico da é antigo, se alguém puder me ajudar na seguinte duvida, eu fiz o procedimento acima pois minha situaçao é a mesmo,

porem eu não quero mostrar em um edit e sim preciso desse valor em horas em um field, para colocar em um relatorio.

Editado por Total := QryHora.FieldByN
Link para o comentário
Compartilhar em outros sites

  • 0
Mesmo sabendo que o tópico da é antigo, se alguém puder me ajudar na seguinte duvida, eu fiz o procedimento acima pois minha situaçao é a mesmo,

porem eu não quero mostrar em um edit e sim preciso desse valor em horas em um field, para colocar em um relatorio.

Crie um campo Time na sua tabela, passe o valor para este campo e salve ... depois voce pode utiliza-lo em um relatório

abraço

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
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...