Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Bom dia.

Estou com uma dúvida a respeito do layout do arquivo de cobrança retornado pelo Banco do Brasil:

O cliente que estou atendendo possui um número de convênio do banco com o formato 00XXXX (X são números diferentes de zero) e, segundo o site do Banco do Brasil (https://www.bb.com.br/pbb/pagina-inicial/aplicativos-bb/leiautes#/), o convênio é de 4 posições. Porém verifiquei no código fonte do AcBr boleto que o código de leitura do Banco do Brasil só possui a leitura do retorno do convênio de 6 e 7 posições.

Segundo o cliente, a leitura das informações como nosso número e o valor de juros e multa estão erradas.

O arquivo retornado possui 400 caracteres de tamanho de linha.

O ACBr atende o layout de cobrança com convênio de 4 posições ou alguma informação do cliente esta errada?

 

  • Administradores
Postado

Bom dia.

Pode nos dar um exemplo mais claro do que esta errado? Oque era esperado e oque foi lido? 

Se possível anexe também o arquivo de retorno, ou pelo menos as linhas relativas ao exemplo.

At.

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 !!

Postado

As duas primeiras linhas são:

02RETORNO01COBRANCA       3406100006498X008355RAZAO DO CLIENTE              001BANCO DO BRASIL1207190006737                      000004811700766309                                                                                                                                                                                                                                                       000001
100000000000000003406100006498X00835534517-1                  06117626078320003900SD 01930000000000000000 310212071934517-1   06117626078320003900200819000000600312600105037010000000000185000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018510000000000000          0000000000000000000000000000000000000000000000001050000002

O cliente espera como "Nosso número" o valor 06117626078, mas ele retorna 26078.

Att.

  • Administradores
Postado

Boa tarde.

Os primeiros dígitos creio que seja o convênio, sendo assim não são lidos. 

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 !!

Postado (editado)

Boa tarde.

Eu não tenho certeza se esses números são o valor do convênio porque os convênio do cliente é diferente. Segundo esse layout do Banco do Brasil94652020_manual2.thumb.JPG.36c755c0c411dd6d059a72669af2eb25.JPGmanual.thumb.JPG.2ffca120e859c1dea405e29c945acf60.JPG

o nosso número possui 11 carateres, porém no código fonte ele só lê 5 carateres:

FONTE.thumb.JPG.eac0f532618b0f6a70a92f71871775bc.JPG

O valor da multa pelo que verifiquei está correto mas o valor do nosso numero está sendo lido com menos carateres do que deveria.

Ou seja, no layout ele deveria pegar 11 carateres da posição 63 mas no código fonte do ACBr ele pega 5 carateres da posição 69.

Att.

Editado por cassianoBelniak
Adicionada ultima linha da descrição
  • Administradores
Postado

Boa tarde.

Oque ocorre é exatamente oque descrevi antes, se você observar a regras de montagem do nosso número vai perceber que as primeiras posições se referem ao convênio.

Para que seja possível lhe auxiliar melhor seria necessário que sejam fornecidos os dados de configuração do componente.

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 !!

Postado

Bom dia.

As  primeiras posições não são o código do convênio e ao realizar a leitura do nosso número ele lê apenas 5 posições. As posições restantes são concatenadas com zeros pela função setter

MicrosoftTeams-image.thumb.png.ff5a79b4319f15cd31432c33b484e44c.png

e em teoria sempre serão zeros.

Anexei o código que configura o ACBr:

codigoAcbr.pas

Att.

  • Administradores
Postado

Boa tarde.

Preciso que informe os valores passados ao componente...

Por exemplo, ao invés de 

ACBrBoleto.Cedente.Convenio        := cadastroBanco.Conveniobancor.ValueOrDefault;  

Informe

ACBrBoleto.Cedente.Convenio        := 12345;

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 !!

  • 1 mês depois ...
Postado

Boa tarde.

desculpe a demora em responde-lá.

Enfim, realizei uma análise mais profunda no código e encontrei algumas coisas:

existe a função CalcularTamanhoMaximoNossoNumero, e nessa função existe esse trecho de código:

   if (Length(trim(NossoNumero)) > 10) and
      (((wTamConvenio = 6) and ((wCarteira = '16') or (wCarteira = '18'))) or
      ((wTamConvenio = 7) and (wCarteira = '18'))) then
      Result:= 17
   else if (wTamConvenio <= 4) then
      Result := 7
   else if ((wTamConvenio > 4) and (wTamConvenio < 6)) or
           ((wTamConvenio = 6) and ((wCarteira = '12') or (wCarteira = '15') or
            (wCarteira = '17') or (wCarteira = '18'))) then
      Result := 5
   else if (wTamConvenio = 6) then
      Result := 11
   else if (wTamConvenio = 7) then
      Result := 10;

O que significa que existem casos em que o nosso número possui tamanho 11 e em outros possui tamanho 5.

Essa função é chamada no setter do nosso número, e é disparada na função LerRetorno400Pos6 que contém a linha:

NossoNumero          := Copy(Linha,69,5);

O problema é que essa linha sempre lê 5 caracteres, mesmo havendo uma condição acima que permite a inserção de Nosso número maior que 5.

Ok, verificando o código ainda mais encontrei a função que gera o nósso número:

function TACBrBancoBrasil.FormataNossoNumero(const ACBrTitulo :TACBrTitulo): String;
var
  ANossoNumero, AConvenio: String;
  wTamNossoNum: Integer;
begin
  with ACBrTitulo do
  begin
    AConvenio    := ACBrBoleto.Cedente.Convenio;
    ANossoNumero := NossoNumero;
    wTamNossoNum := CalcularTamMaximoNossoNumero(Carteira,ANossoNumero);

    if ((ACBrTitulo.Carteira = '16') or (ACBrTitulo.Carteira = '18')) and
        (Length(AConvenio) = 6) and (wTamNossoNum = 17) then
      ANossoNumero := PadLeft(ANossoNumero, 17, '0')
    else if Length(AConvenio) <= 4 then
      ANossoNumero := PadLeft(AConvenio, 4, '0') + PadLeft(ANossoNumero, 7, '0')
    else if (Length(AConvenio) > 4) and (Length(AConvenio) <= 6) then
      ANossoNumero := PadLeft(AConvenio, 6, '0') + PadLeft(ANossoNumero, 5, '0')
    else if (Length(AConvenio) = 7) then
      ANossoNumero := PadLeft(AConvenio, 7, '0') + RightStr(ANossoNumero, 10);
  end;
  Result := ANossoNumero;
end;

e realmente, ele vai concatenar o convênio se o nosso número possuir 11 carateres.

Porém, existem casos em que o nosso número não é gerado pelo sistema mas pelo banco, como é o caso do nosso cliente.

Dando uma olhada no fórum achei esse post: 

Em que foi encontrado um erro que é exatamento o contrário do meu, e foi realizada a correção para que o sistema leia 5 carateres.

A parte legal é que, sim, essa correção está correta mas agora que possuimos dois clientes em que possuiem duas confgurações semelhantes de CNAB pude ver o que está acontecendo.

Os nossos dois clientes possuem o CNAB 400 do banco do brasil. O convênio dos dois possui 6 carateres. Porém um código de carteira 17 (qua cai na condição de numero de 5 caracteres) e o outro possui carteira 31 e tem o nosso numero gerado pelo banco (tamanho do nosso número 11). Esse segundo cliente ja gerou mais de 100000 títulos e por isso o tamanho do nosso número é maior que 5, sendo que ele não concatena o código do convênio depois.

Antes da correção proposta pelo post, a leitura do arquivo do cliente 2 funcionava, mas a do cliente 1 não. Depois, o cliente 1 passou a ler corretamente, mas começou a dar problemas na leitura ds segunda.

A correção que realmente deveria ser feita seria buscar qual o tamanho máximo do nosso número e dependendo do resultado, ler 5 ou 11 caracteres.

Att.

 

  • Curtir 1
  • Administradores
Postado

Bom dia.

Sua análise parece correta, consegue implementar a alteração  e testar nos dois clientes?

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 !!

Postado

Bom dia.

Alterando a linha

NossoNumero          := Copy(Linha,69,5);

para

       case CalcularTamMaximoNossoNumero(Carteira, '', rConvenioCedente) of
         5: NossoNumero := Copy(Linha,69,5);
         11: NossoNumero := Copy(Linha,63,11);
         else NossoNumero := Copy(Linha,69,5);
       end;

na função LerRetorno400Pos6  resolve o problema das duas empresas.

Att.

  • Administradores
Postado

Boa tarde.

Adicionado para validação.

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 !!

  • 1 mês depois ...
  • Moderadores
Postado
Em 20/12/2019 at 11:23, cassianoBelniak disse:

Bom dia.

Alterando a linha


NossoNumero          := Copy(Linha,69,5);

para


       case CalcularTamMaximoNossoNumero(Carteira, '', rConvenioCedente) of
         5: NossoNumero := Copy(Linha,69,5);
         11: NossoNumero := Copy(Linha,63,11);
         else NossoNumero := Copy(Linha,69,5);
       end;

na função LerRetorno400Pos6  resolve o problema das duas empresas.

Att.

Boa tarde

Dê uma olhada na função "NossoNumeroSemFormatacaoLerRetorno" que já existe na classe do BancoBrasil, note que segue a mesma regra utilizada para gerar o Nosso Número, porém é utilizado para a leitura do Retorno, acho que pode ser adaptada para leitura também do CNAB400.

  • Curtir 1
Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Moderadores
Postado

Se possível, favor testar utilizando a função "NossoNumeroSemFormatacaoLerRetorno", veja como está implementado no retorno CNAB240. Se Estiver ok, já atualizo no SVN utilizando essa função, pois assim atenderia todas as situações de Convênio baseado em como foi gerado o arquivo.

  • Curtir 1
Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • 2 semanas depois ...
  • Administradores
Postado

Tópico fechado por falta de retorno do usuário

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 !!

  • Este tópico foi criado há 1756 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.