Leonardo Batista Postado 25 Outubro Postado 25 Outubro Bom Dia, Validando alguns boletos que ao informar a linha digitavel no banco aparecia como boleto ainda não emitido pude verificar que ao mandar imprimir o boleto pelo componente ele está gerando o nosso número de forma incorreta quando se faz a opção do banco gerar o nosso número na hora da criação do boleto. Na hora do envio do boleto ao passar o nosso número em branco o Banco retornara o nosso número caso o boleto seja criado com sucesso. Enviei um boleto e o retorno do banco foi: { "resultado": [{ "status": { "codigo": 200 }, "boleto": { "numeroContrato": ******, "modalidade": 1, "numeroContaCorrente": *****, "nossoNumero": 31144, "seuNumero": "6666-01", "especieDocumento": "DM", "dataEmissao": "2024-10-25T00:00:00-03:00", "codigoBarras": "75693991000000010001300801121407100031144001", "linhaDigitavel": "75691300860112140710800311440010399100000001000", "valor": 10.0000, "dataVencimento": "2024-11-24T00:00:00-03:00", "valorAbatimento": 0, "tipoDesconto": 0, "valorPrimeiroDesconto": 0.0000, "valorSegundoDesconto": 0.0000, "valorTerceiroDesconto": 0.0000, "valorMulta": 2.0000, "valorJurosMora": 0.3300, "numeroParcela": 1, "aceite": false, "pagador": { "nome": "TESTE BOLETO", "numeroCpfCnpj": "24759618058", "endereco": "********", "bairro": "***********", "cidade": "***********", "cep": "*********", "uf": "ES" }, "mensagensInstrucao": { "mensagens": ["Pagável Preferencialmente nas Cooperativ", "as da Rede Sicoob ou Qualquer Banco até", "o Vencimento.", "", ""] }, "identificacaoBoletoEmpresa": "66661", "quantidadeDiasFloat": 1, "tipoJurosMora": 2, "dataJurosMora": "2024-11-25T00:00:00-03:00", "tipoMulta": 2, "dataMulta": "2024-11-25T00:00:00-03:00", "identificacaoEmissaoBoleto": 2, "identificacaoDistribuicaoBoleto": 2, "codigoProtesto": 3, "codigoNegativacao": 3, "qrCode": "*************", "numeroContratoCobranca": ***** } } ] } Note que ele retorna a linha digitavel do boleto que é a seguinte: 75691300860112140710800311440010399100000001000 Na hora da impressão deste boleto pelo ACBR o mesmo gera a seguinte linha digitavel: 75691300860112140710800311480016599100000001000 Destaquei em negrito a parte correspondente ao nosso número, a divergencia acontece que o Sicoob está considerando que o digito verificador para o nosso número 3114 é 4 e o ACBR 8, trazendo uma divergencia de informações e impossibilitando o pagamento do titulo.
Moderadores Juliomar Marchetti Postado 25 Outubro Moderadores Postado 25 Outubro Caso queira contribuir, anexe a unit alterada Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Patrick Alves Postado 25 Outubro Postado 25 Outubro @Leonardo Batista Verifica o numero da agencia (cooperativa) e do cliente, eles são usados para calcular o digito juntamente com o nosso numero. Pode ser que tenha alguma diferença do que vc esta informando para gerar o boleto para o que está definido no contrato do cliente.
Leonardo Batista Postado 25 Outubro Autor Postado 25 Outubro Em relação ao problema relatado acima entrei em contato com o suporte do Sicoob e obtive essa respota deles. Neste caso penso em criar uma propriedade para definir quando quando gerar e quando não gerar o DV. Segunda irei fazer as implementações e subo aqui.
Leonardo Batista Postado 28 Outubro Autor Postado 28 Outubro Bom Dia, De acordo com as informações passadas pelo suporte do Sicoob, criei um atributo na classe Boleto para poder marcar se é para calcular ou não o DV. Realizei alguns testes e o problema relatado foi sanado. Segue os arquivos para que possam avaliar as alterações. ACBrBancoSicoob.pas ACBrBoleto.pas
Consultores Daniel InfoCotidiano Postado 29 Outubro Consultores Postado 29 Outubro Sicoob é muito utilizado e até o momento não temos relatos de problemas semelhantes. Verifique se esta preenchendo todos os campos corretamente, vide particularidades tbm Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord
Filipe Martins Postado 29 Outubro Postado 29 Outubro Tivemos esse problema por aqui utilizando CNAB. O Sicoob parou de calcular o DV como padrão no arquivo de e está utilizando os 8 dígitos para a numeração. Informação confirmada pelo suporte do banco.
Leonardo Batista Postado 29 Outubro Autor Postado 29 Outubro Boa Tarde @Daniel InfoCotidiano, já utilizo a emissão de boletos Sicoob em vários clientes há um tempo e semana passada fui surpreendido com os mesmos reclamando da situação apresentada. Como pode ver nos prints em conversa com o Suporte da Api do Sicoob eles informaram que não estão calculando mais o DV e que esta mudança foi feita sem aviso prévio. Portanto precisei modificar o componente do ACBR para que ele parasse de calcular o DV, tendo em vista que sempre que o componente necessita do nosso número ele calcula e concatena o DV. Pode até ser uma questão de particularidade para as pessoas que optaram por não controlar o nosso número pelo sistema e deixaram para o banco fazer o mesmo e retornar. Assim como o Filipe Martins informou, também temos o Robson_Renan relatando a mesma situação do DV onde foi pedido que ele criasse uma nova postagem para discutir o assunto
Membros Pro VEXCOM Sistemas - Valtair Postado 31 Outubro Membros Pro Postado 31 Outubro Estamos com o mesmo problema Por sorte, estou gravando o boleto PDF que o banco retorna em base 64, ai consegui reimprimir este. Mas para clientes que usam CNAB também está acontecendo, e ai ficou mais difícil resolver, alguém teve alguma solução, ou sabem se já foi submetido alguma solução pelo ACBr ?
Consultores Daniel InfoCotidiano Postado 31 Outubro Consultores Postado 31 Outubro @Leonardo Batista @VEXCOM Sistemas - Valtair Conseguem uma documentação sobre esta alteração? Isso é somente via API OU CNAB? 4 minutos atrás, VEXCOM Sistemas - Valtair disse: Mas para clientes que usam CNAB também está acontecendo, e ai ficou mais difícil resolver, alguém teve alguma solução, ou sabem se já foi submetido alguma solução pelo ACBr ? Pode dar mais detalhe, o que esta acontecendo qdo vc le o arquivo de retorno ? pode nos fornecer mais detalhes e um arquivo de retorno para analise? Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord
Consultores Daniel InfoCotidiano Postado 31 Outubro Consultores Postado 31 Outubro lendo com o time, é para funcionar como está, observe o que o suporte diz: Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord
Leonardo Batista Postado 31 Outubro Autor Postado 31 Outubro Realmente era para funcionar para todo mundo mesmo eles fazendo a alteração, mas eles não contavam que algumas pessoas poderiam estar calculando o DV a todo tempo. O único problema que temos é que a cada solicitação do nosso número a gente faz o cálculo do DV, e como não tem mais o DV por parte deles a gente sempre adiciona um caractere a mais. Temos esse método hoje no ACBR e todas as vezes que ele chama esse método ele adiciona um caractere junto ao nosso número. A única coisa que eu propus na solução e que já está rodando nos meus clientes foi colocar um IF. 1 hora atrás, Daniel InfoCotidiano disse: @Leonardo Batista @VEXCOM Sistemas - Valtair Conseguem uma documentação sobre esta alteração? Isso é somente via API OU CNAB? Pode dar mais detalhe, o que esta acontecendo qdo vc le o arquivo de retorno ? pode nos fornecer mais detalhes e um arquivo de retorno para analise? Encontrei esta informação no site de desenvolvedor deles (https://developers.sicoob.com.br/portal/documentacao?slugItem=novidades-e-atualizacoes) Nos prints ela também informa que está mudança é válida para a API e CNAB. Em relação aos arquivos de retorno não utilizo o ACBR para fazer a leitura deles, mas precisei alterar a forma que fazia a leitura para ler 1 caractere a mais no nosso número.
Consultores Daniel InfoCotidiano Postado 31 Outubro Consultores Postado 31 Outubro Certo. vou levar ao time, isso. Mas não seria necessário ter alterado pelo que entendi do próprio suporte deles e o proprio link e print q vc anexou 5 minutos atrás, Leonardo Batista disse: Em relação aos arquivos de retorno não utilizo o ACBR para fazer a leitura deles, mas precisei alterar a forma que fazia a leitura para ler 1 caractere a mais no nosso número. Para ler 1 caracter a mais, basta setar a propriedade lerNossoNumeroCompleto = true; Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord
Leonardo Batista Postado 31 Outubro Autor Postado 31 Outubro Esta propriedade tem efeito na hora da emissão dos boletos ? Caso tiver consegue me orientar onde ela está porque ai posso testar aqui se marcando ela como True resolve.
Consultores Daniel InfoCotidiano Postado 31 Outubro Consultores Postado 31 Outubro Comentei sobre a sua resposta: (mas no caso é retorno) Sobre sua contribuição, criei uma tarefa TK-6188 para análise do time. qdo concluído reportamos aqui. Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord
Leonardo Batista Postado 31 Outubro Autor Postado 31 Outubro Eu fiz essa alteração porque não utilizo o ACBR na leitura do arquivo CNAB. Faço a leitura toda na mão do arquivo. Fico no aguardo da análise, qualquer coisa estou à disposição para ajudar no que for possível
Moderadores Juliomar Marchetti Postado 31 Outubro Moderadores Postado 31 Outubro 51 minutos atrás, Leonardo Batista disse: Eu fiz essa alteração porque não utilizo o ACBR na leitura do arquivo CNAB. Faço a leitura toda na mão do arquivo. Fico no aguardo da análise, qualquer coisa estou à disposição para ajudar no que for possível Ali que está aqui estamos tratando componente tanto de emissão quanto retorno dos dados. Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Membros Pro VEXCOM Sistemas - Valtair Postado 4 Novembro Membros Pro Postado 4 Novembro Em 31/10/2024 at 13:20, Leonardo Batista disse: Realmente era para funcionar para todo mundo mesmo eles fazendo a alteração, mas eles não contavam que algumas pessoas poderiam estar calculando o DV a todo tempo. O único problema que temos é que a cada solicitação do nosso número a gente faz o cálculo do DV, e como não tem mais o DV por parte deles a gente sempre adiciona um caractere a mais. Temos esse método hoje no ACBR e todas as vezes que ele chama esse método ele adiciona um caractere junto ao nosso número. A única coisa que eu propus na solução e que já está rodando nos meus clientes foi colocar um IF. Encontrei esta informação no site de desenvolvedor deles (https://developers.sicoob.com.br/portal/documentacao?slugItem=novidades-e-atualizacoes) Nos prints ela também informa que está mudança é válida para a API e CNAB. Em relação aos arquivos de retorno não utilizo o ACBR para fazer a leitura deles, mas precisei alterar a forma que fazia a leitura para ler 1 caractere a mais no nosso número. 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 ACBrBancoSicoob.pas
Junior.Jaru Postado 7 Novembro Postado 7 Novembro Eu tive o mesmo problema, usei sua solução e ficou 100% obg!!! 1
Consultores Victor H. Gonzales - Panda Postado 6 Dezembro Consultores Postado 6 Dezembro Em 04/11/2024 at 15: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 · 3 downloads ACBrBancoSicoob.pas 82.96 kB · 3 downloads Boa tarde, o problema está somente quando o banco númera? se o banco não numerar não ocorre problema? e a linha digitavel em todos esses casos fica como? Victor H Gonzales - Pandaaa Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 !! "Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci "Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"
Leonardo Batista Postado 9 Dezembro Autor Postado 9 Dezembro Em 06/12/2024 at 15:24, Victor H. Gonzales - Panda disse: Boa tarde, o problema está somente quando o banco númera? se o banco não numerar não ocorre problema? Boa Tarde, Victor. A situação ocorre apenas quando o banco número. Se o banco não númerar a situação não ocorre. A linha digitavel não sofre alteração, a não ser pela situação do DV. Como demonstrei na primeira msg que enviei a unica diferença é a demonstrada abaixo: No exemplo o nosso número retornado pelo banco foi: 31144. Gerado pelo Banco: 75691300860112140710800311440010399100000001000 Gerado pelo ACBR: 75691300860112140710800311480016599100000001000
Consultores Victor H. Gonzales - Panda Postado 9 Dezembro Consultores Postado 9 Dezembro 1 hora atrás, Leonardo Batista disse: Boa Tarde, Victor. A situação ocorre apenas quando o banco número. Se o banco não númerar a situação não ocorre. A linha digitavel não sofre alteração, a não ser pela situação do DV. Como demonstrei na primeira msg que enviei a unica diferença é a demonstrada abaixo: No exemplo o nosso número retornado pelo banco foi: 31144. Gerado pelo Banco: 75691300860112140710800311440010399100000001000 Gerado pelo ACBR: 75691300860112140710800311480016599100000001000 há um chamado aberto junto ao sicoob, estamos no aguardo Victor H Gonzales - Pandaaa Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 !! "Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci "Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora