Bom dia. Um de nossos clientes que emitem boleto pelo Banco do Brasil está tendo problemas ao tentar imprimir os boletos quando ele não informa valor de juros diários, ou seja, quando o campo ValorMoraJuros recebe zero.
Ao tentar imprimir, o sistema reporta a seguinte mensagem: "Código de Mora/Juros informado não é permitido para este banco!".
Verificando o manual do Banco do Brasil (layout 240), vimos que a posição referente ao código de mora/juros é a 118 do segmento P. Segundo o manual, esta posição aceita os seguintes valores:
1 - Valor por Dia
2 - Taxa Mensal
3 - Isento
No método GerarRegistroTransacao240 da unit ACBrBancoBrasil temos o seguinte:
IfThen(ValorMoraJuros > 0, '1', '3') + // 118 - Código de juros de mora: Valor por dia
Analisando a linha acima, concluímos que se for informado um valor para os juros, a posição 118 vai receber "1", senão vai receber "3". Ambos (1 e 3) são valores aceitos, de acordo com o manual.
No método TACBrBancoClass.create da unit ACBrBoleto temos o seguinte:
fpCodigosMoraAceitos := '12';
Logo, para todos os bancos, os valores aceitos são: 1 e 2. Como o sistema está tentando passar "3" para esse campo, a mensagem de erro relatada pelo cliente está sendo exibida.
A solução que encontramos foi acrescentar o valor "3" no campo fpCodigosMoraAceitos, mas apenas na implementação que há na unit ACBrBancoBrasil. Dessa maneira.
constructor TACBrBancoBrasil.create(AOwner: TACBrBanco);
begin
inherited create(AOwner);
fpDigito := 9;
fpNome := 'Banco do Brasil';
fpNumero := 001;
fpTamanhoMaximoNossoNum := 0;
fpTamanhoConta := 12;
fpTamanhoAgencia := 4;
fpTamanhoCarteira:= 2;
fpCodigosMoraAceitos := '123';
end;
Segue em anexo a unit alterada para análise.
ACBrBancoBrasil.pas