Boa tarde,
A geração do código de barras na Unit "ACBrBancoSicredi.pas" está ficando errada.
Segue a função modificada. Acabei de homologar os boletos em meu cliente e só passaram nos testes com esta modificação.
function TACBrBancoSicredi.MontarCodigoBarras ( const ACBrTitulo: TACBrTitulo) : String; var CodigoBarras, FatorVencimento, DigitoCodBarras, CampoLivre, Modalidade:String; DigitoNum: Integer; begin with ACBrTitulo.ACBrBoleto do begin FatorVencimento := CalcularFatorVencimento(ACBrTitulo.Vencimento); Modalidade := IfThen(Cedente.Modalidade='','1',Copy(trim(Cedente.Modalidade),1,1)); // wNossoNumeroCompleto := OnlyNumber(MontarCampoNossoNumero(ACBrTitulo)); { Monta o campo livre } CampoLivre := Modalidade + { 1-Com registro ou 3-Sem registro. Por enquanto vou deixar 1 mais tenho que tratar menhor essa informação } '1' + { 1-Carteira simples } OnlyNumber(MontarCampoNossoNumero(ACBrTitulo)) + //padR(ACBrTitulo.NossoNumero,8,'0') + { Nosso número + DV } //CalcularDigitoVerificador(ACBrTitulo) + { Dígito verificador do nosso número } padR(OnlyNumber(Cedente.Agencia),4,'0') + { Código agência (cooperativa) } padR(Cedente.AgenciaDigito,2,'0') + { Dígito da agência (posto da cooperativa) } padR(OnlyNumber(Cedente.CodigoCedente),5,'0') + { Código cedente } // Ver manual página 86 - CNAB240 ou 51 - CNAB400 '1' + { Filler - zero. Obs: Será 1 quando o valor do documento for diferente se zero } '0'; { Filler - zero } { Calcula o dígito do campo livre } Modulo.CalculoPadrao; Modulo.MultiplicadorFinal := 9; Modulo.Documento := CampoLivre; Modulo.Calcular; CampoLivre := CampoLivre + IntToStr(Modulo.DigitoFinal);
{ Monta o código de barras } CodigoBarras := IntToStr( Numero ) + { Código do banco 748 } '9' + { Fixo '9' } FatorVencimento + { Fator de vencimento, não obrigatório } IntToStrZero(Round(ACBrTitulo.ValorDocumento*100),10) + { valor do documento } CampoLivre; { Campo Livre }
DigitoCodBarras := CalcularDigitoCodigoBarras(CodigoBarras); DigitoNum := StrToIntDef(DigitoCodBarras,0);
if (DigitoNum = 0) or (DigitoNum > 9) then DigitoCodBarras:= '1'; end;
Result:= IntToStr(Numero) + '9'+ DigitoCodBarras + Copy(CodigoBarras,5,39); end;