MRBoleto pronto para o uso.

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

MRBoleto pronto para o uso.

Mensagem 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
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

MRBoleto pronto para o uso.

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

MRBoleto pronto para o uso.

Mensagem por HASA »

- Boa Noite alxsts , agradeço ficou super claro.
:-)
HASA
adzdoni
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 29 Jan 2007 19:57
Localização: ARAPONGAS PR

MRBoleto pronto para o uso.

Mensagem 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
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

MRBoleto pronto para o uso.

Mensagem 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


* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
adzdoni
Usuário Nível 1
Usuário Nível 1
Mensagens: 5
Registrado em: 29 Jan 2007 19:57
Localização: ARAPONGAS PR

MRBoleto pronto para o uso.

Mensagem por adzdoni »

Ola Alexandre, deu certo a rotina que você passou. Vou anexar um arquivo ini do sicredi para ajudar outros colegas, obrigado.
Anexos
EXEMPLO.INI
exemplo arquivo ini para sicredi mrboleto
(869 Bytes) Baixado 201 vezes
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

MRBoleto QRCODE

Mensagem por Alexandre Silva »

Opa
Uso o MrBoleto há bastante tempo
Alguem ja usou QrCode no Mrboleto ? Nao tenho esse metodo
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MRBoleto pronto para o uso.

Mensagem por JoséQuintas »

gerar o boleto é uma coisa, obter QRCode é outra.
Boleto com QRCode depende de API de banco.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

MRBoleto pronto para o uso.

Mensagem 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.
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MRBoleto pronto para o uso.

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder