Ir para conteúdo
  • Cadastre-se

dev botao

Erro Retorno Hsbc Carteira Cnr


Ver Solução Respondido por Valdemir Jacon Sanches,
  • Este tópico foi criado há 3335 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Bom Dia!

 

Notei o que pode ser um erro na rotina de retorno do banco HSBC:

 

na linha 583 da unit  "ACBrBancoHSBC.pas" tem um copy para pegar o nosso número:

 

           NossoNumero := Copy(Linha, 63, 16);

 

O problema é que para a carteira "CNR" o tamanho máximo do nosso número é 13, assim quando da o copy passa para o  "SetNossoNumerro" da unit "ACBrBoleto" uma string de tamanho 16, caindo no exception da linha 1043 por ter o tamanho maior que o permitido:

 

         raise Exception.Create( ACBrStr('Tamanho Máximo do Nosso Número é: '+ IntToStr(wTamNossoNumero) ));

 

Para solucionar para o cliente tenho alterado o copy para:

 

         NossoNumero := Copy(Linha, 63, 13);

 

Deem uma olhadinha por favor.

 

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia Valdemir.

 

Por favor anexe aqui o manual fornecido pelo banco.

 

 

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

  • Membros Pro

Boa Tarde!

 

Juliana como solicitado segue os layouts de remessa e retorno do banco.

 

Observando os arquivos reparei que:

 

Na remessa o nosso numero e passado com tamanho 13 (posições de 041 a 053  Registro tipo "1" - Detalhe)

 

No retorno o nosso numero vem com tamanho 16 (posições de 063 a 078  Registro tipo "1" - Detalhe), pois retorna também os dígitos verificadores do nosso número.

 

Explicando o Problema:

 

O tamanho máximo do nosso numero no componente é definido como 13(sem os DV).

 

Unit "ACBrBancoHSBC" 

   fpTamanhoMaximoNossoNum := 13;

Quando e feita a leitura do arquivo de retorno, é passado para o "Nosso Número" uma string com tamanho 16 (maior que o tamanho máximo do nosso número), gerando o exception da linha 1038.

 

Unit "ACBrBoleto"

procedure TACBrTitulo.SetNossoNumero ( const AValue: String ) ;
var
   wTamNossoNumero: Integer;
begin
   with ACBrBoleto.Banco do
   begin
      wTamNossoNumero := TamanhoMaximoNossoNum;
      if wTamNossoNumero < 1 then
         wTamNossoNumero:= CalcularTamMaximoNossoNumero(Carteira, AValue);

      if Length(trim(AValue)) > wTamNossoNumero then
         raise Exception.Create( ACBrStr('Tamanho Máximo do Nosso Número é: '+ IntToStr(wTamNossoNumero) ));

      fNossoNumero := padR(trim(AValue),wTamNossoNumero,'0');
   end;
end;

Para funcionar eu venho alterando a Unit "ACBrBancoHSBC" mudando a linha 583:

 

de:      NossoNumero := Copy(Linha, 63, 16);

para:   NossoNumero := Copy(Linha, 63, 13);

 

Apenas alterando essa parte já volta a funcionar a leitura do retorno.

 

Obrigado pela atenção e qualquer dúvida estou a disposição.

Remessa.pdf

Retorno.pdf

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Administradores

Boa tarde.

 

Alteração disponível no svn.

 

Att.

  • Curtir 1
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

×
×
  • 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.