Ir para conteúdo
  • Cadastre-se

dev botao

Dígito verificador errado do Banco do Brasil


visageplus
Ver Solução Respondido por Juliana Tamizou,
  • Este tópico foi criado há 3124 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia pessoal.

O Dígito Verificador do Banco do Brasil esta saindo errado.

Está saindo assim: 00190.00009 02675.174003 00026.815183 9 65980000006675
O Correto é:           00190.00009 02675.174003 00026.815183 8 65980000006675

Está saindo um 9, sendo que deveria ser 8.

Como resolvo?

Link para o comentário
Compartilhar em outros sites

  • Administradores
  • Solution

Boa tarde.

Favor fornecer mais informações para que possamos te ajudar. (Os valores passados ao componente)

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

Segue a baixo o código.

procedure TfrmAcbrBoleto.GerarBoletos;

var
  sOrientacoes : TStringList;
begin
  if not Critica then
    Exit;

  with ACBrBoleto, FormContasReceber do
  begin
    ListadeBoletos.Clear;
    sOrientacoes := TStringList.Create;
    try
      MQContasReceber.DisableControls;
      MQContasReceber.first;
      while not MQContasReceber.eof do
      begin

        If MQContasReceberMarca.AsString <> '*' then
        begin
          MQContasReceber.Next;
          continue;
        end;

        sOrientacoes.Clear;

        With ACBrBoleto.Banco do
        begin
          sOrientacoes.Add('Orientações!');
          ACBrBoleto.Banco.OrientacoesBanco := sOrientacoes;

          case MQBoletoBANCO_BOL.asInteger of
            001: ACBrBoleto.Banco.TipoCobranca := cobBancoDoBrasil;
            004: ACBrBoleto.Banco.TipoCobranca := cobBancoDoNordeste;
            021: ACBrBoleto.Banco.TipoCobranca := cobBanestes;
            033,
            353,
            008: ACBrBoleto.Banco.TipoCobranca := cobSantander;
            041: ACBrBoleto.Banco.TipoCobranca := cobBanrisul;
            070: ACBrBoleto.Banco.TipoCobranca := cobBRB;
            104: ACBrBoleto.Banco.TipoCobranca := cobCaixaEconomica;
            237: ACBrBoleto.Banco.TipoCobranca := cobBradesco;
            341: ACBrBoleto.Banco.TipoCobranca := cobItau;
            389: ACBrBoleto.Banco.TipoCobranca := cobBancoMercantil;
            748: ACBrBoleto.Banco.TipoCobranca := cobSicred;
            756: ACBrBoleto.Banco.TipoCobranca := cobBancoob;
            399: ACBrBoleto.Banco.TipoCobranca := cobHSBC;
            422: ACBrBoleto.Banco.TipoCobranca := cobBancoSafra;
          end;
        end;

        Titulo:= ACBrBoleto.CriarTituloNaLista;

        with ACBrBoleto.Cedente do
        begin
         ACBrBoleto.Cedente.Nome          := Dtm.QueryEmpresaFantasia.asstring;
          if length(TiraCaracterDocumento(Trim(Dtm.QueryEmpresaCNPJF.asString))) = 11 then
            ACBrBoleto.Cedente.TipoInscricao := pFisica
          else
            ACBrBoleto.Cedente.TipoInscricao := pJuridica;
         ACBrBoleto.Cedente.CNPJCPF       := TiraCaracterDocumento(Trim(Dtm.QueryEmpresaCNPJF.AsString));
         ACBrBoleto.Cedente.Agencia       := MQBoletoAGENCIA_BOL.AsString;
         ACBrBoleto.Cedente.AgenciaDigito := MQBoletoAGENCIADIGITO_BOL.AsString;
         ACBrBoleto.Cedente.Conta         := MQBoletoCONTA_BOL.AsString;
         ACBrBoleto.Cedente.ContaDigito   := MQBoletoCONTADIGITO_BOL.AsString;
         ACBrBoleto.Cedente.CodigoCedente := MQBoletoCODIGOCEDENTE_BOL.AsString;
         ACBrBoleto.Cedente.Convenio      := MQBoletoCONVENIO_BOL.asString;
         ACBrBoleto.Cedente.Logradouro    := Trim(Dtm.QueryEmpresaEndereco.AsString) + ', ' +
                                             Trim(Dtm.QueryEmpresaNumero.AsString) + ' - ' +
                                             Trim(Dtm.QueryEmpresaBairro.AsString) + ' - ' +
                                             Trim(Dtm.QueryEmpresaCidade.AsString) + '/' +
                                             Trim(Dtm.QueryEmpresaEstado.AsString) + ' CEP ' +
                                             Trim(Dtm.QueryEmpresaCEP.AsString);
        end;

        with Titulo do
        begin
          Titulo.LocalPagamento    := 'Pagar preferêncialmente nas agências do Banco';
          Titulo.Vencimento        := MQContasReceberVencimento.AsDateTime;
          Titulo.DataDocumento     := MQContasReceberEmissao.AsDateTime;
          If MQContasReceberNumNF.AsInteger > 0 then
           Titulo.NumeroDocumento   := MQContasReceberNumNF.AsString
          Else
           Titulo.NumeroDocumento   := Trim(MQContasReceberDocumento.AsString);
          Titulo.EspecieDoc        := MQBoletoESPECIEDOCUMENTO_BOL.AsString;
          if pos('SIM',UpperCase(MQBoletoACEITE_BOL.AsString))>0 then
            Titulo.Aceite          := atSim;
          Titulo.DataProcessamento := now;

          If MQContasReceberNOSSONUMERO.IsNull or (Trim(MQContasReceberNOSSONUMERO.AsString) = '') then
          begin
           MQBoleto.Edit;
           MQBoleto.FieldByName('NOSSONUMERO_BOL').AsString := IntToStr(MQBoletoNOSSONUMERO_BOL.AsInteger + 1);
           MQBoleto.Post;
           MQBoleto.CommitUpdates;
           MQContasReceber.Edit;
           MQContasReceber.FieldByName('NOSSONUMERO').AsString := IntToStrZero(MQBoletoNOSSONUMERO_BOL.AsInteger, MQBoletoNOSSONUMERODIGITOS_BOL.AsInteger);
           MQContasReceber.FieldByName('CODBOLETOORIGEM').AsInteger := MQBoletoCODIGO_BOL.AsInteger;
           MQContasReceber.Post;
           MQContasReceber.CommitUpdates;
          end;

          Titulo.Carteira          := MQBoletoCARTEIRA_BOL.asstring;
          Titulo.NossoNumero       := MQContasReceberNOSSONUMERO.asstring;
          Titulo.ValorDocumento    := MQContasReceberValor.AsFloat;

          Titulo.Sacado.NomeSacado := Trim(MQContasReceberNomeDevedor.AsString);
          if length(TiraCaracterDocumento(Trim(MQContasReceberCNPJ.AsString))) = 11 then
             Titulo.Sacado.Pessoa:= pFisica
          else
             Titulo.Sacado.Pessoa:= pJuridica;
          Titulo.Sacado.CNPJCPF    := TiraCaracterDocumento(Trim(MQContasReceberCNPJ.AsString));

          If Trim(MQClienteendcob.AsString) <> '' then
          begin
           Titulo.Sacado.Logradouro := Trim(MQClienteendcob.AsString);
           Titulo.Sacado.Bairro     := Trim(MQClienteBairroCob.AsString);
           Titulo.Sacado.Cidade     := Trim(MQClienteCidCob.AsString);
           Titulo.Sacado.uf         := Trim(MQClienteestcob.AsString);
           Titulo.Sacado.cep        := TiraCaracterDocumento(Trim(MQClienteCepCob.AsString));
          end
          Else
          begin
           Titulo.Sacado.Logradouro := Trim(MQClienteendcli.AsString) + ', ' +Trim(MQClienteNumero.AsString);
           Titulo.Sacado.Bairro     := Trim(MQClienteBairroCli.AsString);
           Titulo.Sacado.Cidade     := Trim(MQClienteCidCli.AsString);
           Titulo.Sacado.uf         := Trim(MQClienteestcli.AsString);
           Titulo.Sacado.cep        := TiraCaracterDocumento(Trim(MQClienteCepCli.AsString));
          end;

          Titulo.ValorMoraJuros    := MQContasReceberValorJurosDia.AsFloat;//MQContasReceberAliqJurosDia.AsFloat;
          Titulo.CodigoMora        := '2';

          Titulo.DataAbatimento    := IncDay(MQContasReceberVencimento.AsDateTime, (MQContasReceberDIASVENCDESCONTO.AsInteger * -1));
          If (MQContasReceberVALORDESCONTO.AsInteger > 0) and (MQContasReceberDIASVENCDESCONTO.AsInteger >= 0) then
            Titulo.ValorAbatimento := MQContasReceberVALORDESCONTO.AsFloat;

          Titulo.DataMoraJuros     := MQContasReceberVencimento.AsDateTime;
          Titulo.Instrucao1        := MQBoletoINSTRUCAO1_BOL.AsString;
          Titulo.Instrucao2        := MQBoletoINSTRUCAO2_BOL.AsString;

          If Titulo.ValorAbatimento > 0 then
            sOrientacoes.add('Conceder desconto de ' +Format('%m', [MQContasReceberVALORDESCONTO.AsFloat]) + ' até a data ' +
                              DateToStr(IncDay(MQContasReceberVencimento.AsDateTime, (MQContasReceberDIASVENCDESCONTO.AsInteger * -1))));

          Titulo.Mensagem.Text  := MQBoletoDESCRICAO_BOL.AsString+' '+
                                   MQContasReceberNomeDevedor.AsString+' - '+
                                   MQContasReceberNumNF.AsString;

          AdicionarMensagensPadroes(Titulo, sOrientacoes);
        end;

        MQContasReceber.Next;
      end;

      if ListadeBoletos.Count > 0 then
        Imprimir;

    finally
      FreeAndNil(sOrientacoes);
      ListadeBoletos.Clear;
      MQContasReceber.EnableControls;
    end;
  end;
end;

 

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

Preciso das informações passadas ao componente para poder verificar.

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

Segue abaixo Juliana

 

ACBrBoleto.Banco.TipoCobranca := cobBancoDoBrasil;
ACBrBoleto.Cedente.Nome := 'WV DISTRIBUIDORA';
ACBrBoleto.Cedente.TipoInscricao := pJuridica;
ACBrBoleto.Cedente.CNPJCPF       := '08446694000105';
ACBrBoleto.Cedente.Agencia       := '7139';
ACBrBoleto.Cedente.AgenciaDigito := '0';
ACBrBoleto.Cedente.Conta         := '000000005442';
ACBrBoleto.Cedente.ContaDigito   := '9';
ACBrBoleto.Cedente.CodigoCedente := '2675174';
ACBrBoleto.Cedente.Convenio      := '2675174';
ACBrBoleto.Cedente.Logradouro    := 'AV FREI COIMBRA, 85 - NOVO HORIZONTE - VÃRZEA GRANDE/MT CEP 78135625';
Titulo.LocalPagamento            := 'Pagar preferêncialmente nas agências do Banco';
Titulo.Vencimento        := 31/10/2015;
Titulo.DataDocumento     := 01/09/2015;
Titulo.NumeroDocumento   := '9713';
Titulo.EspecieDoc        := 'DM';
Titulo.Aceite            := atNao;
Titulo.DataProcessamento := 06/10/2015;         
Titulo.Carteira          := '18/019';
Titulo.NossoNumero       := '0000026815';
Titulo.ValorDocumento    := 66,75;
Titulo.Sacado.NomeSacado := 'MOTOS LTDA';
Titulo.Sacado.Pessoa:= pJuridica;
Titulo.Sacado.CNPJCPF    := '99999999009999';
Titulo.Sacado.Logradouro := '**********************, 1';
Titulo.Sacado.Bairro     := '************************';
Titulo.Sacado.Cidade     := 'CUIABÁ';
Titulo.Sacado.uf         := 'MT';
Titulo.Sacado.cep        := '0';
Titulo.ValorMoraJuros    := 0,07;
Titulo.CodigoMora        := '2';
Titulo.DataAbatimento    := 31/10/2015;
Titulo.ValorAbatimento   := 0;
Titulo.DataMoraJuros     := 31/10/2015;
Titulo.Instrucao1        := 'PAGAVEL EM QUALQUER AGENCIA ATE O VENCIMENTO';
Titulo.Instrucao2        := '';
Titulo.Mensagem.Text  := 'BRANCO DO BRASIL ERIK MOTOS LTDA  - 9713'

 

Link para o comentário
Compartilhar em outros sites

Ajuda ai pessoal

O boleto aqui esta parado.

Vc teria como testar com as alterações que fiz e anexei neste post http://www.projetoacbr.com.br/forum/topic/24979-problema-na-linha-digitavel-do-banco-do-brasil/

vou colocar pra rodar desta forma nos meus clientes pois também estou a dois dias sem emissão de boletos para bb.

Link para o comentário
Compartilhar em outros sites

troquei na ACBrBancoBrasil.pas
 que estava usando PadLeft para padRight, porém ao verificar na ACBrUtil.pas vi que a PadRight estava usando LeftStr e tendo o mesmo efeito de PadLeft, entao corrigi.

function TACBrBancoBrasil.FormataNossoNumero(const ACBrTitulo :TACBrTitulo): String;
var
  ANossoNumero, AConvenio: String;
  wTamNossoNum: Integer;
begin
  with ACBrTitulo do
  begin
    AConvenio    := ACBrBoleto.Cedente.Convenio;
    ANossoNumero := NossoNumero;
    wTamNossoNum := CalcularTamMaximoNossoNumero(Carteira,ANossoNumero);
      
    if ((ACBrTitulo.Carteira = '16') or (ACBrTitulo.Carteira = '18')) and
        (Length(AConvenio) = 6) and (wTamNossoNum = 17) then
      ANossoNumero := PadLeft(ANossoNumero, 17, '0')
    else if Length(AConvenio) <= 4 then
      ANossoNumero := PadLeft(AConvenio, 4, '0') + PadRight(ANossoNumero, 7, '0')
    else if (Length(AConvenio) > 4) and (Length(AConvenio) <= 6) then
      ANossoNumero := PadLeft(AConvenio, 6, '0') + PadRight(ANossoNumero, 5, '0')
    else if (Length(AConvenio) = 7) then
      ANossoNumero := PadLeft(AConvenio, 7, '0') + PadRight(ANossoNumero, 10, '0');
  end;
  Result := ANossoNumero;

end;

 

{-----------------------------------------------------------------------------
  Completa <AString> com <Caracter> a direita, até o tamanho <nLen>, Alinhando
  a <AString> a Esquerda. Se <AString> for maior que <nLen>, ela será truncada
 ---------------------------------------------------------------------------- }
function PadRight(const AString : String; const nLen : Integer;
   const Caracter : Char) : String ;
var
  Tam: Integer;
begin
  Tam := Length(AString);
  if Tam < nLen then
    Result := AString + StringOfChar(Caracter, (nLen - Tam))
  else
    Result := RightStr(AString, nLen);//LeftStr(AString, nLen);
end ;

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3124 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...