Valores não devem aparecer, porém apresentam valor 0. ("Desconto / Abatimento", "Outras Deduções", etc.)

100 views
Skip to first unread message

Daniel Maria da Silva

unread,
Aug 14, 2017, 4:58:24 PM8/14/17
to Caelum Stella User
Olá grupo,

Estou tendo um problema para implementar o uso do Stella em um projeto. O que acontece é que, segundo o banco, não é permitido que seja apresentado valor (caso não exista) nos campos abaixo do valor ("Desconto / Abatimento", "Outras Deduções", "(+) Mora / Multa" e "(+) Outros Acréscimos") como zero. Ou seja, é necessário que não seja apresentado o campo em branco. Tentei fazer essa alteração e não consegui, vendo o código fone ví que ele transforma a String em um BigDecimal, logo, aparentemente, é impossível. 

Tem alguma forma de realizar isto?
Utilizamos na empresa o banco Bradesco.
Estou utilizando a classe "Boleto" e a "GeradorDeBoleto".

Desde já agradeço! 

Rafael Piai Pimenta

unread,
Aug 14, 2017, 5:29:08 PM8/14/17
to Caelum Stella User
Daniel, 

Na época que implementei tive o mesmo problema no Bradesco.
Fiz a seguinte alteração na classe Boleto, e no arquivo de template.
Não sei se os amigos do grupo vão ter uma solução melhor.
Boleto.java
boleto-instrucoes.jrxml
boleto-padrao.jrxml

Daniel Maria da Silva

unread,
Aug 17, 2017, 10:55:01 AM8/17/17
to Caelum Stella User
Opa, valeu Rafael, dei uma olhada nos arquivos separadamente e parece que é isso mesmo.. Mas acho que estou com um problema para realizar essas modificações no projeto. Eu baixei os seus arquivos, fiz as devidas alterações usando como base o projeto do git do stella, e tentei exportar um jar do projeto "caelum-stella-boleto". Coloquei no meu projeto, inclui no build path e retirei do maven essa importação. Ao tentar rodar a aplicação ele sempre mostra o erro  

java.lang.NullPointerException
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2313)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2326)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2797)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:802)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.<init>(ContextClassLoaderObjectInputStream.java:58)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:244)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:229)
at br.com.caelum.stella.boleto.transformer.GeradorDeBoleto.<init>(GeradorDeBoleto.java:61)

A linha que ele aponta como dando erro, dentro do projeto stella-boleto é onde ele pega o template "boleto-default_instrucoes.jasper"
parametros.put("SUB_INSTRUCOES", JRLoader.loadObject(template_sub));

Porém, neste caminho existe este .jasper

Tentei com outras alternativas, baixei o Jaspersoft studio para compilar os jrxml, deixando os arquivos .jasper no mesmo diretório que os .jrxml. Mesmo erro aconteceu.
Também tentei importar todas as dependências do pom.xml do stella-boleto para o pom do meu projeto. Sem sucesso também.

Importante também ressaltar que eu havia testado com o código puro deles, sem realizar as alterações. Ou seja, apenas realizei o download e exporte o .jar 
O erro é o mesmo... Alguém saberia me apontar o erro?

Rafael Piai Pimenta

unread,
Aug 17, 2017, 12:10:41 PM8/17/17
to Caelum Stella User
Daniel,

Tem um tempo já que fiz isso, então posso estar esquecendo de algo.
Mas se não estou enganado é assim:

1 - Após alterar o jrxml, deve compilar mesmo e gerar o .jasper (Pelo menos se estiver usando assim, se não estou enganado tem uma forma de usar o aquivo jrxml, mas não tenho certeza)
2 - executei o comando: mvn install -Dmaven.test.skip para criar um novo jar com as alterações do código de retorno do BigDecimal
3 - No pom do meu projeto, adicionei da seguinte forma, passando a versão SNAPSHOT gerada anteriormente:

<dependency>
<groupId>br.com.caelum.stella</groupId>
<artifactId>caelum-stella-core</artifactId>
<version>${caelum-stella.version}</version>
</dependency>
<dependency>
<groupId>br.com.caelum.stella</groupId>
<artifactId>caelum-stella-boleto</artifactId>
<version>${caelum-stella.version}</version>
</dependency>

No meu caso o template pode ser alterado pelo usuário (suporte), e depois ele faz um upload do arquivo via sistema. Ai eu passo a template via código, no momento de gerar o boleto:

StringBuilder fileName = new StringBuilder();
fileName.append(Config.getDiretorioWorkDir() + Config.DIRETORIO_BOLETO);
fileName.append(String.format(FORMAT_NOME_BOLETO, this.carteiraCobranca.getConta().getAgencia().getBanco().getCodigo(), this.numeroDocumento));

//geração do boleto com template personalizada
String reportPath = String.format(CarteiraCobranca.DIRETORIO_ARQUIVO_TEMPLATE_JASPER, this.carteiraCobranca.getTemplateBoleto());
String reportPathInstrucoes = String.format(CarteiraCobranca.DIRETORIO_ARQUIVO_TEMPLATE_JASPER, CarteiraCobranca.TEMPLATE_BOLETO_INSTRUCOES);

Map<String, Object> parametros = new HashMap<String, Object>();
parametros.put("SUB_INSTRUCOES", JRLoader.loadObject(new FileInputStream(reportPathInstrucoes)));

GeradorDeBoleto gerador = new GeradorDeBoleto(new FileInputStream(reportPath), parametros, boleto);
gerador.geraPDF(fileName.toString());

Espero que te ajude.
Reply all
Reply to author
Forward
0 new messages