- 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

Moderador: Moderadores
HASA escreveu:não entendi como incorporar a conta da CALCULO DO NOSSO número:
Constante para cálculo = 3197
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
//*----------------------------------------------------------------------------*
//
// 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
Retornar para Contribuições, Dicas e Tutoriais
Usuários vendo este fórum: Nenhum usuário registrado online e 19 visitantes