Jump to content

dev botao

Boleto Sicred Api V2 Dac Diferente do 2 Via Do banco e digito verificador


Azambuja99
Go to solution Solved by Azambuja99,

Recommended Posts

  • Membros Pro

Boa tarde, 

Estou com uma dificuldade ao gerar um boleto pelo Sicred APi V2 

** Gerado pela minha app
74899983500000000901124208912509030239430106


** 2 via Banco me devolveu
74899983500000000901124208912509030239430106
Banco: 748-0 ― Banco Cooperativo Sicredi S. A.
Vencimento: 10/09/2024
Valor: R$ 0,90
Linha digitável: 74891.12420 08912.509034 02394.301069 9 98350000000090
Código de Barras: 74899983500000000901124208912509030239430106

** Boleto Acbr lido pelo codigo de barras
Banco: 748-0 ― Banco Cooperativo Sicredi S. A.
Vencimento: 10/09/2024
Valor: R$ 0,90
Linha digitável: 74890.12422 08912.509034 02394.301044 4 98350000000090
Código de Barras: 74894983500000000900124208912509030239430104

 

enviarei email com logs  [email protected]

 

Link to comment
Share on other sites

  • Consultores

@Azambuja99 No sicredi temos algumas particularidades, não sei se vc chegou a ver isso:

3.3 Sicredi

ACBrTitulo.ACBrBoleto.Cedente.AgenciaDigito: Valor informado pelo banco como Posto Beneficiário, com 2 digitos.

Modalidade: Tipo de cobrança, 1- Com Registro ou diferente de 1 -Sem registro (atualmente em vigor somente cobrança com registro).

Titulo[x].CodigoGeração: Valor definido pelo banco como sendo o Byte de geração.

Titulo[x].CodigoMora: A- Valor ou B-Percentual.

Titulo[x].Informativo: Stringlist para envio de texto a ser impresso no boleto quando o mesmo é feito pelo banco.

Quando o banco gerar nosso número, informar 600 na propriedade CodigoGeracao e RespEmis = BancoEmite:
Titulo[x].CodigoGeracao     := '600';
ACBrBoleto.Cedente.RespEmis = ACBrResponEmissao.tbBancoEmite;

Lembrete: Atualmente o banco esta retornando nosso numero com inicio 600, favor conferir se esta batendo nossoNumero quando criado por eles.

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Link to comment
Share on other sites

  • Membros Pro

Sim, Sicred e complicado

Meu problema mesmo e minha App gera o codigo de barras igual ao que consigo pegar no segunda via do Boleto que enviei via API com a DLL, 

porem quando visualizo o boleto pela DLL o codigo de barras fica diferente. 

Creio que to configurando a Dll errado ou algo assim 

os itens diferente que encontrei foi CodigoGeracao = ta 2 pois se colocar o padrao 242 que seria o AA Byte 

enviei o log e .ini das configurações no email 

 

obrigado 

Link to comment
Share on other sites

  • Consultores

@Azambuja99
Por favor configure a MODALIDADE como 1, lembrando q agencia tem 4 digitos
 

Citar

 

[BoletoCedenteConfig]
Agencia=0XX3
AgenciaDigito=02

...
Modalidade=0

 


image.png

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Link to comment
Share on other sites

  • Membros Pro

testei com a modalidade 

da a impressão que e o DAC e o digito verificador

Gerado pela minha app

24209000-8
7489 8 986 40000003000 3 124209000 4 6789021234510 5
Boleto Acbr lido pelo codigo de barras
7489 5 986 40000003000 1 124209000 8 6789031234510 8

24209001- 6

Gerado pela minha app
7489 2 989 50000003000 3 124209001 2 6789021234510 0
Boleto Acbr lido pelo codigo de barras
7489 1 989  50000003000 1 124209001 6 6789031234510 3
 

Meu Codigo C#

Creio que o erro ocorre no DV do nosso numero que dai desencadeia os erros 

Nosso Numero 24209000 

public string DV_748(object _NUMERO)
{
    //* FUNCAO QUE RETORNA O DIGITO VERIFICADOR DE UM NUMERO DO BANCO SICREDI
    int _I;
    decimal _SOMA, _MULT;
    string _DV;

    _NUMERO = (_NUMERO is Int64 ? STRZERO(_NUMERO.As<Int64>(), 8, 0) : _NUMERO.ToString().PadRight(8).PadLeft(8, '0'));
    //_NUMERO = Iif(Type("_NUMERO") = "N", STRZERO(_NUMERO, 8, 0), Padl(Right(_NUMERO, 8), 8, "0"))
    _NUMERO = STRZERO(bancos["agencia"].As<decimal>(), 4, 0) + STRZERO(bancos["operacao"].As<Int64>(), 2, 0) +
              STRZERO(bancos["convenio"].As<Int64>(), 5, 0) + _NUMERO;
    _SOMA = 0;
    for (_I = 19; _I >= 1; _I--)
    {
        _MULT = (_I >= 12 ? 21 - _I : (_I >= 4 ? 13 - _I : 5 - _I));
        _SOMA = _SOMA + _MULT * _NUMERO.ToString().Substring(_I - 1, 1).As<Int64>();
    }
    _DV = (11 - (_SOMA % 11)).ToString();
    _DV = (_DV.As<Int64>() >= 10 ? "0" : _DV.AsStringLimit(1));
    return _DV;
}

_CAMPO_LIV = (bancos["registro"].As<Int64>() == 0 ? "1" : "3") + "1" + STRZERO(_NOSSO_NUM, 7, 0) + _DV_NOSSO_NUM +
    STRZERO(bancos["agencia"].As<Int64>(), 4, 0) + STRZERO(bancos["operacao"].As<Int64>(), 2, 0)
    + STRZERO(bancos["convenio"].As<Int64>(), 5, 0) + "1" + "0";

_CD_BARRA = "748" + (bancos["moeda"].Equals("9") ? "9" : "0") + STRZERO(FATOR_VENC_748(_DT_VENC), 4, 0) +
            STRZERO(_VL_TITULO * 100, 10, 0) + _CAMPO_LIV + digSicredi(_CAMPO_LIV);

_CD_BARRA = _CD_BARRA.AsStringLimit(4) + DAC_CD_BARRA(_CD_BARRA) + _CD_BARRA.AsStringTrim().Substring(4);

 

public string DAC_CD_BARRA(string _CD_BARRA)
{
    //* RETORNA O DAC DE UM CODIGO DE BARRAS
    int _I, _LEN;
    decimal _SOMA, _DIGITO, _MULT;
    string _DV = "";
    _LEN = _CD_BARRA.Length;
    _MULT = 2;
    _SOMA = 0;
    for (_I = _LEN; _I >= 1; _I--)
    {
        _DIGITO = _CD_BARRA.Substring(_I - 1, 1).As<Int64>();
        _SOMA = _SOMA + _DIGITO * _MULT;
        _MULT = (_MULT == 9 ? 2 : _MULT + 1);
    }
    _DV = (11 - (_SOMA % 11)).ToString();
    _DV = (_DV.As<Int64>() >= 10 ? "1" : (_DV.As<decimal>().ToString("N0").AsStringLimit(1)));
    return _DV;
}

public int digSicredi(string seq)
{
    /* Variáveis
     * -------------
     * d - Dígito
     * s - Soma
     * p - Peso
     * b - Base
     * r - Resto
     */

    int d, s = 0, p = 2, b = 9;

    for (int i = seq.Length - 1; i >= 0; i--)
    {
        s = s + (Convert.ToInt32(seq.Substring(i, 1)) * p);
        if (p < b)
            p = p + 1;
        else
            p = 2;
    }

    d = 11 - (s % 11);
    if (d > 9)
        d = 0;
    return d;
}

public Int64 FATOR_VENC(DateTime _DT_VENC)
{
    int diferencasEmDias = 0, nFator = 0;
    diferencasEmDias = (_DT_VENC.Date - "07/10/1997".As<DateTime>()).Days;
    while (diferencasEmDias > 9999)
    {
        diferencasEmDias = diferencasEmDias - 9999 + 999;
    }
    nFator = diferencasEmDias;
    //* RETORNA O NUMERO DO FATOR DE VENCIMENTO DE UM TITULO
    return nFator;
}

Meu teste ainda diferente 

 

 

ACBrLibBoleto-20240909.log ACBrLibBoleto01.ini Boleto_123575.pdf Boleto_123574.pdf

Link to comment
Share on other sites

  • Consultores

@Azambuja99
Bom dia !
Vc nao está utilizando a LIbBoleto ?
Ele abstrai todos estes calculos para vc.
vc so informa o nosso numero assim: 1, 2,3 ,..50,..100
ele concatena quando precisa e  cria o digito verificador.
Unica coisa q vc precisa é passar a informacao do cedente e boleto
Consegue testar com o exemplo c#?

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Link to comment
Share on other sites

  • Membros Pro
  • Solution

Bom dia,

Consegui deixar igual os 2 nesse DV tava colocando um outro campo aqui que antigamente usava para Operação 

a Principio vai da certo testar no cliente e registrar os boletos pra testar mais desde ja obrigado pela atenção

image.thumb.png.f20f50f655b6ed71dc50751815fc4ce2.png

 

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.