Relatório com parametro com ireport

6 respostas
U

É o seguinte pessoal eu estava usando o ireport num programa que criei só que sem parametros e ele gerava o relatório de todo os funcionários. Só que queria selecionar um funcionário da Jtable e o relatório puxar somente esse funcionário selecionado e não todos os que existem no banco de dados. E não sei como fazer isso.

Fui no ireport e criei um paramêtro chamado Nome, valor padrão $F{Nome} do tipo String (não usei id tipo integer)
SELECT
     FUNCIONARIOS.`NOME_FUNC` AS Nome,
     FUNCIONARIOS.`MATRICULA_FUNC` AS Matrícula,
     FUNCIONARIOS.`CPF_FUNC` AS CPF,
     FUNCIONARIOS.`FUNCAO_FUNC` AS Função,
     DEPARTAMENTO.`NOME_DEPTO` AS Departamento,
     UNIDADE.`NOME_UNIDADE` AS Unidade
FROM
     `DEPARTAMENTO` DEPARTAMENTO INNER JOIN `FUNCIONARIOS` FUNCIONARIOS ON DEPARTAMENTO.`COD_DEPTO` = FUNCIONARIOS.`COD_DEPTO`
     INNER JOIN `UNIDADE` UNIDADE ON FUNCIONARIOS.`COD_UNIDADE` = UNIDADE.`COD_UNIDADE`
WHERE
FUNCIONARIOS.`NOME_FUNC` LIKE '%$P!{Nome}%'
dica abaixo do usuário leslie-UFT

Quando clico em preview no ireport ele abre uma janelinha para inserir um valor e coloco o nome do funcionário e sai que é uma beleza.

Criei um método no java que chama a classe conexão.[color=darkred] [/color][size=18] [/size]

private void imprimeRelatorio(String nome)  {
    try{
            Connection con = new Conexao().getConnection();

            String jasperFile = "./Relatorio.jasper";

            String NOME_FUNC = nome;

            HashMap parametro = new HashMap();

            parametro.put("Nome",NOME_FUNC);

            JasperPrint print = JasperFillManager.fillReport(jasperFile, parametro,con);

            JasperViewer viewer = new JasperViewer(print , true);

            viewer.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

             if (print .getPages().size() != 0) {
                         viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);
                         viewer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                         viewer.setVisible(true);
             }
            }catch(Exception erro){
                erro.printStackTrace();
            }

    }

E agora como faço para chamar no botão Listar(JButton2) para selecionar um funcionário da jtable e passar o relatório apenas do funcionário selecionado?
[img]http://img821.imageshack.us/img821/9148/telal.jpg[/img]
Estou usando Netbeans deve chamar pelo evento-> action-> actionperformed ou eventos->mouse->MouseClicked?
Dá para fazer o paramêtro sem usar id integer como acima apenas com o nome string?
Qualquer sugestão para completar o código abaixo será bem vinda?

jTable.getSelectedRow();
imprimeRelatorio();

6 Respostas

L

Brother é o seguinte, na parte da linha do seu código aonde tem

SELECT FUNCIONARIOS.`NOME_FUNC` AS Nome, FUNCIONARIOS.`MATRICULA_FUNC` AS Matrícula, FUNCIONARIOS.`CPF_FUNC` AS CPF, FUNCIONARIOS.`FUNCAO_FUNC` AS Função, DEPARTAMENTO.`NOME_DEPTO` AS Departamento, UNIDADE.`NOME_UNIDADE` AS Unidade FROM `DEPARTAMENTO` DEPARTAMENTO INNER JOIN `FUNCIONARIOS` FUNCIONARIOS ON DEPARTAMENTO.`COD_DEPTO` = FUNCIONARIOS.`COD_DEPTO` INNER JOIN `UNIDADE` UNIDADE ON FUNCIONARIOS.`COD_UNIDADE` = UNIDADE.`COD_UNIDADE` WHERE [b] FUNCIONARIOS.`NOME_FUNC` LIKE $P!{Nome} [/b]
Mude para:
FUNCIONARIOS.NOME_FUNC ILIKE '%$P!{Nome}%'
No PostgreSQL, ILIKE para ele buscar o dado sem levar em consideração Case Sensitive.

U

Obrigado pela dica, testei e funcionou perfeitamente basta colocar o nome do funcionário e ele gera o relatório apenas para aquele funcionário.

Mas o maior problema é descobrir como chamar esse relatório quando clico e seleciono um funcionário da jtable e visualizar o relatório.
Alguém pode ajudar pelo que já tentei acima.

U

Alguém???

U

Bom consegui resolver meu problema, agora consigo gerar o relatório completo ordenado por ordem alfabética num botão, e também gerar relatório por pesquisa de nome para somente a pessoa que inserir na pesquisa noutro botão.
Com isso posso dizer que terminei meu programinha de cadastro, consulta e relatório para usar no meu serviço.
Muitas noites de labuta para corrigir os códigos e para mim foi mais complicado visto que nunca fiz faculdade e nem curso algum de programação.
Aprendi SQL na marra, e a linguagem sempre gostei de java embora tenho uma queda pelo python. Agora vou tentar enxugar meu código e fazer algumas melhorias na aparência.
Obrigado a todos.

F

Acho que isso pode ajudar:
SQL:

SELECT
     cliente.`id` AS cliente_id,
     cliente.`cnpj` AS cliente_cnpj,
     cliente.`dinicio` AS cliente_dinicio,
     cliente.`mes` AS cliente_mes,
     cliente.`nome` AS cliente_nome,
     cliente.`texto` AS cliente_texto,
     cliente.`valor` AS cliente_valor
FROM
     `cliente` cliente
where id = $P{ID}

Método:

public void relatorio() throws JRException{
        try {
         Connection con = CriaConexao.getConexao();
         HashMap parametros = new HashMap();
         parametros.put("ID",1);
         JasperPrint jp = JasperFillManager.fillReport("./jasper/subcliente.jasper", parametros, con);
         JasperViewer jv = new JasperViewer(jp);
         jv.setVisible(true);
        
        } catch (SQLException ex) {
            Logger.getLogger(novo.class.getName()).log(Level.SEVERE, null, ex);
        }
   
    }

Esse é um filtro bem básico.

R

<postei errado, perdão. Alguém pode remover isto?>

Criado 21 de novembro de 2010
Ultima resposta 2 de jun. de 2011
Respostas 6
Participantes 4