Ir para conteúdo
  • Cadastre-se

dev botao

Erro de Leitura de Arquivo de Retorno - Banrisul


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

Recommended Posts

Olá pessoal, sou iniciante no Delphi mas já estou utilizando o ACBr por ser muito prático, estava testando a leitura do arquivo de retorno do Banrisul e me deparei com a seguinte situação:

Ao ler o arquivo de retorno do Banco me aparece a mensagem dizendo que o CPF/CNPJ é inválido, bom estava verificando o motivo da mensagem e percebi que diferente da leitura feita no arquivo do banco do brasil que já havia visto antes, a leitura do banco do Banrisul busca não do Header do Arquivo mas do Header do Lote.

Código da Unit ACBrBancoBanrisul:

LeituraArquivoCNPJCPF.png.06ba9222da005d74302a211e78762b32.png

Obs : o arquivo de texto é salvo em uma StringList para ir verificando, sendo assim o ARetorno(StringList) na posição 1 seria a segunda linha do arquivo ou seja o Header do Lote.

Entretanto segundo a documentação do Banrisul no Header do Lote, o CPF/CNPJ ocupam 15 posições e no Header do Arquivo apenas 14, sendo assim quando for realizar o Copy ira buscar não corretamente  por pegar apenas as 14 posições das 15 pegando um possivel 0 no inicio e não buscando o ultimo digito do CPF/CNPJ, gerando assim  a mensagem de erro do 'CPF/CNPJ do Arquivo Inválido'.

Arquivo de Retorno :

ArquivoRetorno.thumb.png.09dbba65d208a7f9fd44af89b3db0a36.png

Manual do Banco :

HeaderArquivo.png.7031719b455809351f976c0128015314.png

HeaderLote.png.29a25b75a88770e6605a0fad3fdb490d.png

Site do manual : http://www.banrisul.com.br/bob/data/CobrancaEletronicaBanrisul_layout_pdr_Febraban240_vrs25102013.pdf?cache=9

Minha duvida é se esta certo pegar o CPF/CNPJ do arquivo pelo Header do Lote, e se for porque busca apenas 14 posições sendo que o tamanho nesse Header é 15 ? e outra coisa percebi que é feito uma formatação no caso do Banrisul ao comparar o valor lido com o valor do Cedente do boleto do componente, neste banco devo formatar antes de atribuir a lista de boletos o CPF/CNPJ de acordo com o tipo (Fisica ou Juridica) do Cedente ?

Bom sei que seria  a solução seria alterar apenas o indice do Stringlist para  0 para ler a primeira linha, mas como ainda sou iniciante posso estar deixando passar algo como uma configuração por exemplo, bom minha duvida seria essa.

Desde já agradeço a sua atenção.

 

Editado por lukas1056
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Bom dia, baseado na implementação de outros bancos deveria pegar do Header do Arquivo (posição 0). Fique a vontade para alterar e postar aqui... se possível anexe o arquivo de retorno para homologação, assim corrigimos e atualizamos os fontes...

Consultor SAC ACBr

José Junior
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á, realizei alterações com base no que foi visto no manual do banco e também com base no que é necessário se buscar do arquivo:

Alterações :

1 - Busca do CPF/CNPJ pelo Header do Arquivo ao invés do Header do Lote.

BuscaCPF_CNPJ.png.6f7bc7638a36426b1d396c1277b6eb8f.png

 

2 -  Realizado modificações para buscar de acordo com as posições do "Header do Arquivo", e alterações para buscar os dados de acordo com o tamanho máximo definido no componente, pois para verificar se o arquivo é valido é passado um valor para o componente que irá ler o arquivo e ver se são iguais, e como no componente tem um tamanho máximo se os dois dados tanto o lido como o passado não tiverem o mesmo tamanho eles nunca serão iguais, e realizar alterações no tamanho máximo poderia acredito eu comprometer a geração do Boleto.

 

AlteracaoBuscaDados1.png.00cb1436e14fe8e75e9b14859f80c790.png

 

ModificacaoBuscaContaAgencia.png.00c4fb534b7810df63a20b7e1114966a.png

 

3 -  Alterada a busca do Nosso numero que estava buscando 20 posições e atribuindo ao componente, mas como o componente tem tamanho máximo de nosso numero 8, apresentava erro ao tentar setar com o valor lido, olhando no manual do banco percebi que os dados retornados são apenas as 10 primeiras posições do nosso numero, sendo que o resto fica em branco e como os dois últimos dígitos são os números gerados pelo calculo e não o sequencial acredito que possa ser pego apenas os 8 dígitos que pertencem ao nosso numero e caso precise do número inteiro do  banco deve ser realizada a alteração do tamanho máximo, mas como pensei antes pode dar problema na geração do boleto, tendo isso em vista utilizando os 8 dígitos se necessário verificar com o nosso numero completo gerado pelo ACBr, poderia ser utilizado um comando SQL com "  Substring "( Firebird ) para realizar a comparação da 1 a  8 posição do nosso numero do banco de dados com relação ao lido no arquivo de retorno.

 

NossoNumero.png.21162dc9bdf9afabff5c0f1735a4275d.png

 

Bom estarei postando os arquivos com as mudanças e espero por uma resposta se eu estou completamente errado ou poderia ser dessa maneira ?

Desde já agradeço a atenção.

 

Arquivos: 

Banrisul Alterações.rar

ACBrBancoBanrisul Modificações.txt

Editado por lukas1056
Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • 3 meses depois ...

Bom dia a todos,

 

Estou enfrentando problemas ao efetuar a leitura do arquivo de retorno. Ao realizar o procedimento, é retornado a mensagem 'Agencia\Conta do arquivo inválido'.

Ao verificar os fontes, identifiquei que a situação está ocorrendo devido a variavel rConta da classe ACBrBancoBanrisul estar sendo alimentada com valor divergente ao da ACBrBanco.ACBrBoleto.Cedente.Conta, consequentemente a execução cai no if da linha 753.

 

Para contornar o problema, precisei alterar a alimentação da variavel rConta, na linha 730, para iniciar a validação a partir da posição 64 do arquivo:

rConta         := trim(Copy(ARetorno.Strings[1], 64,  7));

 

Anexei o arquivo alterado para análise.

ACBrBancoBanrisul.pas

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2253 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.