Clipper On Line • Ver Tópico - MRBoleto pronto para o uso.

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

 

MRBoleto pronto para o uso.

Mensagempor HASA » 02 Fev 2021 09:08

- 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
Avatar de usuário

HASA
Colaborador

Colaborador
 
Mensagens: 1082
Data de registro: 01 Set 2003 19:50
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 51 vezes

MRBoleto pronto para o uso.

Mensagempor alxsts » 02 Fev 2021 16:51

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

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)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

MRBoleto pronto para o uso.

Mensagempor HASA » 02 Fev 2021 18:33

- Boa Noite alxsts , agradeço ficou super claro.
:-)
HASA
Avatar de usuário

HASA
Colaborador

Colaborador
 
Mensagens: 1082
Data de registro: 01 Set 2003 19:50
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 51 vezes

MRBoleto pronto para o uso.

Mensagempor adzdoni » 04 Ago 2022 09:14

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
adzdoni
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 5
Data de registro: 29 Jan 2007 18:57
Cidade/Estado: ARAPONGAS PR
Curtiu: 0 vez
Mens.Curtidas: 1 vez

MRBoleto pronto para o uso.

Mensagempor Alexandre Silva » 04 Ago 2022 10:52

Opa
No meu Mrboleto eu fiz esses ajustes abaixo e funcionou

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



//*----------------------------------------------------------------------------*
//
// 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
Avatar de usuário

Alexandre Silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 351
Data de registro: 26 Mar 2007 00:16
Cidade/Estado: Itapema - SC
Curtiu: 34 vezes
Mens.Curtidas: 6 vezes

MRBoleto pronto para o uso.

Mensagempor adzdoni » 22 Ago 2022 11:55

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 47 vezes
adzdoni
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 5
Data de registro: 29 Jan 2007 18:57
Cidade/Estado: ARAPONGAS PR
Curtiu: 0 vez
Mens.Curtidas: 1 vez

MRBoleto QRCODE

Mensagempor Alexandre Silva » 01 Ago 2023 10:33

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 de usuário

Alexandre Silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 351
Data de registro: 26 Mar 2007 00:16
Cidade/Estado: Itapema - SC
Curtiu: 34 vezes
Mens.Curtidas: 6 vezes

MRBoleto pronto para o uso.

Mensagempor JoséQuintas » 01 Ago 2023 16:09

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

MRBoleto pronto para o uso.

Mensagempor Alexandre Silva » 01 Ago 2023 17:26

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 de usuário

Alexandre Silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 351
Data de registro: 26 Mar 2007 00:16
Cidade/Estado: Itapema - SC
Curtiu: 34 vezes
Mens.Curtidas: 6 vezes

MRBoleto pronto para o uso.

Mensagempor JoséQuintas » 01 Ago 2023 19:55

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18113
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1213 vezes

Anterior



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 4 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro