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…

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!
Cleidson devo fazer isso dentro da minha classe que chama o relatório?
Não entendi direito…
Obg… ^^
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!
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.
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!
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.
ManoJava, o que seria esse EVEDAT1.DATA ??
Compreeendi sua lógico… só ficou um pouco nublada a idéia do código mesmo…
Obg!
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.
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!
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