Marca Posted July 22, 2021 Report Share Posted July 22, 2021 Boa tarde Pessoal Alguém que utilize o Harbour boleto para emissão e que tenha homologado recentemente ? Estou com problemas no cálculo da linha digitável. Se alguém puder ajudar ficarei grato. Quote Link to comment Share on other sites More sharing options...
macs Posted July 22, 2021 Report Share Posted July 22, 2021 Envia o manual e também posta como você está fazendo. Quote Link to comment Share on other sites More sharing options...
Marca Posted July 22, 2021 Author Report Share Posted July 22, 2021 Macs. Obrigado pelo Retorno Quem usa o HarbourBoleto são vários os cálculos Data base para o cálculo do fator de vencimento -> #DEFINE dDataBase CTOD("03/07/2000") METHOD Execute( ) CLASS oBoleto CASE ::cCodBco == "756" // SICOOB - Eroni ::cNumAgencia := STRZERO(VAL(::cNumAgencia), 4) ::cNumCC := STRZERO(VAL(::cNumCC) , 7) ::cCDPF := Strzero( Val( ::cCDPF ),6 ) cAgcc := ::cNumAgencia + "/" + ::cCDPF + ::cDVCDPF cCarteiraImpressao := Left(::cCarteira,1) // "1" IF EMPTY(::cTipoCob) ::cTipoCob := "1" // Cobranca 1-Simples 5-Escritural ENDIF // Sicoob, nosso numero com 7 digitos ::cNossoNumero := StrZero( Val( ::cNossoNumero ), 7 ) ::cDGNN := DC_ModEsp( ::cCodBco, ::cNumAgencia + Strzero( Val( ::cCDPF ),9 ) + ::cDVCDPF + ::cNossoNumero ) ::cNsNm := ::cNossoNumero + ::cDGNN cCpoLivre := cCarteiraImpressao + ::cNumAgencia + StrZero( Val( ::cTipoCob ),2 ) + ::cCDPF + ::cDVCDPF + ::cNsNm + "001" // teste eroni endcase cFatorVenc := STRZERO( ::DtVenc - dDataBase , 4 ) IF ::cCodBco == "001" .OR. ; // Alterado dia 04-06-2021* ::cCodBco == "756" cFatorVenc := STRZERO( ( ::DtVenc - dDataBase ) + 1000 , 4 ) ENDIF // Monta Código de Barras (p/ Banco) cDGCB := DC_Mod11( ::cCodBco, 9, .T., ::cCodBco + ::cTipoMoeda + cFatorVenc + STRZERO( ::nValor * 100, 10) + cCpoLivre ) ::cCodBar := ::cCodBco + ::cTipoMoeda + cDGCB + cFatorVenc + STRZERO( ::nValor * 100, 10 ) + cCpoLivre // 3 1 1 4 10 25 nY := 0 FOR nX := 1 TO LEN( ::cCodBar ) STEP 2 ::Merge( STRZERO( nY++, 2 ), SUBSTR( ::cCodBar, nX, 2 ) ) NEXT // Monta Representacao Numerica do Codigo de Barras * Campo1 ** cC1RN := ::cCodBco + ::cTipoMoeda + LEFT( cCpoLivre, 5 ) cC1RN := cC1RN + DC_Mod10( ::cCodBco, cC1RN ) cC2RN := SUBSTR(cCpoLivre, 6, 10) cC2RN += DC_Mod10(::cCodBco, cC2RN) cC3RN := SUBSTR(cCpoLivre, 16, 20) cC3RN += DC_Mod10(::cCodBco, cC3RN) cC4RN :=cDGCB cC5RN := cFatorVenc + STRZERO(::nValor * 100, 10) // Linha digitavel ::cRNCB := LEFT(cC1RN, 5) + "." + SUBSTR(cC1RN, 6) + " " + LEFT(cC2RN, 5) + "." +; SUBSTR(cC2RN, 6) + " " + LEFT(cC3RN, 5) + "." + SUBSTR(cC3RN, 6) + " " + cC4RN + " " + cC5RN ::Merge("LINDIG", ::cRNCB) IF ::lBoleto FWRITE(Self:nHandle, Self:Bolhtm) ENDIF /* -------------------------------------------------------------------------- */ // Retorna Dígito de Controle Módulo 10 // FUNCTION DC_Mod10( cCodBco, mNMOG ) LOCAL mVLDG, mSMMD, mCTDG, mRSDV, mDCMD mSMMD:=0 FOR mCTDG := 1 TO LEN(mNMOG) mVLDG := VAL(SUBSTR(mNMOG, LEN(mNMOG) - mCTDG + 1, 1)) * IF(MOD(mCTDG,2) == 0, 1, 2) mSMMD += mVLDG - IF(mVLDG > 9, 9, 0) NEXT mRSDV := MOD(mSMMD, 10) mDCMD := IF(mRSDV == 0, "0", STR(10 - mRSDV, 1)) RETURN mDCMD FUNCTION DC_Mod11( mCDBC, mBSDG, mFGCB, mNMOG, lMult10 ) LOCAL mSMMD, mCTDG, mSQMP, mRSDV, mDCMD DEFAULT mFGCB TO .F., lMult10 TO .F. mSMMD := 0 IF mCDBC == "756" mSQMP := 4 ELSE mSQMP := 2 ENDIF FOR mCTDG := 1 TO LEN(mNMOG) IF mCDBC == "756" // SICOOB mSMMD += ( VAL( SUBSTR( mNMOG, mCTDG, 1 ) ) * mSQMP ) mSQMP -- IF mSQMP < 2 mSQMP := mBSDG ENDIF ELSE mSMMD += VAL(SUBSTR(mNMOG, LEN(mNMOG) - mCTDG + 1, 1)) * (mSQMP) mSQMP := IF(mSQMP == mBSDG, 2, mSQMP+1) ENDIF NEXT IF lMult10 mSMMD *= 10 ENDIF mRSDV := MOD(mSMMD, 11) IF mFGCB mDCMD := IF(mRSDV > 9 .OR. mRSDV < 2, "1", STR(11 - mRSDV, 1)) ELSE IF mCDBC == "001" // Brasil mDCMD := IF(mRSDV == 0, "0", IF(mRSDV == 1, "X", STR(11 - mRSDV, 1))) ELSEIF mCDBC like "(008|033|353)" //Santander Banespa mDCMD := IF(mRSDV < 2, "0", IF(mRSDV == 10, "1", STR(11 - mRSDV, 1))) //mDCMD := IF(mRSDV == 0, "0", IF(mRSDV == 1, "X", STR(11 - mRSDV, 1))) ELSEIF mCDBC=="104" // Caixa mRSDV := 11 - mRSDV mDCMD := IF(mRSDV > 9, "0", STR(mRSDV, 1)) ELSEIF mCDBC == "237" // Bradesco mDCMD := IF(mRSDV == 0, "0", IF(mRSDV == 1, "P", STR(11 - mRSDV, 1))) ELSEIF mCDBC == "341" // Itau mDCMD := IF(mRSDV == 11, "1", STR(11 - mRSDV, 1)) ELSEIF mCDBC == "409" // Unibanco mDCMD := IF(mRSDV == 0 .OR. mRSDV == 10, "0", STR(mRSDV, 1)) ELSEIF mCDBC == "422" // Safra mDCMD := IF(mRSDV==0, "1", IF(mRSDV == 1, "0", STR(11 - mRSDV, 1))) ELSEIF mCDBC == "756" // Sicoob * IF mRSDV == 0 .OR. mRSDV == 1 * mDCMD := "0" IF mRSDV == 0 mDCMD := "1" ELSE mDCMD := STR(11 - mRSDV, 1) ENDIF ENDIF ENDIF RETURN mDCMD // Retorna Dígito de Controle Módulo Especial FUNCTION DC_ModEsp( cCodBco, mNMOG ) LOCAL mVLDG, mSMMD, mCTDG, mSQMP, mRSDV, mDCMD:=0 DO CASE CASE cCodBco == "033" // santander mSMMD:=0 mSQMP:=3 FOR mCTDG := 1 TO LEN(mNMOG) mVLDG := VAL(SUBSTR(mNMOG, LEN(mNMOG) - mCTDG + 1, 1)) * (mSQMP) mSMMD += mVLDG - (INT(mVLDG / 10) * 10) mSQMP := IF(mSQMP == 3, 7, IF(mSQMP == 7, 9, IF(mSQMP == 9, 1, 3))) NEXT mRSDV := mSMMD - (INT(mSMMD / 10) * 10) mDCMD := IF(mRSDV == 0, 0, 10 - mRSDV) CASE cCodBco == "756" // Sicoob mSMMD := 0 mSQMP := 3 FOR mCTDG := 1 TO LEN(mNMOG) mVLDG := VAL( SUBSTR( mNMOG , mCTDG, 1 ) ) * mSQMP mSMMD += mVLDG DO CASE CASE mSQMP == 3 ; mSQMP := 1 CASE mSQMP == 1 ; mSQMP := 9 CASE mSQMP == 9 ; mSQMP := 7 CASE mSQMP == 7 ; mSQMP := 3 ENDCASE NEXT mRSDV := Int( Mod( mSMMD, 11) ) IF mRSDV == 0 .OR. mRSDV == 1 mDCMD := 0 ELSE mDCMD := 11 - mRSDV ENDIF CASE cCodBco == "136" // Unicred mSMMD := 0 mSQMP := 2 FOR mCTDG := LEN(mNMOG) TO 1 STEP -1 mVLDG := VAL( SUBSTR( mNMOG , mCTDG, 1 ) ) * mSQMP mSMMD += mVLDG mSQMP ++ IF mSQMP > 9 mSQMP := 2 ENDIF NEXT mRSDV := Int( Mod( mSMMD, 11) ) IF mRSDV == 0 .OR. mRSDV == 1 mDCMD := 0 ELSE mDCMD := 11 - mRSDV ENDIF ENDCASE RETURN Str(mDCMD,1) Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted July 23, 2021 Report Share Posted July 23, 2021 Bom dia, Uma outra opção, na página abaixo você se cadastra e pode usar a "API" do SICOOB e emitir o(s) boleto(s) de forma on-line. https://developers.sicoob.com.br/#!/cadastro Objetivo. No Guia do Sicoob Open Banking, você encontra as informações necessárias para se integrar com nossas APIs. O desenvolvedor pode criar rapidamente produtos e aplicativos seguros e personalizados e testar de forma bem simples a integração com nossas APIs. Sem arquivos "remessa" ou "retorno". Abraço. Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted July 23, 2021 Report Share Posted July 23, 2021 Para quem quiser outros manuais para emissão de boleto on-line de outros bancos.. Bradesco http://www.wsiscom.com.br//download/Bradesco_boleto_online.rar Itau http://www.wsiscom.com.br/download/Itau_boleto_online.rar Santander http://www.wsiscom.com.br/download/Santander_boleton_online.rar Quote Link to comment Share on other sites More sharing options...
HASA Posted July 23, 2021 Report Share Posted July 23, 2021 Marcelo, envia os dados para eu gerar o boleto aqui HASA Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.