Ir para conteúdo
  • Cadastre-se

dev botao

Impressão boleto Banco do Brasil carteia 6 digitos


  • Este tópico foi criado há 3116 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde.

Tenho um cliente que acabei de implantar um sistema, e o mesmo utiliza carteira do Banco do Brasil, de convênio de 6 dígitos carteira número 18. Essa carteira o nosso número é composto de 17 dígitos e tem o número 21 fixo como parte final do nosso número. Essa carteira é sem registro.

Atualmente, a classe do Banco do Brasil somente trata nossos números até no máximo com 11 dígitos.

Devido a isso, tive que fazer duas alterações em duas funções.

Segue abaixo as correções que efetuei, caso acharem necessário implementar essas alterações na classe do Banco, ou se alguém precisar:

function TACBrBancoBrasil.FormataNossoNumero(const ACBrTitulo :TACBrTitulo): String;

var

ANossoNumero, AConvenio : string;

aCarteira: LongInt;

begin

with ACBrTitulo do

begin

AConvenio := ACBrBoleto.Cedente.Convenio;

ANossoNumero := trim(inttostr(strtoint(NossoNumero)));

aCarteira := StrToIntDef(Carteira,0);

if (aCarteira = 16) or (aCarteira = 17) or (aCarteira = 18) then

begin

if (ACBrTitulo.Carteira = '18') and (Length(AConvenio) = 6) then

ANossoNumero := padR(ANossoNumero, 17, '0')

else if Length(AConvenio) <= 4 then

ANossoNumero := padR(AConvenio, 4, '0') + padR(ANossoNumero, 7, '0')

else if (Length(AConvenio) > 4) and (Length(AConvenio) <= 6) then

ANossoNumero := padR(AConvenio, 6, '0') + padR(ANossoNumero, 5, '0')

else if Length(AConvenio) = 7 then

ANossoNumero := padR(AConvenio, 7, '0') + padR(ANossoNumero, 10, '0');

end

else

ANossoNumero := padR(AConvenio, 7, '0')+ padR(ANossoNumero, 11, '0');

end;

Result := ANossoNumero;

end;

function TACBrBancoBrasil.MontarCodigoBarras(const ACBrTitulo : TACBrTitulo): String;

var

CodigoBarras, FatorVencimento, DigitoCodBarras :String;

ANossoNumero, AConvenio: string;

begin

AConvenio := ACBrTitulo.ACBrBoleto.Cedente.Convenio;

ANossoNumero := FormataNossoNumero(ACBrTitulo);

{Codigo de Barras}

with ACBrTitulo.ACBrBoleto do

begin

FatorVencimento := CalcularFatorVencimento(ACBrTitulo.Vencimento);

if (ACBrTitulo.Carteira = '18') and (Length(AConvenio) = 6) then

begin

CodigoBarras := IntToStrZero(Banco.Numero, 3) +

'9' +

FatorVencimento +

IntToStrZero(Round(ACBrTitulo.ValorDocumento * 100), 10) +

AConvenio + ANossoNumero + '21';

end

else

begin

CodigoBarras := IntToStrZero(Banco.Numero, 3) +

'9' +

FatorVencimento +

IntToStrZero(Round(ACBrTitulo.ValorDocumento * 100), 10) +

IfThen((Length(AConvenio) = 7), '000000', '') +

ANossoNumero +

IfThen((Length(AConvenio) < 7), padR(Cedente.Agencia, 4, '0'), '') +

IfThen((Length(AConvenio) < 7), padR(Cedente.Conta, 8, '0'), '') +

copy(ACBrTitulo.Carteira, 1, 2);

end;

DigitoCodBarras := CalcularDigitoCodigoBarras(CodigoBarras);

end;

Result:= copy( CodigoBarras, 1, 4) + DigitoCodBarras + copy( CodigoBarras, 5, 44) ;

end;

Obs: Esse cliente meu emite mais de 4.500 boletos/mês. E dessa forma, tudo correu normal.

Atenciosamente.

Jéter Rabelo Ferreira

------------------------------------------------

Jéter Rabelo Ferreira
Campestre/MG

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia Jéter.

Estaremos implementando essa correção. Se vc puder por favor anexar aqui a unit do BB seria melhor.

Att

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Bom dia Juliana, atualizei o acbr com essas alterações e tive problema com o campo nosso numero, antes eu passava somente a sequencia do nosso numero e o código do cedente o próprio componente se encarregava de unir os dos campos para formar o "nosso número" completo, agora com essa nova versão isso não está ocorrendo, ele esta preencho com (0)zeros a esquerda. gostaria de saber se é assim em todos os outros bancos(pois por enquanto trabalho apenas com o banco do brasil)... se for isso terei que gerar o nosso numero formatado né ?

Obs: Se for assim mesmo não tem a necessidade e existir o método "FormataNossoNumero", estou certo ?

De qualquer forma precisei voltar a versão antiga pois meus clientes quase me mataram....

mas mesmo assim gostaria de saber a forma correta que tenho que trabalhar....

muito obrigado pela atenção...

Att.

Maicon da Silva Evangelista

Link para o comentário
Compartilhar em outros sites

  • Administradores

Boa tarde Maicon.

Qual é a carteira dos seus clientes e o tamanho do convênio?, pois esta alteração afeta apenas quem tenha essa condição de Carteira 18 e convenio com 6 caracteres...para que possamos verificar se a regra esta correta.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

Boa tarde.

Essa alteração que a Juliana colocou no Banco do Brasil, foi eu que solicitei.

Porque o meu cliente emite boletos de carteira 18 Convenio 6 digitos e essas informações eu peguei de um arquivo do próprio Banco do Brasil.

Procurei o arquivo aqui e não consegui achar, acho que infelizmente eu o exclui indevidamente.

Essa carteira é de emissão do próprio cliente, não é enviado arquivo de remessa e o retorno é o CNAB400.

Juliana, o componente RLBoleto, do qual op ACBrBoleto herdou algumca coisa, tinha uma propriedade para a geração de nosso número.

/////////////////////////////////////

{Define o layout do nosso número}

TLayoutNN = ({Nosso Número com 11 digitos}

lnN11,

{Nosso Número com 16 digitos}

lnN16,

{Nosso Número com 17 digitos}

lnN17,

{Convênio com 7 digitos e Nosso Número com 10 digitos}

lnC7_N10,

{Convênio com 4 digitos e Nosso Número com 7 digitos}

lnC4_N7,

{Convênio com 6 digitos e Nosso Número com 5 digitos}

lnC6_N5);

//////////////////////////////

Isso somente era utilizado em alguns bancos, dos quais um era o Banco do Brasil.

Não seria o caso de pensar a respeito disso? Implementar uma propriedade a mais para que, caso haja necessidade, o usuário modifique a geração do Nosso Número?

Diga o que acha a respeito e, caso haja um consenso, posso ajudar a implementar isso.

Aguardo respostas.

Atenciosamente.

Jéter Rabelo Ferreira

------------------------------------------------

Jéter Rabelo Ferreira
Campestre/MG

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Fundadores

Provavelmente isso será realmente necessário... Vou estudar com a Juliana como podemos implementar...

É um saco esse tal de "padrão" FEBRABAN... simplesmente não existe padrão ;)

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Olá Daniel.

Com certeza, de padrão não existe absolutamente nada.

Para você ter idéia, já estou com problemas na unit da CEF.

A Unit implementada pelo ACBr deu erro num cliente meu. Ao fazer uma conferência com a unit do RLBoleto, eu verifiquei que a geração do nosso número era complemtamente diferente. Aliás, no RLBoleto existem 3 units da CEF, nomeadas conforme abaixo:

> RLCob104 (padrão e funciona com meus clientes)

> RLCob104_SIGCB (O ACBr é parcialmente igual a essa)

> RLCob_SINCO

Com certeza esse é outro banco que precisamos verificar como vai ficar, pois, para mim, devido a urgências com prazo de entrega, tive que setar o Flag em meus programas para que, no caso da CEF, utilizarem o RLBoleto.

Conforme dito em post anterior, estou a disposição para ajudar no que for preciso.

Atenciosamente.

Jéter Rabelo Ferreira

------------------------------------------------

Jéter Rabelo Ferreira
Campestre/MG

Link para o comentário
Compartilhar em outros sites

  • 5 meses depois ...
  • 3 anos depois...

Olá Daniel Simoes, gostaria de colaborar com uma situação que me deparei:

 

Desenvolvi um sistema de geração de boletos e remessa para para Caixa Econômica e Banco Brasil, as remessas para a Caixa Econômica estão ok, porém quando fizemos uns testes de remessa para o Banco do Brasil, o mesmo me retornou uma avaliação do arquivo de remessa e solicitou que eu fizesse uns ajustes, até aí blz. Quando fui olhar do que se tratava o AcbrBancoBrasil.pas estava gerando a remessa de forma de acordo com outro manual disponível do Banco do Brasil, vê só abaixo o email

 

P.S - Por favor, dá uma olhadinha no que vcs teem ai, talvez seja até um erro meu, não tá de repente com o acbrBoleto atualizado, tá? Se vcs já se depararam com essa situação, peço desculpas pelo tempo tomado!  :cool:

 
EMAIL DO BANCO
 
Análise do arquivo:   
 
ARQUIVO REMESSA_03112014_152333
=========================================================================
 Header de Arquivo                > Lote 0000
----------------------------------------------------------------------------------------------------
 
Posições 033 a 052: Preencher com o código do convênio: '002688032001417019  ' 
 
 
====================================================================================================
 Header de Lote                   > Lote 0001
----------------------------------------------------------------------------------------------------
 
Posições 034 a 053: Preencher com o código do convênio: '002688032001417019  '
 
 
====================================================================================================
 Segmento P                       > Lote 0001
----------------------------------------------------------------------------------------------------
 
Posições 106 a 106: Preencher com branco
 
 
Fiz as alterações de acordo com o solicitado do banco.
Enfim, não quero dizer que tem algo de errado no AcbrBancoBrasil.pas, queria apenas informar a vcs que, existem dois manuais do banco do Brasil, um da forma como vcs criaram e outro da forma como me foi solicitado. A ideia aqui é só pra alertar vcs, blz? ;)
Editado por Poliany Tabosa
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

estou com erro na linha digital do meu acbr como corrigir,  isso boleto sendo gerado no banco do brasil

 

essa e a linha digital que esta gerando

 

00192.69281 89000.100001 117.2 1 62390000002000 "MEU ERRO ESTA NO VERMELHO ESTA FALTANDO ALGO

00190.50095 40144.816069 06809.350314 3 37370000000100

 

a configuração do banco do brasil é ex. boleto

00190.50095 40144.816069 06809.350314 3 37370000000100

 

Alguem tem alguma ideia de como corrigir isso ?????

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Percebi o mesmo problema no meu sistema usando ACBrBoleto para Banco do Brasil, carteira 18, cod.convênio de 6 posições.

 

Fiz várias alterações a fim de adaptar meu sistema, mas em vão. Tive que debugar o código fonte do ACBr e acho que encontrei um erro de lógica.

 

Para carteira 18 e cód. convênio de 6 posições, há 2 formatações de Nosso Número, sendo:

 

a) 17 posições livres. Onde teria que sair o código "21" na posição 43 e 44 do código de barras; ACBr acusa erro de tamanho máximo de NN de 11 posições (pois considera apenas o sequencial e neste caso, deveria considerar todas as posições pois seria livre.

 

B) Nosso número de 11 posições + DV formado por 6 digitos do código do cedente + 5 digitos do sequencial do cliente + DV. Até certo ponto o sistema gera o NN corretamente, porém após gerar o NN completo (cod.cedente + sequencial + dv) em determinado momento verifica novamente o tamanho máximo do NN, onde retorna 12 (NN já formado e completo) mas deveria ser 5 (apenas parte do sequencial) como no primeiro momento, ai já começa a processar e forma novamente o NN conforme o item "a" que citei, mas agora com 17 posições, tendo o cód.cedente junto. Acho que o momento que dá problema é quando forma o código de barras, que chama novamente a função que verifica o tamanho do NN.

 

A correção acho que consiste em mudar a variável wTamNossoNum de local nas procedures e funções como propriedade, sendo setada apenas no primeiro momento e sendo usada pelas demais procedures. 

 

O problema ocorre devido a passar para o componente apenas o sequencial do NN e depois ele formar o NN completo e continuar chamando a função que retorna o tamanho do NN, mas após ter gerado NN completo, onde já retorna tamanho total.

Link para o comentário
Compartilhar em outros sites

Só consegui resolver alterando o código fonte do ACBrBoleto e ACBrBancoBrasil da seguinte forma:

 

1. Adicionei propriedade "SemRegistro" tipo boolean na classe TACBrBanco

 

property SemRegistro: boolean read fSemRegistro write fSemRegistro;

 

No meu sistema, adicionei um campo checkbox "Sem registro" na configuração da conta de cobrança. Na conta do Banco do Brasil, se carteira for 16 ou 18 e sem registro, seto o campo em true.

 

Ao setar as propriedades do componente em runtime, seto o referido campo.

 

2. Alterei a rotina "CalcularTamMaximoNossoNumero" na unit ACBrBancoBrasil (alterações estão em negrito):

 

function TACBrBancoBrasil.CalcularTamMaximoNossoNumero(
  const Carteira: String; NossoNumero : String = ''): Integer;
var
  wCarteira   : String;
  wTamConvenio: Integer;
begin
   Result := 12; //10; { Alterado para compatibilizar o tamanho do NN final gerado }
 
   if (ACBrBanco.ACBrBoleto.Cedente.Convenio = '') then
      raise Exception.Create(ACBrStr('Banco do Brasil requer que o Convênio do Cedente '+
                                     'seja informado.'));
 
   if (Carteira = '') then
      raise Exception.Create(ACBrStr('Banco do Brasil requer que a carteira seja '+
                                     'informada antes do Nosso Número.'));
 
   wCarteira:= Trim(Carteira);
   wTamConvenio:= Length(Trim(ACBrBanco.ACBrBoleto.Cedente.Convenio));
 
   { Alterado, antes era "Length(trim(NossoNumero)) > 10", 
     no inicio fica certo, pois recebia apenas o sequencial do NN,
     após gerar NN completo com cod.cedente 12 digitos, atingia condição errada, como 17, deixando o NN errado }
 
   if ACBrBanco.SemRegistro and (wTamConvenio = 6) and
      ((wCarteira = '16') or (wCarteira = '18')) then
      Result:= 17
   else if (wTamConvenio <= 4) then
      Result := 12 //7 { alterado, não considera o tamanho do NN final completo, onde campo cod.cedente é adicionado ao sequencial do NN }
   else if (wTamConvenio > 4) and (wTamConvenio <= 6) then
      Result := 12 //5 { idém }
   else if (wTamConvenio = 7) then
      Result := 17; //10; { idém }
 
Link para o comentário
Compartilhar em outros sites

Mesmo com código fonte acima, acabei caindo em outro problema, voltei ao código original, acho que a causa do problema é outra: a checacem do tamanho do campo Nosso Número em 2 momentos distintos:

 

1. No primeiro momento, passa-se para o componente apenas o sequencial do NN e ele calcula o tamanho máximo do NN somente para a parte sequencial dele.

 

2. Após gerar o NN completo, em alguns casos, são adicionados carteira (bradesco), código do cedente (banco do brasil, carteira 18 com registro), DV, barra, e/ou traço, etc. ao NN e em determinado momento, o componente faz a validação do tamanho do NN completo mas com base no tamanho apenas da parte sequencial do NN, acusando erro de tamanho máximo excedido.

 

Exemplo Bradesco:

 

NN completo = CC SSSSSSSSSS D    C = carteira (2)     S = sequencial  (11)   D = DV (1)    Tamanho total = 14 (só números)

 

1. Componente seta tamanho máximo como 11 (somente parte do sequencial)

2. Gera NN completo conforme especificação acima

3. Na validação de tamanho com NN completo acusa erro, pois NN tem 14 digitos e tamanho máximo está definido como 11

 

Exemplo BB convênio com 4 posições, sem registro:

 

NN completo = SSSSSSSSSSSSSSSSS      S = sequencial (17)    Tamanho total = 17 (só números, sem DV sem mais nada)

 

1. Se passar sequencial do NN ao componente com tamanho menor que 10, seta tamanho máximo como 05 (somente parte do sequencial, mas que seria tamanho máximo da parte sequencial da carteira com registro)

2. Gera NN completo conforme especificação acima com 17 posições, recalculando o tamanho máx. do NN para 17 agora.

3. Na validação de tamanho com NN completo passa, tendo em vista que o tamanho do NN completo é maior que 10 (código que calcula tamanho máximo do sequencial do NN)

 

Exemplo BB convênio com 4 posições, com registro:

 

NN completo = CCCCCC SSSSS D    C = Cod.convenio (6)    S = sequencial (5)    D = DV (1)   Tamanho total = 12 (só números)

 

1. Componente seta tamanho máximo da parte do sequencial do NN como 5.

2. Gera NN completo conforme especificação acima com 12 posições, mas recalcula o tamanho máx. do NN para 17 agora.

3. Em determinado momento, formata o NN acima com 17 posições, mantendo a numeração gerada, adicionando zeros a esquerda por causa do novo tamanho.

4. Na validação de tamanho com NN completo passa, tendo em vista que o tamanho do NN completo é maior que 10 (código que calcula tamanho máximo do sequencial do NN)

 

Inclusive nesta validação de tamanho, considera também os traços, barras, etc. não validando apenas os digitos numericos.

 

Na minha opinião, teria que ajustar o código fonte do ACBR, para calcular o tamanho apenas da parte do sequencial do NN e outra que calcule tbm o tamanho do NN completo. A validação de tamanho teria que corresponder ao tamanho completo do NN.

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

 

Para facilitar os testes e possíveis correções me envie as informações que estão sendo passadas ao componente com as quais este problema ocorre.

 

 

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • 6 meses depois ...

Bom dia, estou enfrentando problemas para a geração do Boleto para o BB também.
Carteira 18, Modalidade 019 e Convênio de 6 dígitos.

Segundo o suporte do BB, a linha digitável deve ser:

0019C.CCCCd  Cnnnn.naaaad  &&&&&.&&&ccd  D  VVVV$$$$$$$$$$
Onde:
C: Número do convênio
n: Nosso número (numeração livre)
D: Dv geral
d: dígito verificador
c: Carteira
a: Agência
$: valor
V: fator de vencimento
&: Conta corrente

Quando estou gerando o boleto, mesmo setando Boleto.Banco.TamanhoMaximoNossoNum := 5, acaba gerando o NN com 17 posições com apenas o número sequencial que eu informo.

Obs: Estou utilizando a Trunk2, fiz o download através do link disponibilizado no Google Drive.

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Administradores

Boa tarde.

O tamanho do nosso número é calculado pelo próprio componente com base nas informações passadas a ele.

Como vc informou o convenio (com somente 6 dígitos ou usou 0 a esquerda) ?

Oque foi informado nas propriedade Carteira e Modalidade?

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • 1 mês depois ...
  • Administradores

Boa noite.

Caso ainda não tenha resolvido, verifique se não está passando o nosso número ao componente com 10 ou mais dígitos, no seu caso vc deve enviar somente 5 digitos.

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3116 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...