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á 3557 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...