Ir para conteúdo
  • Cadastre-se

dev botao

Retorno Banco do Brasil


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

Recommended Posts

  • 2 semanas depois ...

Bom dia duilio, aproveitando que você postou sua unit, se o pessoal também quiser verificar e adicionar ao svn

function TACBrBancoBrasil.CodMotivoRejeicaoToDescricao(

  const TipoOcorrencia: TACBrTipoOcorrencia; CodMotivo: Integer): String;

begin

  case TipoOcorrencia of

     toRetornoRegistroRecusado:

      case CodMotivo of

         01: Result:='01-Identificação inválida' ;

         02: Result:='02-Variação da carteira inválida' ;

         03: Result:='03-Valor dos juros por um dia inválido' ;

         04: Result:='04-Valor do desconto inválido' ;

         05: Result:='05-Espécie de título inválida para carteira' ;

         06: Result:='06-Espécie de valor variável inválido' ;

         07: Result:='07-Prefixo da agência usuária inválido' ;

         08: Result:='08-Valor do título/apólice inválido' ;

         09: Result:='09-Data de vencimento inválida' ;

         10: Result:='10-Fora do prazo' ;

         11: Result:='11-Inexistência de margem para desconto' ;

         12: Result:='12-O Banco não tem agência na praça do sacado' ;

         13: Result:='13-Razões cadastrais' ;

         14: Result:='14-Sacado interligado com o sacador' ;

         15: Result:='15-Título sacado contra orgão do Poder Público' ;

         16: Result:='16-Título preenchido de forma irregular' ;

         17: Result:='17-Título rasurado' ;

         18: Result:='18-Endereço do sacado não localizado ou incompleto' ;

         19: Result:='19-Código do cedente inválido' ;

         20: Result:='20-Nome/endereco do cliente não informado /ECT/' ;

         21: Result:='21-Carteira inválida' ;

         22: Result:='22Quantidade de valor variável inválida' ;

         23: Result:='23-Faixa nosso número excedida' ;

         24: Result:='24-Valor do abatimento inválido' ;

         25: Result:='25-Novo número do título dado pelo cedente inválido' ;

         26: Result:='26-Valor do IOF de seguro inválido' ;

         27: Result:='27-Nome do sacado/cedente inválido ou não informado' ;

         28: Result:='28-Data do novo vencimento inválida' ;

         29: Result:='29-Endereco não informado' ;

         30: Result:='30-Registro de título já liquidado' ;

         31: Result:='31-Numero do bordero inválido' ;

         32: Result:='32-Nome da pessoa autorizada inválido' ;

         33: Result:='33-Nosso número já existente' ;

         34: Result:='34-Numero da prestação do contrato inválido' ;

         35: Result:='35-Percentual de desconto inválido' ;

         36: Result:='36-Dias para fichamento de protesto inválido' ;

         37: Result:='37-Data de emissão do título inválida' ;

         38: Result:='38-Data do vencimento anterior a data da emissão do título' ;

         39: Result:='39-Comando de alteração indevido para a carteira' ;

         40: Result:='40-Tipo de moeda inválido' ;

         41: Result:='41-Abatimento não permitido' ;

         42: Result:='42-CEP do sacado inválido /ECT/' ;

         43: Result:='43-Codigo de unidade variavel incompativel com a data emissão do título' ;

         44: Result:='44-Dados para debito ao sacado inválidos' ;

         45: Result:='45-Carteira' ;

         46: Result:='46-Convenio encerrado' ;

         47: Result:='47-Título tem valor diverso do informado' ;

         48: Result:='48-Motivo de baixa inválido para a carteira' ;

         49: Result:='49-Abatimento a cancelar não consta do título' ;

         50: Result:='50-Comando incompativel com a carteira' ;

         51: Result:='51-Codigo do convenente inválido' ;

         52: Result:='52-Abatimento igual ou maior que o valor do título' ;

         53: Result:='53-Título já se encontra situação pretendida' ;

         54: Result:='54-Título fora do prazo admitido para a conta 1' ;

         55: Result:='55-Novo vencimento fora dos limites da carteira' ;

         56: Result:='56-Título não pertence ao convenente' ;

         57: Result:='57-Variação incompativel com a carteira' ;

         58: Result:='58-Impossivel a transferencia para a carteira indicada' ;

         59: Result:='59-Título vencido em transferencia para a carteira 51' ;

         60: Result:='60-Título com prazo superior a 179 dias em transferencia para carteira 51' ;

         61: Result:='61-Título já foi fichado para protesto' ;

         62: Result:='62-Alteração da situação de debito inválida para o codigo de responsabilidade' ;

         63: Result:='63-DV do nosso número inválido' ;

         64: Result:='64-Título não passivel de debito/baixa - situação anormal' ;

         65: Result:='65-Título com ordem de não protestar-não pode ser encaminhado a cartorio' ;

         67: Result:='66-Título/carne rejeitado' ;

         80: Result:='80-Nosso número inválido' ;

         81: Result:='81-Data para concessão do desconto inválida' ;

         82: Result:='82-CEP do sacado inválido' ;

         83: Result:='83-Carteira/variação não localizada no cedente' ;

         84: Result:='84-Título não localizado na existencia' ;

         99: Result:='99-Outros motivos' ;

      end;

  end;

end;



procedure TACBrBancoBrasil.LerRetorno400(ARetorno: TStringList);

var

  Titulo : TACBrTitulo;

  ContLinha, CodOcorrencia, CodMotivo, i, MotivoLinha : Integer;

  CodMotivo_19, rAgencia, rDigitoAgencia, rConta, rDigitoConta,

  Linha, rCedente, rCNPJCPF:String;

begin

   ContLinha := 0;


   if StrToIntDef(copy(ARetorno.Strings[0],77,3),-1) <> Numero then

      raise Exception.Create(ACBrStr(ACBrBanco.ACBrBoleto.NomeArqRetorno +

                             'não é um arquivo de retorno do '+ Nome));


   rCedente      := trim(Copy(ARetorno[0],47,30));

   rAgencia      := trim(Copy(ARetorno[1],18,4));

   rDigitoAgencia:= Copy(ARetorno[1],22,1);

   rConta        := trim(Copy(ARetorno[1],23,8));

   rDigitoConta  := Copy(ARetorno[1],31,1);


   ACBrBanco.ACBrBoleto.NumeroArquivo := StrToIntDef(Copy(ARetorno[0],101,7),0);


   ACBrBanco.ACBrBoleto.DataArquivo   := StringToDateTimeDef(Copy(ARetorno[0],95,2)+'/'+

                                                             Copy(ARetorno[0],97,2)+'/'+

                                                             Copy(ARetorno[0],99,2),0, 'DD/MM/YY' );


   case StrToIntDef(Copy(ARetorno[1],2,2),0) of

      11: rCNPJCPF := Copy(ARetorno[1],7,11);

      14: rCNPJCPF := Copy(ARetorno[1],4,14);

   else

     rCNPJCPF := Copy(ARetorno[1],4,14);

   end;



   with ACBrBanco.ACBrBoleto do

   begin

      if (not LeCedenteRetorno) and ((rAgencia <> OnlyNumber(Cedente.Agencia)) or

          (rConta <> OnlyNumber(Cedente.Conta))) then

         raise Exception.Create(ACBrStr('Agencia\Conta do arquivo inválido'));


      Cedente.Nome         := rCedente;

      If Copy(rCNPJCPF,1,10) <> '0000000000'

         Then Cedente.CNPJCPF      := rCNPJCPF;

      Cedente.Agencia      := rAgencia;

      Cedente.AgenciaDigito:= rDigitoAgencia;

      Cedente.Conta        := rConta;

      Cedente.ContaDigito  := rDigitoConta;


      case StrToIntDef(Copy(ARetorno[1],2,2),0) of

         11: Cedente.TipoInscricao:= pFisica;

         14: Cedente.TipoInscricao:= pJuridica;

         else

            Cedente.TipoInscricao := pOutras;

      end;

      ACBrBanco.ACBrBoleto.ListadeBoletos.Clear;

   end;


   ACBrBanco.TamanhoMaximoNossoNum := 20;


   for ContLinha := 1 to ARetorno.Count - 2 do

   begin

      Linha := ARetorno[ContLinha] ;


      if Copy(Linha,1,1)<> '7' then

         Continue;


      Titulo := ACBrBanco.ACBrBoleto.CriarTituloNaLista;


      with Titulo do

      begin

         SeuNumero                   := copy(Linha,39,25);

         NumeroDocumento             := copy(Linha,117,10);

         OcorrenciaOriginal.Tipo     := CodOcorrenciaToTipo(StrToIntDef(

                                        copy(Linha,109,2),0));


         CodOcorrencia := StrToInt(IfThen(copy(Linha,109,2) = '00','00',copy(Linha,109,2)));


         if(CodOcorrencia = 3)then

         begin

           CodMotivo:= StrToInt(IfThen(copy(Linha,MotivoLinha,2) = '00','00',copy(Linha,87,2)));

           MotivoRejeicaoComando.Add(copy(Linha,87,2));

           DescricaoMotivoRejeicaoComando.Add(CodMotivoRejeicaoToDescricao(OcorrenciaOriginal.Tipo,CodMotivo));

         end;


         DataOcorrencia := StringToDateTimeDef( Copy(Linha,111,2)+'/'+

                                                Copy(Linha,113,2)+'/'+

                                                Copy(Linha,115,2),0, 'DD/MM/YY' );


         Vencimento := StringToDateTimeDef( Copy(Linha,147,2)+'/'+

                                            Copy(Linha,149,2)+'/'+

                                            Copy(Linha,151,2),0, 'DD/MM/YY' );


         ValorDocumento       := StrToFloatDef(Copy(Linha,153,13),0)/100;

         ValorIOF             := StrToFloatDef(Copy(Linha,215,13),0)/100;

         ValorAbatimento      := StrToFloatDef(Copy(Linha,228,13),0)/100;

         ValorDesconto        := StrToFloatDef(Copy(Linha,241,13),0)/100;

         ValorRecebido        := StrToFloatDef(Copy(Linha,254,13),0)/100;

         ValorMoraJuros       := StrToFloatDef(Copy(Linha,267,13),0)/100;

         ValorOutrosCreditos  := StrToFloatDef(Copy(Linha,280,13),0)/100;

         NossoNumero          := Copy(Linha,64,17);

         Carteira             := Copy(Linha,92,3);

//         ValorDespesaCobranca := StrToFloatDef(Copy(Linha,176,13),0)/100;

         ValorOutrasDespesas  := StrToFloatDef(Copy(Linha,189,13),0)/100;


         if StrToIntDef(Copy(Linha,296,6),0) <> 0 then

            DataCredito:= StringToDateTimeDef( Copy(Linha,176,2)+'/'+

                                               Copy(Linha,178,2)+'/'+

                                               Copy(Linha,180,2),0, 'DD/MM/YY' );

      end;

   end;

  ACBrBanco.TamanhoMaximoNossoNum := 10;

end;


Atenciosamente

Antônio Marcelo

Divinópolis - MG

Link para o comentário
Compartilhar em outros sites

pessoal aproveitando o gancho fiu tentar ler o retorno do arquivo e esta me dando erro nesta linha 809

NossoNumero := copy(Linha, 38, 20); da unit ACBRBancodoBrasil procedure TACBrBancoBrasil.LerRetorno240(ARetorno: TStringList);

Erro:

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

Prjbanco

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

Tamanho Máximo do Nosso Número é: 10.

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

OK

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

So que eu nao to conseguindo alterar no componente o Tamanho Maximo do Nosso numero por default ele ta 10 e não consigo alterar.. tem algum outro lugar que eu possa configurar ? OU estou fazendo algo errado?

Link para o comentário
Compartilhar em outros sites

procedure TfrmRetorno.act_CarregaArquivoExecute(Sender: TObject);

var I: Integer;

    Titulo: TACBrTitulo;

begin

  If not OpenDialog1.Execute Then Exit;


  try

    ACBrBoleto1.LeCedenteRetorno:= True;


    ACBrBoleto1.NomeArqRetorno:= OpenDialog1.FileName;


    //Nesse momento você carrega os titulos

    ACBrBoleto1.LerRetorno;


    for I := 0 to DM_Cliente.ACBrBoleto1.ListadeBoletos.Count - 1 do

     begin

       Titulo:= ACBrBoleto1.ListadeBoletos.Objects[I];


       //Agora é só usar as property do objeto

       NumDocto  := Titulo.NumeroDocumento;

       Vencimento:= Titulo.Vencimento;

       Etc...	

     end;

end;

Espero ter ajudado

Atenciosamente

Antônio Marcelo

Divinópolis - MG

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
  • Administradores

Boa tarde Diulio.

Infelizmente nos últimos meses não pudemos dar a manutenção necessária ao ACBrBoleto, com relação ao seu ultimo post, vc fez algum ajuste para resolver seu problema?

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