(2Vias documento relatorio) & (Exception após atualizar) - IReport

52 respostas
M

Olá, eu procurei de varias formas na internet e não achei o que eu queria.

Como eu repito o mesmo resultado do IReport duas vezes em uma pagina?

Eu tenho duas situações, a primeira é uma fatura que precisa ser impressa duas vezes, atualmente eu mando imprimir uma e viro a folha e imprimo denovo.

A segunda, são etiquetas, e se possivel gostaria de saber se é possivel alterar o numero de repetições no relatorio para evitar imprimir coisas desnecessarias.

Ty. []'s

Duvida no ultimo post.

52 Respostas

A

Mark_Ameba:
Olá, eu procurei de varias formas na internet e não achei o que eu queria.

Como eu repito o mesmo resultado do IReport duas vezes em uma pagina?

Eu tenho duas situações, a primeira é uma fatura que precisa ser impressa duas vezes, atualmente eu mando imprimir uma e viro a folha e imprimo denovo.

A segunda, são etiquetas, e se possivel gostaria de saber se é possivel alterar o numero de repetições no relatorio para evitar imprimir coisas desnecessarias.

Ty. []'s

Nunca tive que fazer isso, mas chuto o seguinte: os relatórios do Jasper seguem o DP Composite. Seria possível você pegar o relatório que você quer duplicar, colocar dois desses num relatório “macro” (como se eles fossem sub-reports) e tentar de novo?

Quanto ao número de repetições, você pode controlar isso com um DataSource customizado.

[]´s

N

Bom dia.

Exatamente como o asaudate comentou. Utilize sub-report. Em relação ao número de repetições, você controla no Data Source, enviando uma lista com 0…N valores.
E isso não é um chute, é certeza.

Abraços.

A

nel:
Bom dia.

Exatamente como o asaudate comentou. Utilize sub-report. Em relação ao número de repetições, você controla no Data Source, enviando uma lista com 0…N valores.
E isso não é um chute, é certeza.

Abraços.

OU implementando a própria versão de DataSource. No método next(), pode-se avaliar se precisa continuar ou não (de acordo com o parâmetro q vc definir).

[]´s

M

Hmm… obrigado, vou tentar isso.

Sinceramente eu tinha medo de ter que usar sub-reports.

Vou implementar algo para a fatura que é o que preciso mais urgente.

M

Hmm… estou tentando, mas não consegui usar esses sub-relatorios.

Indiquei para ser o mesmo relatorio mas nao deu certo.

T

Fácil, você usa Collections??

A

Mark_Ameba:
Hmm… estou tentando, mas não consegui usar esses sub-relatorios.

Indiquei para ser o mesmo relatorio mas nao deu certo.

Como você está fazendo pra inserir? Posta uns print-screen aí pra gente ver…

[]´s

M

Ta ai.

E o log do IReport sobre o erro que acontece.

E acredito que eu esteja fazendo errado.


T

Oque você quer que apareça no subRelatório?

Ps.: Usar Group fica muito mais facil… Porque não usa eles?

Att. Jonas

M

Eu só quero o resultado do relatorio duas vezes.
Como se fosse duas vias.

A

Novamente, é só um chute, mas o que acontece se você tirar o espaço do nome do .jrxml ? Aliás, você disse que o sub-relatório é o mesmo que o relatório pai, é isso? Você precisa ter, na verdade, dois relatórios (um com a via e outro com o relatório macro, contendo as duas vias). Senão, é como se ele iniciasse uma recursão.

[]´s

M

bem, acredito que o espaço não seja o problema, é só o nome do arquivo.

E não sei por que, mas não me parece que eu precise usar sub-relatorios para fazer isso.

A não ser que meu relatorio tenha dois sub-relatorios desse que quero repetir, conforme voce disse eu acho.

T

eu falei para usar grupos, mas acho que não leu…

estamos tentando ajudar, mas então beleza =)

M

Eu tentei usar grupos sim.
Mas não entendi como.

Voce quis dizer grupos no relatorio ou grupos no SQL?

T

no relatório mesmo…

é o caminho mais fácil, eu odeio e ignoro utilização de subRelatórios

Mas uma coisa é quase certa, não tem como fazer o sql repertir…
então aconselho enviar uma Collection com os dados populados…
Assim sendo, vc vai conseguir enviar 2x a mesma informação…

No grupo, vc teria que repetir todos os campos de forma igual ao Detail…
Deve funcionar, eu entendi seu objeto final… E acredito que assim resolve de maneira simples :wink:

M

Bem… eu não consegui repetir o resultado mas tenho outra duvida mais urgente.

Preciso fazer um relatorio que tenha duas bandas detail.

Meu caso é o seguinte.

Tenho a tabela romaneio e as tabelas ordemcoleta e conhecimento.

Quero que o header seja do romaneio e tenha a banda detail para a ordemcoleta e uma segunda para o conhecimento. É possivel?

Até onde vi não consegui.

Acredito que não seja pelo fato da SQL não separar os dados dessa forma, isso seria um caso para realmente usar sub-report?

T

não entendi qual o problema nisso…

o primeiro detail sera para a ordemcoleta,
e o segundo detail conhecimento…

tranquilo… deu algum erro?
como que saiu?

M

Entao… nao consegui criar duas bandas detail.

Até tentei colocar em uma outra banda mas apareceu só o 1° resultado.

E tentei a mesma lógica para imprimir duas vias mas também aconteceu a mesma coisa.

T

nao conseguiu criar 2 banda detail??

add another band

M

Uma print de como estou tentando fazer com os grupos para as duas vias.


M

Hmm… aonde fica essa opção? Não achei o.0

T

um momento, ja te mostro com print :wink:


M

Ahh… essa opção não tem aqui.

Estou usando a versao 3.0.0

Vou atualizar e vejo se consigo.

T

blz pura… posta resultado qndo testar

M

Bem… eu atualizei…

Agora tem o add another detail band.

Mas ela fica em baixo da 1° e os headers e footers tambem ficam embaixo dos respectivos do 1° grupo.

E nesse novo ireport aonde eu edito a query do relatorio?
E onde tem o ver> bandas do relatorio? onde eu posso subir e descer as bandas?

Vlw.

M

Bem… meu resultado foi o seguinte.

Na foto.

1° parte | 2° parte | 3° parte
|Como fiz| O que gerou| o que eu esperava|


T

Se possível me add no Gtalk, esta ruim para ficar entrando direto no forum para postar respostas…

email é [email removido]

ja vou postar sobre o que vc postou no topico, no reply da msg

o que vc quiz dizer com subir e descer bandas, seria o tamanho delas? ou muda-las de posição??
trocar de orientação acho que nao dá…

e para querys seria ali como mostra na imagem


T

Quanto ao resultado esperado…

Não vou te dizer com 100% certeza…
Mas te digo com 99,9% que seja no seu SQL o problema,
se entendi bem… vc nao quer que repita os dados…

Talvez seria o caso de usar distinct :wink:

AS Bandas >

Report Inspector

M

Ñão é que o resultado repetiu, mas o que eu queria é que para cada resultado em baixo tem um em cima, quando coloquei dois resultados do 1° detail, ficou mais estranho ainda.

T

ta estranho, nao entendi mto bem oque vc quer

M

Bem. Fiz um novo exemplo que provavelmente da para entender o que quero fazer.

Imagine que tenha 2 registros na tabela coleta e 5 no ctrc.

esquerda -> resultado
direita -> o que espero

E o que eu queria das bandas era realmente trocar de lugar com outra banda.


T

Cara, eu posso estar parecendo ignorante…

Mas não estou entendendo o que você quer fazer o.O
Só vejo informações repetidas no lado esquerdo…
e no lado direito informações que não repetem…

Tá dificil compreender oque realmente quer que o relatório faça

T

vc quer que apareça na aba da direita, os resultados que vc mostrou?

porque não esta mostrando isso??? só aparece o resultado esquerdo… e vc quer q aparece o lado direito conforme mostrou na imagem?

PS.: VC TEM O LADO ESQUERDO!! E QUER QUE APAREÇA O LADO DIREITO CONFORME IMAGEM, PORQUE TA VINDO EMBRANCO.

é isso?

M

O lado esquerda é o que aparece para mim.

O lado direito eu editei que é o que quero.

Pensei que com duas bandas detail isso aconteceria. Mas pensei ser impossivel por causa do SQL.

Talvez isso realmente seja um caso para usar sub-report.

T

mas é facil.

nao é questao nem de grupo.
seria o fato de criar um pequeno frame ali para aquelas informações…

e enviar collection para o relatorio ao invés de um simples SQL…

vc vai ter que se ater aos critérios… como é o filtro para o lado direito?
quais condições tem que atender para que seja impresso ali?

Sendo assim… vc vai verificar as informações do lado esquerdo…
e qndo estas atenderem ao que vc espera, vc imprime no lado direito que é um frame na mesma banda detail

T

Veja este relatório…

Acho que é o que esta querendo fazer

M

Não exatamente, eu só coloquei lado esquerdo e direito na foto para visualizar melhor meu problema, mas o que eu quero é que mostre apenas o lado direito.

O que eu quero é que primeiro ele liste todas ordem_coletas depois ele liste todos os conhecimentos.

Mas não precisa ser lado esquerdo e direito.

Sem querer abusar da sua bondade tem como me mostrar um exemplo de como fazer duas vias do mesmo relatorio usando grupos?

T

Mark_Ameba:
Não exatamente, eu só coloquei lado esquerdo e direito na foto para visualizar melhor meu problema, mas o que eu quero é que mostre apenas o lado direito.

O que eu quero é que primeiro ele liste todas ordem_coletas depois ele liste todos os conhecimentos.

Mas não precisa ser lado esquerdo e direito.

Sem querer abusar da sua bondade tem como me mostrar um exemplo de como fazer duas vias do mesmo relatorio usando grupos?

Pra isso, vc deve criar grupo da seguinte forma. group expression = ordemcoletas_id…
e entao dentro do grupo vc coloca os 2 fields… $F{ordemcoletas_id } e $F{conhecimentos}

Para o grupo repetir o mesmo relatorio, é o mesmo sentido desse relatorio.
vc vai pegar as informações que vai repetir e copialas no grupo…
Sendo o group expression o codigo da nota por exemplo… Este código é 1 por nota

T

Veja em anexo

M

Ahh… eu acho que voce não entendeu por um motivo, são duas tabelas separadas, ordem_coleta e conhecimento.

E preciso listar a 1° em cima e a 2° embaixo.

Anyway… pediram para fazer o relatorio de outro jeito então não vou precisar disso, mas estou realmente curioso de como fazer.

Mas mesmo assim ainda preciso imprimir duas vias daquela relatorio.

T

Eu entendi que são duas tabelas separadas o.O …

Chegou a testar?? Saiu errado? Deu erro?
Como saiu?

Nunca tive problemas o.O

Da forma que eu falei… ele ia imprimir tudo da primeira listagem, e depois da segunda oO

T

veja exemplo anexo


M

O resultado dos dois nas fotos, o 1° com os frames
E o 2° o outro.

Em ambas a SQL usado foi.

SELECT DISTINCT
     conhecimento.`id` AS conhecimento_id,
     ordemcoleta.`id` AS ordemcoleta_id
FROM
     `romaneio` romaneio INNER JOIN `ordemcoleta` ordemcoleta ON romaneio.`id` = ordemcoleta.`romaneio_fk`
     INNER JOIN `conhecimento` conhecimento ON romaneio.`id` = conhecimento.`romaneio_fk`




T

mas vc nao fez como eu falei…

no teste 2 coloque os 2 fields no mesmo grupo.
coloque ordemcoleta e em baixo dele conhecimento.

da seguinte forma:

$F{ordemcoleta_id}
$F{conhecimento_id}

E no relatorio tem uma opcao no properties chamado positon relative. coloque Float

M

Fiz isso… mas aconteceu a mesma coisa. o.0

Mas acredito que seja por causa do SQL.

De uma olhada no resultado quando coloquei no cmd o sql.

T

Sim…

Ele fez oque vc mandou fazer no SQL :wink:

Estava analisando o seu sql… o relatorio esta correto

T

Tipo.:

Se quiser trocar idéia sobre relatório…
Eu não posso usar MSN no serviço…
Mas posso usar Skype ou GTalk…

skype > jonas.freitas1987
gtalk > [email removido]

é só add.

M

É… o relatorio esta correto, o que eu espero que está errado.

Mas e o caso de duas vias? Alguma dica?

E outra… o relatorio novo que criei com esse IReport não está rodando com o jar antigo que tenho no sistema.
Mesmo salvando com compatibilidade 3.0.0
Vou ter que mudar o jar do sistema e recompilar todos relatorios?

T

eu aconselho atualizar os jars para a versão nova…

e recompilar todos os relatórios novamente…
se manter atualizado é uma boa escolha…

qnto ao outro relatorio é como te falei no exemplo de grupo…

group expression $F{codigo}

e dentro do grupo todos os campos igual o detail do relatorio :wink:

M

Ta vou tentar.

Eu só tenho MSN aqui no trampo :stuck_out_tongue:

T

pootz, mas se vc tiver gmail… é so entrar no email que da pra conversar la…

é mais facil pra se comunicar… se nao quiser tudo bem… é que msn meu chefe nao vai gostar hehe

M

Bem… atualizei os jars… e agora quando tento executar qualquer relatorio acontece a seguinte exception.

java.lang.NullPointerException
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:247)
	at net.sf.jasperreports.engine.util.JRClassLoader.loadClassForRealName(JRClassLoader.java:157)
	at net.sf.jasperreports.engine.util.JRClassLoader.loadClassForName(JRClassLoader.java:115)
	at net.sf.jasperreports.engine.util.JRSingletonCache.createInstance(JRSingletonCache.java:84)
	at net.sf.jasperreports.engine.util.JRSingletonCache.getCachedInstance(JRSingletonCache.java:74)
	at net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.createParser(JRXmlDigesterFactory.java:1330)
	at net.sf.jasperreports.engine.xml.JRXmlDigesterFactory.createDigester(JRXmlDigesterFactory.java:1307)
	at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:205)
	at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:199)
	at br.com.sistram.util.ReportUtils.loadReport(ReportUtils.java:70)

Sendo a linha 70 do ReportUtils o seguinte:

public static JasperReport loadReport(InputStream is) throws JRException {
		JasperReport report = null;
		try {
			report = JasperCompileManager.compileReport(is);//Linha 70
		} catch (JRException e) {
			e.printStackTrace();
			throw new JRException(e);
		}
		return report;
	}
Criado 17 de maio de 2010
Ultima resposta 21 de mai. de 2010
Respostas 52
Participantes 4