Somar horas no iReports

10 respostas
F

Olá pessoal,

Estou com problemas na geração de um total de horas utilizando váriaveis no iReports.
Utilizo banco de dados MySQL. Quero somar duas Strings que tem formato “HH:mm” e retornar o total de horas. Exemplo: 3:10 + 4:55 = 8:05

Nome da variavel: SomaPorColaborador
Variable Class = java.lang.String
Calculation = SUM
Reset Type = Group
Reset Group = Contrato
Variable Expression = $F{dados_resultado_horas_parcial_horas}

Abaixo tenho um Print da parte principal do relatório, se alguém puder me ajudar…
Muito obrigada!!!

Fico aguardando…

10 Respostas

C

Boa tarde Fran!

testa dessa forma

String s = “11.10”;
float f = Float.valueOf(s).floatValue();

so que no seu caso use objeto.get para pegar o banco
e trazer para você!
para possível soma!

creio eu que deve funcionar!

F

Cleidson devo fazer isso dentro da minha classe que chama o relatório?
Não entendi direito…

Obg… ^^

C

você pode fazer isso antes de lançar no banco!
mas se vc tiver buscando do banco, e vai somar as horas,
voce deverá fazer no formulario onde vc estar buscando o objeto com o valor das horas!

ou vc faz quando inclue, ou vc faz quando busca!

M

Boa tarde!

Certa ocasião tive q fazer a mesma coisa, somar horas no ireport, fiz da seguinte maneira, primeiro separe horas de minutos, conforme fiz abaixo:

(TO_CHAR(FLOOR(
  ((EVEDAT1.DATA + CASE WHEN EVEDAT1.DATA < EVEDAT.DATA THEN 1 ELSE 0 END) -
   EVEDAT.DATA)*24), '00')
)HORAS,  //retirar a hora inteira de uma data ou período

TRIM((CASE WHEN EVEDAT1.DATA < EVEDAT.DATA THEN
TO_CHAR((((EVEDAT1.DATA + 1) - EVEDAT.DATA)*24), '00')
 ELSE
TO_CHAR((ROUND((((((EVEDAT1.DATA - EVEDAT.DATA)*24) - FLOOR((EVEDAT1.DATA - EVEDAT.DATA)*24))) * 60),2)), '00')
END
))MINUTOS // retirar os minutos de uma data ou período

Neste caso, retornei as horas e minutos em um campo direto no SQL, repare que ja testei se a hora final não é menor que a hora inicial(importante em cálculos e apontamentos de horas trabalhadas)
Tendo as horas e minutos calculados, no ireport fiz uma concatenação simples dentro do Edit Expression do Textfield conforme abaixo:

String.valueOf($F{HORAS}) + ':' + (String.valueOf($F{MINUTOS}))

Obs: usando Banco de Dados Oracle, mas independente do BD a lógica será a mesma.

Att.

F

A questão é a seguinte pessoal, eu não quero armazer esse total no banco de dados…
Eu só quero pegar as horas parciais e somar para exibir no relatório, pois dentro do meu Banco eu já fiz esse tratamento.

Este é meu primeiro projeto, ainda to meio travada em algumas coisas…
Se eu estiver errada podem me corrigir…

ManoJava, esse código que você me passou eu chamo ele dentro de onde?
=/

Obg pela paciência!

M

Boa tarde!

Esse codigo q te passei são campos SQL da query do ireport, essas operações são feitas dentro do textfield em Edit Expression, se vc ja tem os dados calculados do banco entao faz a concatenação ou as operações de soma, divisão conforme o exemplo anterior.

Att.

F

ManoJava, o que seria esse EVEDAT1.DATA ??

Compreeendi sua lógico… só ficou um pouco nublada a idéia do código mesmo…

Obg!

M

Oi Fran

No caso o evedat.data é a hora/data inicial e o evedat1.data seria a hora/data final, coloquei esses nomes pois esses dados ficam armazenados numa tabela chamada eventos_datas alias “evedat”,
entao quando eu seleciono o campo hora/data dessa tabela crio duas instancias da mesma mudando o tipdat_codigo(codigo do tipo da data) e assim faço a diferença entre as duas horas/datas,
essa sintaxe que te passei ai em cima é usada no ireport, existem outras formas de achar essas diferenças, com o por exemplo uma classe do java que recebe 2 parametros(data1, data2) e te retorna
no caso um BigDecimal dias ou a diferença entre datas no formato HH:MM, etc…

Att.

F

Ah sim…
Acho que por isso meio que não deu muito certo no meu caso… pois vou passar infinitas horas e ele vai ter que somar tudo isso pra mim.
Não vou passar somente duas… o tratamento que você fez ali eu já havia feito no meu código na própria aplicação.
Achei esse método aqui e deu certo de concatenar String e fazer a soma, o único problema foi o final que retornou algo meio estranho.

http://www.guj.com.br/java/50285-somatorio-de-string-contendo-hora-ireport

Da uma olhadinha se for possivel, já expliquei o que aconteceu comigo lá mesmo…

Muito obrigada pela atenção!

O

Como eu faço para somar 3 horários do tipo Time no iReport de maneira rápida?

Por exemplo: 07:00+12:00+18:00?

Obs: No banco está:

dia entrada_matutina saida_matutina entrada_vespertina saida_vespertina entrada_noturna saida_noturna

dia do tipo Date
entradas/saidas do tipo Time

Criado 20 de outubro de 2011
Ultima resposta 2 de dez. de 2012
Respostas 10
Participantes 4