Ir para conteúdo
  • Cadastre-se

dev botao

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

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.