el reporte tiene cuatro campos (fields) ARTICULO,DESCRIPCION,VARIEDAD,SERIE
y comienzo construyendo una clase llamada ArticuloInventario con sus respectivos getters y setters
Código:
después realizo una consulta y construyo mi objeto y lista y lo mando a mostrar el reporte con una rutina llamada MostrarReporte con el datasource como parámetro public ArticuloInventario() { } public ArticuloInventario(String ARTICULO,String DESCRIPCION,String VARIEDAD,String SERIE){ this.ARTICULO = ARTICULO; this.DESCRIPCION = DESCRIPCION; this.VARIEDAD = VARIEDAD; this.SERIE = SERIE; } public void SetARTICULO(String ARTICULO){ this.ARTICULO = ARTICULO; } public String getARTICULO(){ return ARTICULO; } public void setDESCRIPCION(String DESCRIPCION){ this.DESCRIPCION = DESCRIPCION; } public String getDESCRIPCION(){ return DESCRIPCION; } public void setVARIEDAD(String VARIEDAD){ this.VARIEDAD = VARIEDAD; } public String getVARIEDAD(){ return VARIEDAD; } public void setSERIE(String SERIE){ this.SERIE = SERIE; } public String getSERIE(){ return SERIE; } }
Código:
public void BuscarArticulo() throws SQLException{ String Valor = txtArticulos.getText(); ConexionMySQL ConexionMysql = new ConexionMySQL(); Connection cn = ConexionMysql.Conectar(); try{ Statement stArticulos = cn.createStatement(); ResultSet rsArticulos = stArticulos.executeQuery("select t1.ID_ART,t1.ARTICULO,t1.DESCRIPCION,t2.VARIEDAD,t3.SERIE,t4.TALLA,t5.CANTIDAD from Articulos as t1 left outer join VARIEDADES as t2 on t1.ID_VAR = t2.ID left outer join SERIES_CORRIDAS as t3 on t1.ID_SERTAL = t3.ID_CORRIDA left outer join BC_ARTICULOS as t4 on t1.ID_ART = t4.ID_ART left outer join INVENTARIO_ACTUAL as t5 on t4.BARCODE = t5.BARCODE where t1.ARTICULO in ('" + Valor.replace(",","','") + "')"); Collection ListaArticulos = new ArrayList(); while(rsArticulos.next()){ ArticuloInventario ArticuloInv = new ArticuloInventario(rsArticulos.getString("ARTICULO"),rsArticulos.getString("DESCRIPCION"),rsArticulos.getString("VARIEDAD"),rsArticulos.getString("SERIE")); ListaArticulos.add(ArticuloInv); RegistroDetalle [0] = rsArticulos.getString("ID_ART"); RegistroDetalle [1] = rsArticulos.getString("ARTICULO"); RegistroDetalle [2] = rsArticulos.getString("DESCRIPCION"); RegistroDetalle [3] = rsArticulos.getString("VARIEDAD"); RegistroDetalle [4] = rsArticulos.getString("SERIE"); RegistroDetalle [5] = rsArticulos.getString("TALLA"); RegistroDetalle [6] = rsArticulos.getString("CANTIDAD"); ModeloArticulos.addRow(RegistroDetalle); } JRBeanCollectionDataSource DataSource = new JRBeanCollectionDataSource(ListaArticulos); MostrarReporte(DataSource); } catch(Exception e){ JOptionPane.showMessageDialog(null,e); } finally{cn.close();} }
y por ultimo este es mi rutina para mostrar el reporte
Código:
public void MostrarReporte(JRBeanCollectionDataSource RSDS ){ JasperReport ReporteInventario; JasperPrint PrevioReporte; try{ URL url = this.getClass().getResource("ConsultaInventario.jasper"); ReporteInventario = (JasperReport)JRLoader.loadObject(url); PrevioReporte = JasperFillManager.fillReport(ReporteInventario,null,RSDS); JasperViewer.viewReport(PrevioReporte); } catch(Exception e){ JOptionPane.showMessageDialog(null, e); } }
al ejecutar la aplicación me envía el siguiente mensaje de error
net.sf.jasperreports.engine.JRException : Error retrieving field value from bean: ARTICULO
necesito pasar los datasource asi debido a que creando la consulta en el ireport no me deja ejecutar el select * from ARTICULOS where articulo in (' Parametro')
, extrañamente si ejecuto select * from ARTICULOS where articulo in ('28-wilson') es decir sin pasarle parámetros si me permite ejecutar la sentencia pero si reemplazo el articulo por el parámetro de entrada me envía un error , si puedieran ayudarme a entender el error en cualquiera de ambos casos estare muy agradecido gracias