Dúvida JasperReports

Opa :smiley:

Criei meu relatório utilizando o iReport, porém tenho uma dúvida: existe uma coluna no relatório que deverá ser dinâmica ( uma coluna de siglas de produtos ) e ela deverá exibir as colunas de acordo com a quantidade de siglas que forem retornadas.

Alguém já fez algo parecido e pode me dar uma ajuda?

[]'s

Olá Amigo… de um exemplo pq está difícil de entender seu problema
abcs

Vamos supor que vc tem a tabela PRODUTOS. Os produtos são agrupados de acordo com uma Sigla…

Ex.:
-Arroz, Feijão, Milho: Sigla - GR
-Cerveja, Vinho, Vodca - BA

  • Brinquedos - BR
    e etc…

Essas Siglas variam de acordo com os produtos registrados…não tem mto como eu saber a quantidade de siglas que irão ter então eu preciso fazer um esquema que as colunas do relatório se ajustem automaticamente…no relatorio eu exibo assim:

codigo do funcionario - nome do funcionario - siglas dos produtos que cadastrou - quantidade.

Entendeu?

O Bean do meu relatório, eu montei da seguinte maneira:

public class RelatorioBean {
	private String funcionarioCodigo;
	private StringfuncionarioNome;
	private List<String> siglas = new ArrayList<String>();
	private Map<String, Integer> quantidadeEntradasInterno = new HashMap<String, Integer>();
	private Integer quantidadeOrigemInterna;
	private Integer quantidadeOrigemExterna;
	private Integer totalEntradas;
// gets e sets
}

Eu consigo preencher o Bean, mas não sei como jogar a List ‘Siglas’ num esquema de colunas dinâmicas…nem sei se isso é possível rs

Unnn agora entendi. Colunas diñâmicas é osso ein! Eu estava atrás disso pra fazer uma lista de chamada de alunos de acordo com o número de aulas e não achei nada sobre.
De qualquer modo, não é legal vc fazer isso, pq tem a limitação do tamanho da folha. Se tiver muita sigla vai acabar dando merda. Lei de Murphi heeeheh

Bom, eu sinceramente desconhço uma solução. Se vc souber de alguma, posta ai o resultado pra gente descobrir junto.

Abraços t+

Aaa uma alternativa, a mais simples pra vc, é jogar a sua lista em uma String, as siglas separadas por ‘,’ em uma coluna da tabela.
Acho q é o jeito mais sussa de resolver

Abraços

[quote=arec_metafora]Aaa uma alternativa, a mais simples pra vc, é jogar a sua lista em uma String, as siglas separadas por ‘,’ em uma coluna da tabela.
Acho q é o jeito mais sussa de resolver

Abraços[/quote]

Como que eu faço isso? ( Essa parece ser boa hehe )

Eu me refiro a parte do jasper, como que fica o campo pra ele saber que estão separados por vírgula? E a Lista inteira eu jogo em uma ‘Stringona’?

Bem simples… declara a coluna como tipo String e passa ela no bean.

String siglasStr = "";
for(String sigla : siglas)
    siglasStr += sigla + ",";

// Pense numa maneira de tirar essa última virgula expúria
if( !siglasStr.isEmpty() )
    siglasStr = siglasStr.substring(0,siglasStr.lenght()-1);

Mas como que vou setar o valor da quantidade de objetos de cada String no Jasper?

Não entendi! :roll:

Tipo, vamos tentar entender melhor… No relatório vc terá, por exemplo, nome do cliente e siglas…

Nome do cliente…| Siglas

Augusto…| GL, PG, AR, ET

Felipe …| GL, PG

Apenas isso… não precisa do tamanho… é claro q entra naquele problema do tamanho não caber na linha, mas o Ireport ajuda pra vc e dá quebra de linha…

Nome do cliente…| Siglas

Augusto …| GL, PG, AR, ET,AG
…| TO, HY

Felipe …| GL, PG

E por aí vai…
É assim? Se o seu problema se resumir a isso, tá terminado…
Passa um atributo do tipo String no seu bean, executa o código que eu lhe falei antes de chamar o relatório pra preencher a string, e passa ela na coluna siglas…
Bom, se seu problema não é esse, então eu estou me confundindo… hehe
Abraços

Não é só isso rsrs

Embaixo de cada Sigla, eu preciso setar a quantidade ( isso eu faço passando um Map copm o valor da Sigla e a quantidade ).

No jasper tem como eu pegar o valor de um objeto em alguma posicao de uma lista?

Tem sim! Embora eu nunca usei isso, acredito que seja da mesma maneira que você utilizaria normalmente…

   lista.get(4); // Para 5° elemento da lista

O ideal é que naquela lista que gera com as siglas separadas por vírgulas, vc concatenasse também a quantidade…
Ficaria assim:

Nome do cliente…| Siglas e Qde

Augusto…| GL (2) , PG (5) , AR (9), ET(8)

Tenta ai e ve o resultado…
Abraços

$F{siglas.get(0)}

Não funcionou. Recebi o seguinte erro:

Você incluiu a bean no classpath do ireport?

Parece que ele não está reconhecento o tipo do atributo siglas…
tenta fazer um printn com siglas.class para ver o que ele gera…

mas vc pensou no caso de gerar a lista fora do ireport? separando por vírgulas e colocando a qnde entre parânteses? parece ser a melhor forma…

Sua idéia é boa…eu to utilizando ela…só to levando pau pra não deixar escrever de novo se já existir o valor e atualizar a contagem dela :smiley:

[]'s

Ok! Boa Sorte… se precisar estamos aí

Abraços t+