Ir para conteúdo
  • Cadastre-se

dev botao

alteração Retonro Banco Sicoob CNAB 240


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

Recommended Posts

1 - no arquivo de retorno o campo numero da conta começa conforme layout na coluna 58 e o componente esta começando na coluna 59

2 - o campo numero da conta esta vindo formatado padrão com 10 digitos, sendo que no layout possui 13 digitos e quando vai comparar o que foi informado no preenchimento do componente e com o que esta vindo no arquivo de retorno esta ficando diferente ocasionando mensagem de erro conforme abaixo.

 

if ( (not LeCedenteRetorno) and (rConta + rDigitoConta <> OnlyNumber(  Cedente.Conta + Cedente.ContaDigito ) then
       raise Exception.CreateFMT('Conta do arquivo %s inválida, config %s',[rConta,OnlyNumber(Cedente.Conta + Cedente.ContaDigito)]);

Existe no componente a opção de informar o tamanho da conta corrente, mas não esta acessivel para informar, o que resolveria o problema.

Fiz a alteração passando a conta informada no componente para inteiro e o campo lido no arquivo de remessa tambem para inteiro, com isso os valores ficarão todos iguais não ocasionando o erro

     rCedente     := trim(Copy(ARetorno[0],73,30));
     rAgencia     := trim(Copy(ARetorno[0],53,5));
     rConta       := IntToStr ( StrToInt (   trim(Copy(ARetorno[0],58,13)) ) );
     rDigitoConta := Copy(ARetorno[0],71,1);

   if ( (not LeCedenteRetorno) and (rConta + rDigitoConta <> OnlyNumber( IntToStr ( StrToInt (  Cedente.Conta ) ) + Cedente.ContaDigito)) ) then
       raise Exception.CreateFMT('Conta do arquivo %s inválida, config %s',[rConta,OnlyNumber(Cedente.Conta + Cedente.ContaDigito)]);

  

Com isso o problema foi resolvido

Segue arquivo modificado

ACBrBancoBancoob.pas

segue arquivo de retorno para checagem

3064_00203530_20190531_C240_00.ret

Link para o comentário
Compartilhar em outros sites

  • Moderadores
15 horas atrás, Fernando Rodrigo disse:

1 - no arquivo de retorno o campo numero da conta começa conforme layout na coluna 58 e o componente esta começando na coluna 59

Pelo manual anexado a coluna 58 contém o dígito da agência e não o número da conta...

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

13 minutos atrás, BigWings disse:

Pelo manual anexado a coluna 58 contém o dígito da agência e não o número da conta...

realmente @BigWings, começa na 59 mesmo, olhei o layout incorreto, mas o problema de pegar somente, mas o numero da conta vindo com 10 digitos dai fica errado mesmo, segue anexo o arquivo de retorno para dar uma olhada da forma que esta, 

75600000         223216110000190                    03064000000001188500JWA ROLAMENTOS E ACESSORIOS INSICOOB  

2 - o campo numero da conta esta vindo formatado padrão com 10 digitos, sendo que no layout possui 13 digitos e quando vai comparar o que foi informado no preenchimento do componente e com o que esta vindo no arquivo de retorno esta ficando diferente ocasionando mensagem de erro conforme abaixo.

 

if ( (not LeCedenteRetorno) and (rConta + rDigitoConta <> OnlyNumber(  Cedente.Conta + Cedente.ContaDigito ) then
       raise Exception.CreateFMT('Conta do arquivo %s inválida, config %s',[rConta,OnlyNumber(Cedente.Conta + Cedente.ContaDigito)]);

3064_00203530_20190531_C240_00.ret

Link para o comentário
Compartilhar em outros sites

  • Moderadores
1 hora atrás, Fernando Rodrigo disse:

2 - o campo numero da conta esta vindo formatado padrão com 10 digitos, sendo que no layout possui 13 digitos e quando vai comparar o que foi informado no preenchimento do componente e com o que esta vindo no arquivo de retorno esta ficando diferente ocasionando mensagem de erro conforme abaixo.

if ( (not LeCedenteRetorno) and (rConta + rDigitoConta <> OnlyNumber(  Cedente.Conta + Cedente.ContaDigito ) then
       raise Exception.CreateFMT('Conta do arquivo %s inválida, config %s',[rConta,OnlyNumber(Cedente.Conta + Cedente.ContaDigito)]);

Não entendi a parte do número da conta estar vindo formatado com 10 dígitos...

Fiz teste desta forma e não notei erros com o seu arquivo:

  if not OpenDialog1.Execute then
    Exit;

  ACBrBoleto1.DirArqRetorno := ExtractFilePath(OpenDialog1.FileName);
  ACBrBoleto1.NomeArqRetorno := ExtractFileName(OpenDialog1.FileName);

  ACBrBoleto1.Banco.TipoCobranca := cobBancoob;
  ACBrBoleto1.Cedente.Agencia := '3064';
  ACBrBoleto1.Cedente.AgenciaDigito := '0';
  ACBrBoleto1.Cedente.Conta := '000000011885';
  ACBrBoleto1.Cedente.ContaDigito := '0';
  ACBrBoleto1.Cedente.CNPJCPF := '23.216.110/0001-90';
  ACBrBoleto1.Cedente.TipoInscricao := pJuridica;

  ACBrBoleto1.LerRetorno;

 

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

@BigWings o problema esta na função abaixo que esta pegando 10 digitos na conta corrente e no arquivo de remessa pega 13, dai os campos ficam diferente

Aqui o componente ja traz 10 digitos, veja a imagem e teria que ver 13 digitos, ja que na hora de processar a remessa vão os 13, dai o componente compara e da errado

procedure TACBrCedente.SetConta(const AValue: String);
var
  aConta: Integer;
begin
   if fConta = AValue then
      exit;

   fConta:= AValue;
   aConta:= StrToIntDef(trim(AValue),0);

   if aConta = 0 then
      exit;

   fConta:= IntToStrZero(aConta, ACBrBoleto.Banco.TamanhoConta );
end;

SICCOB1.png

SICCOB2.png

SICCOB3.png

Link para o comentário
Compartilhar em outros sites

  • Moderadores
  • Solution
11 minutos atrás, Fernando Rodrigo disse:

@BigWings o problema esta na função abaixo que esta pegando 10 digitos na conta corrente e no arquivo de remessa pega 13, dai os campos ficam diferente

Aqui o componente ja traz 10 digitos, veja a imagem e teria que ver 13 digitos, ja que na hora de processar a remessa vão os 13, dai o componente compara e da errado 

Consegui replicar esse problema movendo a linha:

  ACBrBoleto1.Banco.TipoCobranca := cobBancoob;

Para a última linha do código, antes do método LerRetorno.

Então o que você precisa é ter certeza que está configurado a propriedade TipoCobranca antes de informar o número da conta para o componente.

Já que para o Sicoob o tamanho da conta é definido em 12 (e não 13).

constructor TACBrBancoob.create(AOwner: TACBrBanco);
begin
   inherited create(AOwner);
   fpDigito := 0;
   fpNome   := 'SICOOB';
   fpNumero := 756;
   fpTamanhoMaximoNossoNum := 7;
   fpTamanhoCarteira   := 3;
   fpTamanhoConta      := 12;
   fpCodigosMoraAceitos:= '012';
   fpLayoutVersaoArquivo := 81;
   fpLayoutVersaoLote    := 40;
end;

 

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link para o comentário
Compartilhar em outros sites

  • Administradores

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

  • 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

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