Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao Ler Retorno do Banco do Brasil - CNAB400


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

Recommended Posts

Boa tarde !

Estou tendo um problema com a leitura de retornos do Banco do Brasil, usando o layout CNAB 400.

Alguns registros do arquivo de retorno estão vindo com o comando 03, que de acordo com o manual do banco é COMANDO RECUSADO.

Ao ler o retorno, estou usando a propriedade Titulo.OcorrenciaOriginal.Descricao para pegar a descrição do comando, porém, mesmo sendo 03, volta como 02 - Entrada Confirmada.

Vasculhando o arquivo ACBRBancoBrasil.pas, verifiquei que o problema parece ser em duas funções:

function TACBrBancoBrasil.CodOcorrenciaToTipo(const CodOcorrencia:
   Integer ) : TACBrTipoOcorrencia;
begin
   Result := toTipoOcorrenciaNenhum;

  if (ACBrBanco.ACBrBoleto.LayoutRemessa = c240) then
  begin
    case CodOcorrencia of
      03: Result := toRetornoRegistroRecusado;
      04: Result := toRetornoTransferenciaCarteiraEntrada;
      05: Result := toRetornoTransferenciaCarteiraBaixa;
      15: Result := toRetornoBaixadoFrancoPagamento;
      17: Result := toRetornoLiquidadoSemRegistro;
      20: Result := toRetornoRecebimentoInstrucaoSustarProtesto;
      24: Result := toRetornoRetiradoDeCartorio;
      25: Result := toRetornoBaixaPorProtesto;
      26: Result := toRetornoInstrucaoRejeitada;
      27: Result := toRetornoAlteracaoUsoCedente;
      28: Result := toRetornoDebitoTarifas;
      29: Result := toRetornoOcorrenciasDoSacado;
      30: Result := toRetornoAlteracaoDadosRejeitados;
      50: Result := toRetornoChequePendenteCompensacao;
    end;
  end
  else
  begin
    case CodOcorrencia of
      03: Result := toRetornoComandoRecusado;
      05: Result := toRetornoLiquidadoSemRegistro;
      07: Result := toRetornoLiquidadoPorConta;
      08: Result := toRetornoLiquidadoSaldoRestante;
      10: Result := toRetornoBaixaSolicitada;
      15: Result := toRetornoLiquidadoEmCartorio;
      16: Result := toRetornoConfirmacaoAlteracaoJurosMora;
      20: Result := toRetornoDebitoEmConta;
      21: Result := toRetornoNomeSacadoAlterado;
      22: Result := toRetornoEnderecoSacadoAlterado;
      24: Result := toRetornoProtestoSustado;
      25: Result := toRetornoJurosDispensados;
      28: Result := toRetornoManutencaoTituloVencido;
      31: Result := toRetornoDescontoConcedido;
      32: Result := toRetornoDescontoCancelado;
      33: Result := toRetornoDescontoRetificado;
      34: Result := toRetornoAlterarDataDesconto;
      35: Result := toRetornoRecebimentoInstrucaoAlterarJuros;
      36: Result := toRetornoRecebimentoInstrucaoDispensarJuros;
      37: Result := toRetornoDispensarIndexador;
      38: Result := toRetornoDispensarPrazoLimiteRecebimento;
      39: Result := toRetornoAlterarPrazoLimiteRecebimento;
      46: Result := toRetornoChequePendenteCompensacao;
      72: Result := toRetornoTipoCobrancaAlterado;
      96: Result := toRetornoDespesasProtesto;
      97: Result := toRetornoProtestoSustado;
      98: Result := toRetornoDebitoCustasAntecipadas;
    end;
  end;

  if (Result <> toTipoOcorrenciaNenhum) then
    Exit;

  case CodOcorrencia of
    02: Result := toRetornoRegistroConfirmado;
    06: Result := toRetornoLiquidado;
    09: Result := toRetornoBaixaAutomatica;
    11: Result := toRetornoTituloEmSer;
    12: Result := toRetornoAbatimentoConcedido;
    13: Result := toRetornoAbatimentoCancelado;
    14: Result := toRetornoVencimentoAlterado;
    19: Result := toRetornoRecebimentoInstrucaoProtestar;
    23: Result := toRetornoEntradaEmCartorio;
    44: Result := toRetornoChequeDevolvido;
  else
    Result := toRetornoOutrasOcorrencias;
  end;
end;

Nessa função, ao ler as posições 109 a 110 do arquivo de retorno, o ACBr atribui o tipo toRetornoComandoRecusado quando o conteúdo é 03. Até aí tudo bem...o problema vem na outra função:

function TACBrBancoBrasil.TipoOCorrenciaToCod (
   const TipoOcorrencia: TACBrTipoOcorrencia ) : String;
begin
   Result := '';

   if (ACBrBanco.ACBrBoleto.LayoutRemessa = c240) then
   begin
     case TipoOcorrencia of
       toRetornoTransferenciaCarteiraEntrada        : Result := '04';
       toRetornoTransferenciaCarteiraBaixa          : Result := '05';
       toRetornoBaixaAutomatica                     : Result := '09';
       toRetornoBaixadoFrancoPagamento              : Result := '15';
       toRetornoLiquidadoSemRegistro                : Result := '17';
       toRetornoRecebimentoInstrucaoSustarProtesto  : Result := '20';
       toRetornoRetiradoDeCartorio                  : Result := '24';
       toRetornoBaixaPorProtesto                    : Result := '25';
       toRetornoInstrucaoRejeitada                  : Result := '26';
       toRetornoAlteracaoUsoCedente                 : Result := '27';
       toRetornoDebitoTarifas                       : Result := '28';
       toRetornoOcorrenciasDoSacado                 : Result := '29';
       toRetornoAlteracaoDadosRejeitados            : Result := '30';
       toRetornoChequePendenteCompensacao           : Result := '50';
     end;
   end
    else
    begin
      case TipoOcorrencia of
        toRetornoLiquidadoSemRegistro               : Result := '05';
        toRetornoLiquidadoPorConta                  : Result := '08';
        toRetornoLiquidadoSaldoRestante             : Result := '08';
        toRetornoBaixaSolicitada                    : Result := '10';
        toRetornoLiquidadoEmCartorio                : Result := '15';
        toRetornoConfirmacaoAlteracaoJurosMora      : Result := '16';
        toRetornoDebitoEmConta                      : Result := '20';
        toRetornoNomeSacadoAlterado                 : Result := '21';
        toRetornoEnderecoSacadoAlterado             : Result := '22';
        toRetornoProtestoSustado                    : Result := '24';
        toRetornoJurosDispensados                   : Result := '25';
        toRetornoManutencaoTituloVencido            : Result := '28';
        toRetornoDescontoConcedido                  : Result := '31';
        toRetornoDescontoCancelado                  : Result := '32';
        toRetornoDescontoRetificado                 : Result := '33';
        toRetornoAlterarDataDesconto                : Result := '34';
        toRetornoRecebimentoInstrucaoAlterarJuros   : Result := '35';
        toRetornoRecebimentoInstrucaoDispensarJuros : Result := '36';
        toRetornoDispensarIndexador                 : Result := '37';
        toRetornoDispensarPrazoLimiteRecebimento    : Result := '38';
        toRetornoAlterarPrazoLimiteRecebimento      : Result := '39';
        toRetornoChequePendenteCompensacao          : Result := '46';
        toRetornoTipoCobrancaAlterado               : Result := '72';
        toRetornoDespesasProtesto                   : Result := '96';
        toRetornoDespesasSustacaoProtesto                    : Result := '97';
        toRetornoDebitoCustasAntecipadas            : Result := '98';
      end;
    end;

    if (Result <> '') then
    Exit;

    case TipoOcorrencia of
      toRetornoRegistroConfirmado                   : Result := '02';
      toRetornoRegistroRecusado                     : Result := '03';
      toRetornoLiquidado                            : Result := '06';
      toRetornoTituloEmSer                          : Result := '11';
      toRetornoAbatimentoConcedido                  : Result := '12';
      toRetornoAbatimentoCancelado                  : Result := '13';
      toRetornoVencimentoAlterado                   : Result := '14';
      toRetornoRecebimentoInstrucaoProtestar        : Result := '19';
      toRetornoEntradaEmCartorio                    : Result := '23';
      toRetornoChequeDevolvido                      : Result := '44';
    else
      Result := '02';
    end;
end;

Nessa função, o ACBr não está jogando '03' para quando for toRetornoComandoRecusado e sim quando for toRetornoRegistroRecusado. Porém, verificando o ACBRBancoBrasil.pas, toRetornoRegistroRecusado só existe no layout CNAB240.

Gostaria que isso fosse verificado, por favor, para ver se é bug mesmo ou algum outro problema.

Obrigado.

Link para o comentário
Compartilhar em outros sites

Bom dia,

Estou com mesmo problema...

na função...function TACBrBancoBrasil.TipoOCorrenciaToCod (   const TipoOcorrencia: TACBrTipoOcorrencia ) : String;

TipoOcorrencia  me retorna toRetornoComandoRecusado

    case TipoOcorrencia of  --> está faltando tratamento do toRetornoComandoRecusado...
      toRetornoRegistroConfirmado                   : Result := '02';
      toRetornoRegistroRecusado                     : Result := '03';
      toRetornoLiquidado                            : Result := '06';
      toRetornoTituloEmSer                          : Result := '11';
      toRetornoAbatimentoConcedido                  : Result := '12';
      toRetornoAbatimentoCancelado                  : Result := '13';
      toRetornoVencimentoAlterado                   : Result := '14';
      toRetornoRecebimentoInstrucaoProtestar        : Result := '19';
      toRetornoEntradaEmCartorio                    : Result := '23';
      toRetornoChequeDevolvido                      : Result := '44';
    else
      Result := '02';  --> está retornando 02.... registro confirmado...
    end;

Grato

 

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Boa tarde.

Fazendo testes recentes, observei que nada foi feito ainda para resolver esse problema.

A Solução me parece ser simples. 
Foi declarado dois identificadores para o mesmo propósito: toRetornoComandoRecusado e toRetornoRegistroRecusado. 
A solução é usar apenas um destes;

Como solução paliativa, eu fiz adicionei a linha : toRetornoComandoRecusado    : Result := '03';

Metodo: function TACBrBancoBrasil.TipoOCorrenciaToCod

    case TipoOcorrencia of
      toRetornoRegistroConfirmado                  : Result := '02';
      toRetornoRegistroRecusado                     : Result := '03';
      toRetornoComandoRecusado                  : Result := '03';

      toRetornoLiquidado                                    : Result := '06';
      toRetornoTituloEmSer                                : Result := '11';
      toRetornoAbatimentoConcedido              : Result := '12';
      toRetornoAbatimentoCancelado              : Result := '13';
      toRetornoVencimentoAlterado                   : Result := '14';
      toRetornoRecebimentoInstrucaoProtestar        : Result := '19';
      toRetornoEntradaEmCartorio                    : Result := '23';
      toRetornoChequeDevolvido                      : Result := '44';
    else
      Result := '02';
    end;

Mas, se pudessem dar atenção a isso, seria ótimo!

Grato.

 

 

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...
  • Este tópico foi criado há 2114 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.