Alguém sabe como eu poderia formatar no IReport, através do uso de Fórmulas, registros nos formatos CPF e CNPJ. Gostaria de usar o “Expression Editor” do IReport.
Clique com o botão direito no campo e selecione Edit Expression.
O código abaixo testa o tamanho do campo. Se for igual a 14 dígitos, formata para CNPJ, caso contrário, formata para CPF.
( $F{cpfcnpj}.length() == 14 ? ($F{cpfcnpj}.substring(0, 2) + "." + $F{cpfcnpj}.substring(2, 5) + "." + $F{cpfcnpj}.substring(5, 8) + "/" + $F{cpfcnpj}.substring(8, 12) + "-" + $F{cpfcnpj}.substring(12, 14)) : ($F{cpfcnpj}.substring(0, 3) + "." + $F{cpfcnpj}.substring(3, 6) + "." + $F{cpfcnpj}.substring(6, 9) + "-" + $F{cpfcnpj}.substring(9, 11)) )
Por favor, me informe o tipo de campo usando no BD para armazenar o numero do CPF/CNPJ e qual o banco de dados a que se refere seu exemplo.
Obrigado.
Isso funciona em qualquer BD com campo do tipo VARCHAR.
Alguem sabe com converto um campo do tipo Long para String (no IReport/Jasper), para poder usar a formula acima?
ja tentei
String.valueOf
cast para String
new String
usando toString() ocorre um erro informando q nao eh possivel fazer um cast de String para Long
e nada
Obrigado
de String para Long?? Não seria o contrário?
Bom se for esse mesmo o erro (pau ao converter de String para Long), dá uma verificada no tipo de “Classe de Expressão de Campo de Texto”. Para isso clique com o botão direito na caixa de texto, vá em Propriedades e na aba “Campo texto”. Se lá estiver marcado java.lang.Long você pode estar tendo problema não na conversão de long para String (ou seja, o toString() está funcionando), mas sim na hora que ele vai imprimir esse resultado na caixa de texto que está configurada como do tipo Long…
Para formatar o cnpj eu usei expressões regulares… O textField do cnpj ficou assim:
($P{CNPJ} != null && java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).matches())
? java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).replaceAll("$1.$2.$3/$4-$5")
: "CNPJ inválido"
Para o cpf é análogo…
[quote=mcz.raf]Para formatar o cnpj eu usei expressões regulares… O textField do cnpj ficou assim:
($P{CNPJ} != null && java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).matches())
? java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).replaceAll("$1.$2.$3/$4-$5")
: "CNPJ inválido"
Para o cpf é análogo…
[/quote]
Olá…
Para evitar problemas com relação a padronização de formatação no iReport, utilize o mesmo formatador da sua aplicação.
Faça assim na textField:
caminho.completo.da.classe.de.formatar.cnpj.da.aplicação.SeuFormatador.formatarCnpj($P{CNPJ});
Lembrando que o metodo deve ser estatico e a classe deve estar no classpath do seu iReport.
A vantagem é que se você encontrar uma melhor forma de formatar os seus dados (BrazilUtil por exemplo), vai se preciso alterar em apenas um lugar.
[]'s
JL
Na verdade, a minha idéia era só postar a “lógica” da formatação usando expressões regulares, ou seja, podendo a colocar onde o desenvolvedor quiser.
Mas de qualquer forma, é muito bom ressaltar que centralizar essas funções na aplicação é a melhor solução!! Boa!!
Mero_Aprenziz, achei muito interessante oque você disse. Não sabia que era possível.
Porém tentei fazer aqui e não deu certo.
Como que eu tenho q colocar esse caminho completo? C:/pasta1/pasta2/arquivoJAR.NomeDaClasse.NomeDoMétodo ???
E esse caminho eu coloco direto no “Expression Editor”?
Valeu!
[quote=Mero_Aprendiz][quote=mcz.raf]Para formatar o cnpj eu usei expressões regulares… O textField do cnpj ficou assim:
($P{CNPJ} != null && java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).matches())
? java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{CNPJ}).replaceAll("$1.$2.$3/$4-$5")
: "CNPJ inválido"
Para o cpf é análogo…
[/quote]
Olá…
Para evitar problemas com relação a padronização de formatação no iReport, utilize o mesmo formatador da sua aplicação.
Faça assim na textField:
caminho.completo.da.classe.de.formatar.cnpj.da.aplicação.SeuFormatador.formatarCnpj($P{CNPJ});
Lembrando que o metodo deve ser estatico e a classe deve estar no classpath do seu iReport.
A vantagem é que se você encontrar uma melhor forma de formatar os seus dados (BrazilUtil por exemplo), vai se preciso alterar em apenas um lugar.
[]'s
JL
[/quote]
Achei muito interessante oque você disse. Não sabia que era possível.
Porém tentei fazer aqui e não deu certo.
Como que eu tenho q colocar esse caminho completo? C:/pasta1/pasta2/arquivoJAR.NomeDaClasse.NomeDoMétodo ???
E esse caminho eu coloco direto no “Expression Editor”?
Valeu!