Ir ao conteúdo
  • Cadastre-se

Função SUM() - Somatória no campo HORA (time)


Ir à solução Resolvido por brunozanicheli,

Posts recomendados

Bom dia galera...

 

Estou desenvolvendo um programa de controle de produção, e em cada registro inserido, um Operador inicia e termina uma operação em determinada CNC.

Nesse meio tempo, tenho um campo "contagem" do tipo TIME, que recebe o tempo entre o inicio e o fim dessa produção, que está no formato hh:mm:ss.

 

Pois bem, fiz um formulário para mostrar o histórico de cada Operador (Operador mais Produtivo).

Antes de abrir este formulário, eu informo o período de datas que quero que filtre, mas o problema é o seguinte.

 

Nesse mesmo filtro, estou fazendo um select, cujo o mesmo também está agrupando (GROUP BY) por operador, mas preciso também da somatória da:

 

- Quantidade Produzida

- Contagem total

 

Para a quantidade produzida estou usando:  SUM(qtdde_produzida) AS 'Qtde Produzida'

 

Até aí tudo bem, o problema é que não estou conseguindo somar as contagens, exemplo:

Operador             contagem            Qtde ProduzidaBruno                03:05:10            1000Bruno                01:55:20            2000

Quero que no meu grid apareça assim

Operador             contagem            Qtde ProduzidaBruno                05:00:30            3000

Se eu faço SUM(contagem) AS 'CONT_TOTAL', ele retorna somente o numero de segundos...

 

Alguém pode me ajudar ?

 

Grato.

post-673662-0-63809900-1402410214_thumb.

post-673662-0-68289800-1402410295_thumb.

Link para o comentário
Compartilhar em outros sites

  • Solução

beleza, entendi o que quis dizer... Mas onde ficaria a parte final da função SUM ?

 

SUM() AS ''

 

Para eu poder informar o nome do campo em que será guardado.. Já tentei:

CONVERT(VARCHAR, DATEADD(s, SUM(contagem) AS 'CONT_TOTAL', 0), 108); //Não deu certo
SUM(TIME_TO_SEC(contagem)) AS 'CONT_TOTAL', CONVERT(VARCHAR, DATEADD(s, CONT_TOTAL, 0), 108); //também não deu certo.

Aí eu fiz da seguinte forma: No SQL eu deixei simplesmente assim:

SUM(TIME_TO_SEC(contagem)) AS 'CONT_TOTAL'; //Ele pega os valores e transforma em um número inteiro (Segundos)

Aí na Query, eu criei um campo calculado chamado "calculated" do tipo String, e no evento OnCalcFields coloquei o seguinte código:

var seconds: integer;beginseconds:= STRTOINT(dm.q_prodOperCONT_TOTAL.AsString);dm.q_prodOpercalculated.AsString := FormatDateTime('hh:nn:ss', Seconds / SecsPerDay);end;

Com isso, o campo "calculated" recebe os valores que eu preciso, mas o problema agora é que, se um Operador produziu (por exemplo) 25 horas e 10 minutos,

No registro ao invés de ficar 25:10:00, está retornando: 01:10:00.

 

Tem alguma solução pra isso ?


Já consegui cara !!! A solução foi a seguinte:

 

No meu DataModule, criei uma função seg_hora:

function Seg_Hora( Seg:LongInt ):string;Var Hora,Min:LongInt;  Tmp : Double;begin   Tmp := Seg / 3600;   Hora := Round(Int(Tmp));   Seg :=  Round(Seg - (Hora*3600));   Tmp := Seg / 60;   Min := Round(Int(Tmp));   Seg :=  Round(Seg - (Min*60));   Result := FormatFloat( '00', Hora )+ ':' + FormatFloat( '00', Min ) + ':' + FormatFloat( '00', Seg );end;

E dentro do evento OnCalcFields da Query, fiz assim:

var seconds: integer;beginseconds:= STRTOINT(dm.q_prodOperCONT_TOTAL.AsString);dm.q_prodOpercalculated.AsString := seg_hora(seconds);end;

Obrigado pela ajuda !!! RESOLVIDO

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...