Problema com variável de somatório no Ireport

5 respostas
K

Estou com um problema com uma variável de somatório no meu relatório.
Tenho uma tabela da seguinte forma:

ano/parcela | receita | Imposto | Valor pago ------ ano/parcela | receita | Imposto | Valor pago



Uma linha na realidade são dois registros, mas com a consulta utilizando uma “junção” tenho os dois registros numa única linha.
O problema é o seguinte, quando tiver apenas um registro, quero mostrar apenas a primeira parte do cabeçalho, pois a segunda parte estaria vazia.
Consegui um jeito de fazer, tenho que fazer uma soma total utilizando uma coluna qualquer do lado direito da tabela, se a soma for nula, então não mostro o segundo cabeçalho.
Porém o problema é que tenho que utilizar esta variável como parâmetro no cabeçalho da tabela, ou seja, a soma ainda não foi realizada e a variável sempre estará nula.
Gostaria de saber se existe alguma forma de fazer com que seja realizada a soma antes de desenhar o cabeçalho.
Ou se existe alguma outra solução ?

Obrigado,
Kaio Cesar

5 Respostas

F

Ao invés de usar uma variável com uma soma qualquer, use direto o campo (Field) da consulta na expressão condicional

Ex:

TheKill

outra solução, nao deixe para o relatório fazer cálculos

faça os calculos na aplicação e envie para o relatório os resultados encontrados :wink:

logo, vc tera todas as informações concluidas

Att. Jonas

K

Primeiramente TheKill e fbcarvalho muito obrigado pelas respostas.
“fbcarvalho”, já havia pensado nisso, utilizar um campo como parâmetro, porém o problema é semelhante,
Os campos só tem valor em tempo de execução do registro, ou seja, ele só tem valor na linha onde é executado.
No cabeçalho não tenho como manipular um registro específico.
Por isso a idéia da variável, porém, como a mesma deriva dos registros, também só terá seu valor completo após a execução de todos os registros, e é nula para o cabeçalho.
Minha idéia era encontrar alguma propriedade que fizesse com que a variável fosse processada com prioridade ao resto do relatório.
O que pretendo é ao ter apenas um registro apenas mostrar o ““cabeçalho”” da esquerda, escondendo o da direita. Já havia Conseguido esconder a linha do registro da direita utilizando exatamente esta solução que vc deu “fbcarvalho”, porém não funciona para o cabeçalho.

TheKill, estou utilizando uma aplicação Web que faz cadastros em um banco de dados mysql.
Assim, minhas opções são fazer a operação com uma consulta SQL, ou fazer a operação no relatório.
O somatório feito pelo relatório seria apenas uma alternativa, não irá me agregar valor a nível de informação,
seria apenas um parâmetro para a condição de mostrar ou não o cabeçalho da direita.

Estou tentando fazer a operação no relatório, pois não quero deixar minha consulta no MySQL muito pesada.
Esta é a minha consulta SQL. Para dar uma idéia de como é a estrutura da linha :


SELECT A.num_documento as num_documento, A.ano as ano, A.parcela as parcela, A.valor_receita as valor_receita, A.iss_capiturado as iss_capiturado,
A.iss_pago as iss_pago, A.iss_devido as iss_devido, B.ano as ano_B, B.parcela as parcela_B, B.valor_receita as valor_receita_B,
B.iss_capiturado as iss_capturado_B, B.iss_pago as iss_pago_B, B.iss_devido as iss_devido_B
FROM (SELECT * FROM tb_inf_dados_comp as C WHERE C.seq_comp%2=1 AND C.num_documento = $P{num_doc} ) as A
LEFT OUTER JOIN (SELECT * FROM tb_inf_dados_comp as D WHERE D.seq_comp%2=0 AND D.num_documento = $P{num_doc}) as B
ON (A.seq_comp+1 = B.seq_comp)
ORDER BY A.ano, A.parcela

Muito Obrigado pelas respostas,
Quem tiver outras soluções, vai ajudar bastante.

Obrigado,
Kaio Cesar

TheKill

Opa, bom dia…

Acredito que nas duas opções os resultados do processo vao ser iguais ou semelhantes…
Deixando para o relatório fica mais complexo, as vezes quebra-se muito a cabeça… = muito tempo;
Já na aplicação, você tem um controle mais apurado das informações… mesmo que nao seja para grava-la em BD…

Agiliza o processo do relatório :wink:

Att. Jonas

K

Consegui resolver meu problema,
setei a propriedade de “Reset type = None”, para a minha variável,
Com isso, minha variável me devolve o valor nulo se não houver registro no lado direito,
Se houver registro, me devolve um valor não nulo(Porém, não necessariamente a soma total),
Com esta propriedade, consigo ampliar meu escopo e manipular a variável dentro do cabeçalho.

The Kill, não vou ter prejuízos por “carregar” um pouco mais meu gerador de relatório,
ele é um pouco complexo, mas manipula pequena quantidade de dados.
Mas pensei também em formas de realizar isto passando da aplicação para o iReport algum valor como parâmetro,
também funcionaria.

The Kill e FbCarvalho,
Valeu pela força.

Abraço

Criado 8 de fevereiro de 2010
Ultima resposta 9 de fev. de 2010
Respostas 5
Participantes 3