Página 5 de 5

MRBoleto pronto para o uso.

Enviado: 02 Fev 2021 09:08
por HASA
- Bom dia, obrigado, amigo, vendo no manual não entendi como incorporar a conta da CALCULO DO NOSSO número:
Constante para cálculo = 3197 ? Alguem teria apenas essa parte para compartilhar.
:-(
HASA

MRBoleto pronto para o uso.

Enviado: 02 Fev 2021 16:51
por alxsts
Olá!
HASA escreveu:não entendi como incorporar a conta da CALCULO DO NOSSO número:
Constante para cálculo = 3197
É fácil, uma receita de bolo. Só seguir o manual.

Teu sistema vai gerar boletos de cobrança referentes a títulos emitidos pelo teu cliente. Para poder fazer isto, teu cliente precisa ter uma conta aberta junto ao banco (no caso o Sicoob, 756) e firmar um convênio junto ao banco para o registro e processamento dos boletos, através dos arquivos de remessa e retorno.
Com isto você vai ter:
==> o número da cooperativa, que é a agência e um número de conta corrente (que não é usado para geração do nosso número)
==> o código do cliente junto ao banco. Este número não é o número da conta corrente e sim o código de cliente atribuído pelo banco ao cliente quando da criação do convênio

Além disto, o teu sistema tem que armazenar e manter em algum lugar a numeração sequencial que será usada nos boletos (nosso número)

Segundo o manual:
3.13. Nosso número: Código de controle que permite ao Sicoob e à empresa identificar os dados da cobrança que deu origem ao boleto.

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) – vide planilha ""Capa"" deste arquivo
Código do Cliente 9(10) – vide planilha ""Capa"" deste arquivo
Nosso Número 9(7) – Iniciado 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 = 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

Código: Selecionar todos

FUNCTION TesteDV()
   
   Cls

   Alert( Str( DVNossoNumeroSicoob(), 1, 0 ) )

RETURN NIL
//----------------------------------------------------------
FUNCTION DVNossoNumeroSicoob( nCooper, nCodCli, nNossoNumero )
   
   LOCAL cSequencia
   LOCAL cFatores
   LOCAL nTotal
   LOCAL nDigito
   LOCAL nResto
   LOCAL s, f

   nCooper := If( nCooper == NIL, 1, nCooper )       // valor inicial conforme exemplo do manual
   nCodCli := If( nCodCli == NIL, 19, nCodCli )      // valor inicial conforme exemplo do manual
   nNossoNumero := If( nNossoNumero == NIL, 21, nNossoNumero ) // valor inicial conforme exemplo do manual (trazer da tua base de dados)

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

   cSequencia := StrZero( nCooper, 4 ) + ;
                 StrZero( nCodCli, 10 ) + ;
                 StrZero( nNossoNumero, 7 )  // Total de 21 bytes

   /* b) Alinhar a constante com a seqüência repetindo de traz para frente.
      Ex.: 000100000000190000021
           319731973197319731973 */
            
   cFatores := Left( Replicate( "3197", 6 ), 21 )  // Total de 21 bytes

   /* 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 */

   nTotal := 0

   For Each s, f In cSequencia, cFatores
     nTotal += Val(s) * Val(f)
   Next

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

   /* 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 */
   nDigito := If( nResto <= 1, 0, 11 - nResto )
   
RETURN nDigito

MRBoleto pronto para o uso.

Enviado: 02 Fev 2021 18:33
por HASA
- Boa Noite alxsts , agradeço ficou super claro.
:-)
HASA

MRBoleto pronto para o uso.

Enviado: 04 Ago 2022 09:14
por adzdoni
Bom dia a todos

Gostaria de ajuda com o codigo de barras do
boleto sicredi (mrboleto.)
O meu problema esta no codigo de barras, envio a linha digitavel sem os
pontos e espacos para imprimir. Ele imprime, porem aparece o numero 0(zero)
a esquerda.
Exemplo: linha digitavel 74891.12222 00157.907239 23348.021058 9
90570000029704
envio para imprimir assim: 74891122220015790723923348021058990570000029704
Apos a impressao, quando passo o leitor fica assim
074891122220015790723923348021058990570000029704, este zero nao deixa o
boleto ser pago no caixa eletronico, diz que o tamanho é incompativel. Se
digitar a linha digitavel passa e faz o pagamento.
Uso para o banco Itau a muitos anos, nunca deu este problema.
Alguem ja possou por isso e tem a solucao ? obrigado.
Donizete

MRBoleto pronto para o uso.

Enviado: 04 Ago 2022 10:52
por Alexandre Silva
Opa
No meu Mrboleto eu fiz esses ajustes abaixo e funcionou

Código: Selecionar todos

//*----------------------------------------------------------------------------*
//
// M., Ronaldo: Boleto Bancario em Harbour
//
// Method Banco_748() Class MR_Boleto
//
//*----------------------------------------------------------------------------*
Method Banco_748() Class MR_Boleto

   LOCAL cAux,vnosso,vposto,vbyte:='2'
   LOCAL vseqnosso := PADL( ALLTRIM( Left( ::NossoNumero__, 5 ) ), 5, '0' )
   LOCAL cAno := RIGHT(::NossoNumero__,2)
   * LOCAL cAno := RIGHT( hb_NtoS( YEAR(::Doc_Data_____ ) ), 2 )

   ::Banco_Dv_____ := "X"
   ::Banco_Nome___ := "Banco Cooperativo Sicredi"

   ::Carteira_____ := PADL( ALLTRIM( Left( ::Carteira_____, 2 ) ), 1, '0' )
   ::Carteira_Tipo := PADL( ALLTRIM( Left( ::Carteira_Tipo, 1 ) ), 1, '0' )

   ::Banco_Agencia := PADL( ALLTRIM( Left( ::Banco_Agencia, 4 ) ),  4, '0' )
   vposto := PADL( ALLTRIM( Left( ::Banco_Ag_Un_A, 2 ) ),  2, '0' )

   ::Conta________ := PADL( ALLTRIM( Left( ::Conta________, 5 ) ), 5, '0' )
   ::Conta_DV_____ := PADL( ALLTRIM( Left( ::Conta_DV_____, 1 ) ), 1, '0' )
   vcedente:= PADL( ALLTRIM( Left( ::Prefixo______, 5 ) ), 5, '0' )

   ::NossoNumero__ := cAno + '2' +vseqnosso  // 2+1+5 = 8

   cAux := ::Banco_Agencia + vposto + vcedente + cAno + vbyte + vseqnosso
   ::NossoNumer_DV := ::DC_Mod11( ::Banco________, 7, .F. , cAux, .F. )

   ::NossoNumero_z := cAno + '/' + '2' + vseqnosso+ '-' + ::NossoNumer_DV

   ::Ag_Cod_Cedent := ::Banco_Agencia + '.' + vposto + '.' + vcedente

   vnosso:=::NossoNumero__ +::NossoNumer_DV  // c 9
   ::Campo_Livre__ := ::Carteira_____ + ::Carteira_Tipo +vnosso
   ::Campo_Livre__ += ::Banco_Agencia + vposto + vcedente + '10'
   ::Campo_Livre__ += ::DC_Mod11( ::Banco________, 7, .F. , ::Campo_Livre__, .F. )

   Return NIL

Código: Selecionar todos

//*----------------------------------------------------------------------------*
//
// M., Ronaldo: Boleto Bancario em Harbour
//
// Method DC_Mod11( c_Banco, mBSDG, mFGCB, mNMOG, lMult10 ) Class MR_Boleto
//
// bradesco -> DC_Mod11("237", 7, .F., carteira+agencia+nossonumero, .F.)
// mFGCB // se .t. indica codigo de barras
// Cod_Barras_DV := ::DC_Mod11( ::Banco________, 9, .T. , ::Banco________ + ::Moeda________ + ::Vencim_Fator_ + StrZero( ::Valor________ * 100,10 ) + ::Campo_Livre__, .F. )
//*----------------------------------------------------------------------------*
Method DC_Mod11( c_Banco, mBSDG, mFGCB, mNMOG, lMult10 ) Class MR_Boleto
LOCAL mSMMD,mCTDG,mSQMP,mRSDV,mDCMD,vdifer,vpesos,tt,jj,vresto,vdv,vfat

   // mFGCB := IIF( EMPTY( mFGCB ), .F., mFGCB )
   // mFGCB := IIF( EMPTY( lMult10 ), .F., lMult10 )

   mSMMD := 0
   mSQMP := 2

   FOR mCTDG := 1 TO Len( mNMOG )
      mSMMD += Val( SubStr( mNMOG,Len(mNMOG ) - mCTDG + 1,1 ) ) * ( mSQMP )
      mSQMP := IF( mSQMP == mBSDG, 2, mSQMP + 1 )
   NEXT
   IF lMult10
      mSMMD *= 10
   ENDIF
   // if c_Banco == "748"  // sicredi formula abaixo
   //    mFGCB:=.f.
   //  endif

   mRSDV := ( mSMMD % 11 )
   IF mFGCB  // para codigo de barras aparentemente nao tem excecao
      mDCMD := IF( mRSDV > 9 .OR. mRSDV < 2, "1", Str( 11 - mRSDV,1 ) )
   ELSE
      IF c_Banco == "001"    // Brasil
         mDCMD := IF( mRSDV == 0, "0", IF( mRSDV == 1,"X",Str(11 - mRSDV,1 ) ) )

      ELSEIF c_Banco $ "008|033|353" //Santander Banespa

         mDCMD := IF( mRSDV < 2, "0", IF( mRSDV == 10,"1",Str(11 - mRSDV,1 ) ) )

      ELSEIF c_Banco == "748"  // sicredi
         vfat:=2
         tt:=0
         for jj:=len(mNMOG) to 1 step -1
             tt+=val(substr(mNMOG,jj,1))*vfat
             vfat++
             if vfat>9
                vfat:=2
             endif
         next
         vresto:=tt%11
         dv:=11-vresto
         if dv=10 .or. dv=11
            mDCMD:='0'
         else
            mDCMD:=str(dv,1)
         endif

      ELSEIF c_Banco == "756" .or. c_Banco == "085"
         vdifer:=11-mRSDV
         if vdifer=0 .or. vdifer=1 .or. vdifer>9
            mDCMD := '1'
         else
            mDCMD := Str(vdifer,1)
         endif
      ELSEIF c_Banco == "104"             // Caixa
         mRSDV := 11 - mRSDV
         mDCMD := IF( mRSDV > 9, "0", Str( mRSDV,1 ) )
      ELSEIF c_Banco == "237"             // Bradesco
         mDCMD := IF( mRSDV == 0, "0", IF( mRSDV == 1,"P",Str(11 - mRSDV,1 ) ) )
      ELSEIF c_Banco == "341"             // Itau
         mDCMD := IF( mRSDV == 11, "1", Str( 11 - mRSDV,1 ) )
      ELSEIF c_Banco == "409"             // Unibanco
         mDCMD := IF( mRSDV == 0 .OR. mRSDV == 10, "0", Str( mRSDV,1 ) )
      ELSEIF c_Banco == "422"             // Safra
         mDCMD := IF( mRSDV == 0, "1", IF( mRSDV == 1,"0",Str(11 - mRSDV,1 ) ) )
      ENDIF
   ENDIF

   RETURN mDCMD



MRBoleto pronto para o uso.

Enviado: 22 Ago 2022 11:55
por adzdoni
Ola Alexandre, deu certo a rotina que você passou. Vou anexar um arquivo ini do sicredi para ajudar outros colegas, obrigado.

MRBoleto QRCODE

Enviado: 01 Ago 2023 10:33
por Alexandre Silva
Opa
Uso o MrBoleto há bastante tempo
Alguem ja usou QrCode no Mrboleto ? Nao tenho esse metodo

MRBoleto pronto para o uso.

Enviado: 01 Ago 2023 16:09
por JoséQuintas
gerar o boleto é uma coisa, obter QRCode é outra.
Boleto com QRCode depende de API de banco.

MRBoleto pronto para o uso.

Enviado: 01 Ago 2023 17:26
por Alexandre Silva
Pensei que era feito um string com dados do boleto, gerava um QRCODE disso, e colocava na impressao do PDF do Boleto
Entao somente por API para ter QRCode ?

Uso sistema remessa retorno.

MRBoleto pronto para o uso.

Enviado: 01 Ago 2023 19:55
por JoséQuintas
Eu também pensava isso.
É o banco que vai fornecer um código pra ser usado como QRCode.
Sem API do banco, sem QRCode no boleto.