Ir para conteúdo
  • Cadastre-se

dev botao

ACBrBoleto Sicoob V3: retornando ERRO após atualizar versão do ACBr.


Ver Solução Respondido por Alessandro Cardoso,

Recommended Posts

  • Moderadores
Postado

tu tem alterações locais.

acabei de atualizar e rodar o instalador após ler sua mensagem e não obtive erros.

como digo se ficar mudando localmente vai começar uma hora que não vai conseguir mais atualizar.

vá na pasta , lado direito, tortoisesvn e revert, marca tudo e exclui

faz update e instalador de novo

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado
Em 04/11/2024 at 14:22, VEXCOM Sistemas - Valtair disse:

Consegui entender a situação do nosso amigo Leonardo e faz muito sentido a implementação dele

Realmente, está correto o que o banco Sicoob informou, que nada muda (em partes)

Partimos do principio que nos fontes atuais, o acbrBoleto sempre calcula o digito verificado do nosso numero.

O que acontece é que quando é gerado CNAB 240, nós geramos o nosso numero, e o AcbrBoleto calcula o digito verificador do nosso numero, e enviamos para o sicoob através do arquivo CNAB, registra no banco e o processo está correto.

Quando é por API, sobre o nosso numero há duas possibilidades

1) Nós informar o nosso numero + digito verificador, igualmente é feito no CNAB240, e que o boleto é registrado no Sicoob exatamente como é enviado.

2) Nós informar '' no campo nosso numero, neste cenário, após o registro no banco, o mesmo retorna o nosso numero, este é o cenário que eles implementaram, não há digito verificador para este caso, apenas o nosso numero, e neste caso não deve calcular o digito verificador, porque se calcular estará errado

Fiz uma implementação, e fiz essa validação com boletos de alguns clientes (API e CNAB240) e agora ficou correto.


criei a property
fpGerarDV no TACBrBancoClass

e essa modificação ao gerar o digito verificador

 

function TACBrBancoSicoob.CalcularDigitoVerificador(const ACBrTitulo: TACBrTitulo ): String;
var
  Num, Res :String;
  i, base, digito : Integer;
const
  indice = '319731973197319731973';
begin
   Result := '';

   if (not GerarDV) then
     Exit;

   Result := '0';

   Num :=  PadLeft(ACBrTitulo.ACBrBoleto.Cedente.Agencia, 4, '0') +
           PadLeft(ACBrTitulo.ACBrBoleto.Cedente.CodigoCedente, 10, '0') +
           PadLeft(trim(ACBrTitulo.NossoNumero), 7, '0');

   base := 0;
   for i := 1 to Length(Num) do
     base := base + ( StrToInt(copy(Num,i,1)) * StrToInt(copy(indice,i,1)) );

   digito := 11-((  base )-( trunc(base/11) * 11));
   //(Se o Resto for igual a 0 ou 1 então o DV é igual a 0)
   if (digito > 9) then
      digito := 0;

   Res    := IntToStr(digito);
   Result := Res;

   { Para o cálculo do dígito verificador do nosso número, deverá ser utilizada
     a fórmula abaixo:
     Número da Cooperativa    9(4)  3009
     Código do Cliente   9(10)  cedente
     Nosso Número   9(7)  Iniciado contagem em 1

     Constante para cálculo  = 3197


     a) Concatenar na seqüência completando com zero à esquerda.
        Ex.: Número da Cooperativa  = 0001
             Número do Cliente(cedente)  = 1-9
             Nosso Número  = 21
             000100000000190000021

     b) Alinhar a constante com a seqüência repetindo de traz para frente.
        Ex.: 000100000000190000021
             319731973197319731973

     c) Multiplicar cada componente da seqüência com o seu correspondente da
        constante e somar os resultados.
        Ex.: 1*7 + 1*3 + 9*1 + 2*7 + 1*3 = 36

     d) Calcular o Resto através do Módulo 11.
        Ex.: 36/11 = 3, resto = 3

     e) O resto da divisão deverá ser subtraído de 11 achando assim o DV
        (Se o Resto for igual a 0 ou 1 então o DV é igual a 0).
        Ex.: 11  3 = 8, então Nosso Número + DV = 21-8


     Memória de Cálculo
     Coop.(4)|Cliente(10)		    |Nosso Número(7)
     3	   0	 0	9	0	0	0	0	1	3	6	3	5	2	5	9	3	1	1	5	1
     3	   1 	 9	7	3	1	9	7	3	1	9	7	3	1	9	7	3	1	9	7	3
     9	   0	 0	63	0	0	0	0	3	3	54	21	15	2	45	63	9	1	9	35	3 = soma = 335

     digito = 11-((  soma )-( resto inteiro (trunc) da divisao da soma por 11 * 11))
     digito = 11-((  335 )-(30*11))
     digito = 6 }
end;



no meu caso isso resolveu para todos os cenários, controlo conforme a property no momento da geração, se é CNAB240 ou API

ACBrBoleto.pas 266.36 kB · 0 downloads ACBrBancoSicoob.pas 82.96 kB · 0 downloads

 

Em 12/11/2024 at 16:42, Juliomar Marchetti disse:

Acho que pode ser algo na falta da informação ao consultar.

chegou a verificar se informou os dados corretos para fazer a consulta

Aqui eu tive o mesmo problema com o digito verificador. fiz o mesmo o amigo VEXCOM SISTEMAS e está funcionando agora.

  • Moderadores
Postado
13 horas atrás, Junior.Jaru disse:

Aqui eu tive o mesmo problema com o digito verificador. fiz o mesmo o amigo VEXCOM SISTEMAS e está funcionando agora

Quem seria esse?

Acho que houve uma discussão sobre isso internamente.
mas aguardemos pra ver o que será ou não feito. pois o calcúlo é simples e os dados do titulo devem ser preenchidos corretamente e ele sempre gerará o mesmo digito

 

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado

Juliomar, quando eu gero um boleto na API de Cobrança Bancária V3 do Sicoob o nosso número é opcional para registrar o boleto. quando eu nao informo o nosso numero o banco me devolve um nosso numero automático e esse nosso numero nao tem digito verificador conforme informação  contida em https://developers.sicoob.com.br/portal/documentacao?slugItem=novidades-e-atualizacoes. entao na hora que o ACbrBoleto vai rendenizar / gerar o código de barras e a linha digitável quando é informado o nosso numero ele calcula o dígito, mas isso não pode acontecer se o boleto é emitido nessa api pois o nosso numero não tem mais digito verificador para quem usa retorno automático do nosso numero. Desativei no arquivo ACBrBancoSicoob.pas a função function TACBrBancoSicoob.CalcularDigitoVerificador(const ACBrTitulo: TACBrTitulo 😞 String;. e como pode ver em anexo tudo está funcionando perfeitamente. deixo claro que isso ocorre somente para quem não usa o nosso numero gerado no seu ERP e sim o que vem da API.

Se não tiver ficado claro, e se você puder e quiser me chamar no whatsapp posso fazer uma call para esclarecer o ponto.

Atenciosamente,

FaturaVersãoFinal.pdf

  • Moderadores
Postado

Certo e dai nos demais bancos dai tu faz o nosso numero é isso mesmo?

pois em 99% o pessoal já controla o nosso numero então nada melhor que usar ele ao invés de ficar deixando o banco certo?

mas vamos conversar com os demais colegas commiter pra ver

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado

Boa tarde.

Zerei minha máquina, reinstalei tudo (delphi, componentes, etc). Baixei hoje (15/11/24) o ACBr, e continuo com Invalid Client Credentials quando tento registrar no V3 do Sicoob. No Sicredi tá normal, sem nenhum problema. Alguém por favor me ajude, eu não sei mais o que fazer, e não quero ter que ficar usando versão antiga do ACBr pra burlar este problema. Não sei o que tem de errado com o meu ACBrBoleto. É muito estranho isso.

Seguem os logs (do ACBrBoleto no momento de registrar, e do Retorno com o erro).

ACBrBoleto_Loja.ini ApiSicoob.log

  • Solution
Postado

Bom dia.

Descobri o problema e resolvi:

A propriedade TACBrBoleto.Configuracoes.WebService.UseCertificateHTTP nesta nova versão do ACBr, para o Sicoob V3, ela tem que ser TRUE, e por algum motivo eu estava usando esta propriedade sempre como False (peguei isso de algum exemplo ou de algum post aqui do fórum, e sempre achei que ela deveria ser setada pra false).

Como verifiquei que nessa versão nova do ..\ACBrBoleto\ACBrBoletoWS.Rest.OAuth.pas, no Constructor, há uma condição de que ela seja TRUE, percebi que antes não precisa desta propriedade estar como true para que o ArquivoKey e o ArquivoPEM fossem setados ali. Nas versões anteriroes do ACBrBoletoWS.Rest.OAuth.pas não havia a seguinte linha n. 375:

if FACBrBoleto.Configuracoes.WebService.UseCertificateHTTP then

Acho que fica até documentado para outros usuários que estiverem passando por problemas similares: antes não precisa setar essa propriedade para True (ela pode estar true ou false, que , nesta situação, tudo funcionaria corretamente). Mas nesta versão atual do ACBr, ela DEVE ser TRUE (pelo menos para o Sicoob V3, já que no Sicredi não dá problema neste ponto).

Não sei se fui claro e nem se esse relato vai ser útil, mas enfim, graças a Deus, no meu caso tá tudo resolvido. Obrigado e abraços.

  • Curtir 1
  • Moderadores
Postado

Opa legal. obrigado por compartilhar.

não falei sobre essas configurações pois como disse no começo estar ok, não vi necessidade de levantar sobre elas.

Obrigado por reportar.

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

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

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.