E ai galera, to com dificuldades em gerar um relatorio…
Tenho o seguinte SQL:
SELECT
contaspagar."descricao" AS descricao,
contaspagar."numero_fatura" AS numero_fatura,
contaspagar."valor" AS valor,
contaspagar."vcto" AS vcto,
contaspagar."codigo_contaspagar" AS codigo_contaspagar,
contaspagar."codigo_plc3" AS codigo_plc3,
plc3."codigo_plc3" AS codigo_plc3,
plc3."nome" AS plc3_nome
FROM
"public"."contaspagar" contaspagar, "public"."plc3" plc3
WHERE
contaspagar."codigo_plc3" = plc3."codigo_plc3"
e quando vou gerar o relatorio aparece o seguinte erro:
net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : plc3_nome
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:821)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:785)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1482)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:126)
Caused by: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : plc3_nome
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:821)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:785)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1482)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:126)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:613)
at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
at net.sf.jasperreports.engine.fill.JRThreadSubreportRunner.run(JRThreadSubreportRunner.java:205)
... 1 more
Caused by: java.lang.NoSuchMethodException: Unknown property 'plc3_nome' on class 'class modelo.ContasPagar'
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1322)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:770)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:846)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
... 12 more
Alguem sabe o porquê disso?
[]'s
que eu me lembre esse erro é que ele não esta encontando esse "plc3_nome" no seu TO por exemplo
[code]relatorioFornecedorTO.setNome(rs.getString("nome"));
relatorioFornecedorTO.setEndereco(rs.getString("endereco"));[/code]
TO do relátorio
[code]private String Nome;
private String Endereco;
public String getNome() {
return Nome;
}
public void setNome(String nome) {
Nome = nome;
}
public String getEndereco() {
return Endereco;
}
public void setEndereco(String endereco) {
Endereco = endereco;
}[/code]
AI no seu relátorio vc coloca outro nome de uma field desconheçida que não tenha em seu TO ele vai reclamar e dar o erro, pois ele não vai encontar do além essa cara...
bom não sei resolve isso ....pelo que eu entendi!
que eu me lembre esse erro é que ele não esta encontando esse “plc3_nome” no seu TO por exemplo
relatorioFornecedorTO.setNome(rs.getString("nome"));
relatorioFornecedorTO.setEndereco(rs.getString("endereco"));
TO do relátorio
[code]private String Nome;
private String Endereco;
public String getNome() {
return Nome;
}
public void setNome(String nome) {
Nome = nome;
}
public String getEndereco() {
return Endereco;
}
public void setEndereco(String endereco) {
Endereco = endereco;
}[/code]
AI no seu relátorio vc coloca outro nome de uma field desconheçida que não tenha em seu TO ele vai reclamar e dar o erro, pois ele não vai encontar do além essa cara…
bom não sei resolve isso …pelo que eu entendi!
O problema pode ser uma unica coisa, falta do campo expecificado.
Onde:
1º pode ser no relatorio que o $F{Field} seja diferente do especificado,
2º no sql o nome esteja diferente do $F{Field}
3º se estiver usando Collection, seu objeto pode ter nome diferente do especificado
Hum… cara não entendi bm essa parte do TO 
deixa eu te passar como eu fazendo :
Eu faço uma consulta no banco e nela me retorna uma lista de ContasPagar q eu envio para um JRBeanCollectionDataSource
List<ContasPagar> lcp;
JRBeanCollectionDataSource BCD1 = new JRBeanCollectionDataSource(lcp);
Depois eu passo por MAP essa bean:
ht.put("contas", BCD1);
JasperPrint impressao = JasperFillManager.fillReport(System.getProperty("user.dir") + "/jasper/ContasPagar.jasper", ht);
[]'s
[quote=TheKill]
3º se estiver usando Collection, seu objeto pode ter nome diferente do especificado[/quote]
Eu estou usando Collection, e os nomes estao iguais:
public class ContasPagar
@ManyToOne
@JoinColumn(name="codigo_plc3")
private PLC3 codigo_plc3;
e n SQL ta igual o nome…
[quote=DeGuedes][quote=TheKill]
3º se estiver usando Collection, seu objeto pode ter nome diferente do especificado[/quote]
Eu estou usando Collection, e os nomes estao iguais:
public class ContasPagar
@ManyToOne
@JoinColumn(name="codigo_plc3")
private PLC3 codigo_plc3;
e n SQL ta igual o nome…[/quote]
net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : plc3_nome
Vou reformular minha pergunta:
Tenho a classe COntasPagar:
Dentro dela tenho a referencia da tabela PLC3
@ManyToOne
@JoinColumn(name="codigo_plc3")
private PLC3 codigo_plc3;
para jogar no relatorio preciso pegar o PLC3.getNome… e t fazendo o seguinte select:
SELECT
contaspagar."descricao" AS descricao,
contaspagar."numero_fatura" AS numero_fatura,
contaspagar."valor" AS valor,
contaspagar."vcto" AS vcto,
contaspagar."codigo_contaspagar" AS codigo_contaspagar,
contaspagar."codigo_plc3" AS codigo_plc3,
plc3."codigo_plc3" AS plc3_codigo_plc3,
plc3."nome" AS plc3_nome
FROM
"public"."contaspagar" contaspagar, "public"."plc3" plc3
WHERE
contaspagar."codigo_plc3" = plc3."codigo_plc3"
Coom isso a seguinte excessão :
Caused by: java.lang.NoSuchMethodException: Unknown property 'plc3_nome' on class 'class modelo.ContasPagar'
ele ta tentando pegar o nome dentro da tabela ContasPagar, mas ele deve pegar esse Nome dentro da tabela PLC3
e eh isso q t querendo saber, como eu digo pro Ireport q ele deve procurar o campo Nome na tabela PLC3 e nao em contas a pagar
isso eu acho que nao dá…
vc ta mandando uma collection para o relatorio e quer que ele use SQL ? o correto seria você alterar OU o relatorio para pegar o nome que esta no teu objeto ou vice-versa
É o mesmo que eu dizer o seguinte:
Relatorio campo $F{Cod_Cliente}
Java objeto Cliente:
private int codigoCliente;
…
Envio para o relatorio uma collection Cliente,
e o relatorio tenta pegar Cod_Cliente do meu objeto Cliente… Pergunto, ele vai encontrar Cod_Cliente em Cliente?
[quote=TheKill]isso eu acho que nao dá…
vc ta mandando uma collection para o relatorio e quer que ele use SQL ? o correto seria você alterar OU o relatorio para pegar o nome que esta no teu objeto ou vice-versa[/quote]
E qual serio o método certo para mim usar com Collection?
[]'s
Método certo?
Apenas o objeto deve estar igual no relatorio…
Nao se usa método… No relatorio vc cria o Field Codigo e no Objeto vc tem um atributo chamado Codigo, entendeu?
Seguinte cara, eu usei isso no field e funcionou:
$F{codigo_plc3.nome}
Seria um ContasPagar.getCodigo_plc3.getNome();
Simples assim!
Obrigado
[]'s
Firmeza 
Foi nada nao, pode fazer a gentileza de alterar o primeiro topico marcando [Resolvido]