Atilo na formação do nosso numero fiz uma modificação para a carteira 11 de acordo com o entendimento pelo gbBoleto já que não temos a documentação do banco.
Como o convenio tem 7 posições o tamanho maximo do nr. de controle da será de 4 digitos.
function TACBrBancoBrasil.FormataNossoNumero(const ACBrTitulo :TACBrTitulo): String;
var
ANossoNumero, AConvenio : string;
aCarteira: LongInt;
TamDocCarteira11 : Integer;
begin
with ACBrTitulo do
begin
AConvenio := ACBrBoleto.Cedente.Convenio;
ANossoNumero := OnlyNumber(NossoNumero);
aCarteira := StrToIntDef(Carteira,0);
if (ACBrTitulo.Carteira = '16') or (ACBrTitulo.Carteira = '17') or (ACBrTitulo.Carteira = '18') then
begin
// CCCCNNNNNNN-X
if (Length(AConvenio) <= 4) and (fpTamanhoMaximoNossoNum = 7) then
ANossoNumero := padR(AConvenio, 4, '0') + padR(ANossoNumero, 7, '0')
// CCCCCCNNNNN-X
else if (Length(AConvenio) > 4) and (Length(AConvenio) <= 6) and (fpTamanhoMaximoNossoNum = 5) then
ANossoNumero := padR(AConvenio, 6, '0') + padR(ANossoNumero, 5, '0')
// CCCCCCCNNNNNNNNNN
else if (Length(AConvenio) = 7) and (fpTamanhoMaximoNossoNum = 10) then
ANossoNumero := padR(AConvenio, 7, '0') + padR(ANossoNumero, 10, '0')
// NNNNNNNNNNNNNNNNN
else if (Length(AConvenio) > 4) and (Length(AConvenio) <= 6) and (fpTamanhoMaximoNossoNum = 17)
and ((ACBrTitulo.Carteira = '16') or (ACBrTitulo.Carteira = '18')) then
ANossoNumero := padR(ANossoNumero, 17, '0')
end
else
begin
// CCCCCCCNNNN - O tamanho da carteira e nr doc e variavel mas a soma tem que fechar 11
TamDocCarteira11 := 11 - Length(AConvenio);
ANossoNumero := Copy(ANossoNumero, 11 - TamDocCarteira11, TamDocCarteira11);
ANossoNumero := padR(AConvenio, Length(AConvenio), '0') +
padR(ANossoNumero , 11 - Length(AConvenio), '0');
end;
end;
Result := ANossoNumero;
end;