Bom dia meus caros amigos,
Estou necessitando de uma ajuda no que diz respeito a construção de um parâmetro no iReport.
Foi construída uma classe no netbeans chamada MarcarExame.java, e nessa classe existe um método que faz um cálculo da data de nascimento para aparecer
a idade do paciente. Segue código abaixo:
[code]public void preencherTela(){
java.text.SimpleDateFormat formatador = new java.text.SimpleDateFormat(“dd/MM/yyyy”);
Date dataNasc = dataNascPaciente_bco;
dtNasc.setText(formatador.format( dataNasc ));
int idade = dataHoje.getYear() - dataNasc.getYear();
idadePaciente.setText(String.valueOf(idade)+" anos");
show();
telaPreenchida = true;
}[/code]
Abaixo está o método para chamar o relatório:
[code]private void visualisarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try{
Connection con = new Facade().getConnection();
java.util.HashMap parametros = new java.util.HashMap();
JasperPrint jp = JasperFillManager.fillReport("./jasper/Mapatrab.jasper", parametros, con);
JasperViewer jrv = new JasperViewer (jp, false);
jrv.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}[/code]
Como faço para usar o procedimento de cálculo da idade que está acima trabalhando com parâmetros no iReport. Por exemplo: O nome do campo do banco de dados
criada pela Query Design é PACIENTE_DATA_NASC. Clicando com botão direito do mouse e optando por Edit Expression, visualizo o nome desse campo. Pergunto:
- Como faço para criar o parâmetro idade no iReport?
- O método de cálculo da idade será feita somente na aplicação do Netbeans?
- O método de cálculo da idade também será feito no parâmeto do iReport?
Peço por gentileza que me informe o passo a passo desse procedimento
Desde já agradeço,
Muito obrigado,
Elcio
Bom dia caros amigos,
Através da ajuda de um amigo, o mesmo passou um parâmetro para conversão da data de nascimento em idade, mas quando coloco essas linhas no edit expression do iReport aparece somente os sinais de divisão (/) em vermelho, então quando clico em view não aparece o relatório e por sua vez não funciona o código por causa do erro. Abaixo segue o código:
((((($F{datanascimento}.getTime() - new Date().getTime()) / 1000) / 60) /
60) / 24) / 365
Se alguém puder me ajudar agradeço muito
Muito obrigado,
Elcio
Olá webelcio!
Eu tbem tive vários problemas com conversões no iReport, então eu fiz as conversões no Java e passei já convertido pro iReport. Foi bem mais simples.
Espero que seja isso que vc quer!
[ ] 's
Boa tarde!
Os sinais de operações aritméticas nao funcionam dessa forma no ireport, veja abaixo:
divisão “/” = .divide(java.math.BigDecimal,int,java.math.RoundingMode)
multiplicação “*” = .multiply(java.math.BigDecimal)
soma “+” = .add(java.math.BigDecimal)
subtração “-” = .subtract(java.math.BigDecimal)
((((($F{datanascimento}.getTime().subtract(new Date().getTime()).divide(BigDecimal.valueOf(1000),BigDecimal.ROUND_HALF_DOWN,2)BigDecimal.valueOf(60),BigDecimal.ROUND_HALF_DOWN,2)
BigDecimal.valueOf(60),BigDecimal.ROUND_HALF_DOWN,2)BigDecimal.valueOf(24),BigDecimal.ROUND_HALF_DOWN,2)BigDecimal.valueOf(365),BigDecimal.ROUND_HALF_DOWN,2)))
No ireport operações aritméticas são feitas dessa maneira, então pra facilitar crie uma classe java que faça essas conversões, e chame elas dentro do Edit Expression passando a sua data como parametro
por ex:
DateUtil.converterData($F{datanascimento})
São as opções que vc pode adotar para esses casos de conversões de datas e horas.
Att.
Boa tarde a todos e obrigado pelas as respostas. Mas ainda estou com uma dúvida:
A classe no qual devo montar no java será exatamente como está para iReport ou não?
O nome do atributo que foi criado automaticamente pela query do iReport foi PACIENTE_DATA_NASC. Pergunto. Posso usar esse atributo para ser passado como parâmetro? Por exemplo:
DateUtil.converterData($F{PACIENTE_DATA_NASC})
Dentro desse atributo já encontra-se a data que foi digitada.
Desde já agradeço,
Elcio
Bom dia caros amigos,
Consegui uma classe sobre conversão da data de nascimento para idade de um colega no próprio GUJ, segue abaixo:
[code]import java.util.Calendar;
import java.util.Date;
/**
*@Author: Diener Maick Piske
*/
public class Data {
public Data(Date data){
System.out.println(calcIdade(data));
}
public int calcIdade(Date dataNasc){
Date hoje = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(hoje);
int day1 = cal.get(Calendar.DAY_OF_YEAR);
int ano1 = cal.get(Calendar.YEAR);
cal.setTime(dataNasc);
int day2 = cal.get(Calendar.DAY_OF_YEAR);
int ano2 = cal.get(Calendar.YEAR);
int nAno = ano1 - ano2;
if(day1 < day2)
nAno--; //Ainda não completou aniversario esse ano.
return nAno;
}
public static void main(String[] args){
Calendar c = Calendar.getInstance();
c.set(1988, 2, 23); // Dia começa de 1 mesmo é normal.já o mês começa de 0 não de 1, ou seja esta data se refere ao dia 23 de março de 1988.
new Data(c.getTime());
}
[/code]
Então conforme conversa com um dos amigos, o mesmo informou que deveria passar essa classe já convertida para o edit expression do iReport, porém quando clico em view do ireport não aparece nada. O comando no edit expression ficou assim:
DateUtil.Data($F{PACIENTE_DATA_NASC})
O que estou fazendo de errado, a idade não aparece convertida no iReport.
Certo de contar com a ajuda de todos,
Elcio
Bom dia!!
Vc adicionou essa classe ao seu classpath do ireport ?
em Ferramentas -> Opções -> Ireport -> classpath
Att.
Boa tarde ManoJava,
Ainda não fiz isso, vou tentar ok.
Muito obrigado,
Elcio
Boa tarde ManoJava ou qualquer outro colega,
Entrei no netbeans em ferramentas, opções, iReport e classpath. Cliquei em Add Jar, selecionei a opção todos os arquivos e adicionei o arquivo Data.class, mas infelizmente está acontecendo a mesma coisa. Estou fazendo alguma coisa errada?
Desde já agradeço,
Elcio