Ir para conteúdo
  • Cadastre-se

dev botao

Problema No Numero Sequencial Do Registro No Lote Cnab240


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

Recommended Posts

Boa tarde pessoal

 

Estive tendo uns probleminhas ao gerar a remessa para o sicredi,
 
o validador estava rejeitando o numero sequencial do registro do lote,
 
no arquivo de remessa layout cnab240, quando fiz o debug reparei que o problema,
 
está no seguinte trecho de codigo,
 
// Seguimento P
(3 * ACBrBoleto.ListadeBoletos.IndexOf(ACBrTitulo)) + 1 , 5) + // 009 a 013 - Nº sequencial do registro do lote
 
// Seguimento Q
(3 * ACBrBoleto.ListadeBoletos.IndexOf(ACBrTitulo)) + 2 , 5) + // 009 a 013 - Nº sequencial do registro do lote
 
Da forma que está o primeiro titulo, o sistema vai multiplicar 
 
(3 * 0) + 1 = 1 (correto)
(3 * 0) + 2 = 2 (correto)
 
já nos proximos acontece o erro
 
(3 * 1) + 1 = 4
(3 * 1) + 2 = 5
 
(3 * 2) + 1 = 7
(3 * 2) + 2 = 8
 
(3 * 3) + 1 = 10
(3 * 3) + 2 = 11
 
Entao, alterei o codigo para multiplicar por 2, onde ficou tudo certo, 
 
(2 * 0) + 1 = 1
(2 * 0) + 2 = 2
 
(2 * 1) + 1 = 3
(2 * 1) + 2 = 4
 
(2 * 2) + 1 = 5
(2 * 2) + 2 = 6
 
(2 * 3) + 1 = 7
(2 * 3) + 2 = 8
 
 
Segue a rotina completa alterada,
Dando uma olhada na classe do banco do brasil o mesmo problema vai ocorrer.
 
function TACBrBancoSicredi.GerarRegistroTransacao240(
  ACBrTitulo: TACBrTitulo): String;
var
    AceiteStr, CodProtesto, DiasProtesto, TipoSacado: String;
    DigitoNossoNumero, Especie, EndSacado: String;
    TipoAvalista: Char;
begin
  with ACBrBanco.ACBrBoleto.Cedente, ACBrTitulo do
  begin
    {Nosso Número}
    DigitoNossoNumero := CalcularDigitoVerificador(ACBrTitulo);
 
    {Aceite}
    case Aceite of
      atSim: AceiteStr := 'A';
      atNao: AceiteStr := 'N';
    end;
 
    {Espécie}
    if (EspecieDoc = 'DM') then
      Especie := '03'
    else if (EspecieDoc = 'DMI') then
      Especie := '03'
    else
      Especie := '99';
 
    {Protesto}
    CodProtesto := '3';
    DiasProtesto := '00';
    if (DataProtesto > 0) and (DataProtesto > Vencimento) then
    begin
      CodProtesto := '1';
      DiasProtesto := padR(IntToStr(DaysBetween(DataProtesto, Vencimento)), 2, '0');
    end;
 
    {Sacado}
    case Sacado.Pessoa of
      pFisica:   TipoSacado := '1';
      pJuridica: TipoSacado := '2';
    else
      TipoSacado := '9';
    end;
 
    EndSacado := Sacado.Logradouro;
    if (Sacado.Numero <> '') then
      EndSacado := EndSacado + ', ' + Sacado.Numero;
    EndSacado := padL(trim(EndSacado), 40);
 
 
    {Avalista}
    case Sacado.SacadoAvalista.Pessoa of
      pFisica:   TipoAvalista := '1';
      pJuridica: TipoAvalista := '2';
    else
      TipoAvalista := '9';
    end;
 
    {SEGMENTO P}
    Result:= '748'                                                          + // 001 a 003 - Código do banco na compensação
             '0001'                                                         + // 004 a 007 - Lote de serviço = "0001"
             '3'                                                            + // 008 a 008 - Tipo de registro = "3" DETALHE
             IntToStrZero(
//               (3 * ACBrBoleto.ListadeBoletos.IndexOf(ACBrTitulo)) + 1 , 5) + // 009 a 013 - Nº sequencial do registro do lote
// alterei aqui
               (2 * ACBrBoleto.ListadeBoletos.IndexOf(ACBrTitulo)) + 1 , 5) + // 009 a 013 - Nº sequencial do registro do lote
             'P'                                                            + // 014 a 014 - Cód. segmento do registro detalhe
             Space(1)                                                       + // 015 a 015 - Uso exclusivo FEBRABAN/CNAB
             '01'                                                           + // 016 a 017 - Código de movimento remessa
             padL(OnlyNumber(Agencia), 5,'0')                               + // 018 a 022 - Agência mantenedora da conta
             Space(1)                                                       + // 023 a 023 - Dígito verificador da agência
             padL(OnlyNumber(Conta), 12, '0')                               + // 024 a 035 - Número da conta corrente
             padR(OnlyNumber(ContaDigito), 1)                               + // 036 a 036 - Dígito verificador da conta
             Space(1)                                                       + // 037 a 037 - Dígito verificador da coop/ag/conta
             padL(NossoNumero + DigitoNossoNumero, 20, '0')                 + // 038 a 057 - Identificação do título no banco
             '1'                                                            + // 058 a 058 - Código da carteira
             '1'                                                            + // 059 a 059 - Forma de cadastro do título no banco
             '2'                                                            + // 060 a 060 - Tipo de documento
             '2'                                                            + // 061 a 061 - Identificação de emissão do bloqueto
             '2'                                                            + // 062 a 062 - Identificação da distribuição
             padL(NumeroDocumento, 15)                                      + // 063 a 077 - Nº do documento de cobrança
             FormatDateTime('ddmmyyyy', Vencimento)                         + // 078 a 085 - Data de vencimento do título
             IntToStrZero(Round(ValorDocumento * 100), 15)                  + // 086 a 100 - Valor nominal do título
             '00000'                                                        + // 101 a 105 - Coop./Ag. encarregada da cobrança
             Space(1)                                                       + // 106 a 106 - Dígito verificador da coop./agência
             padR(Especie, 2, '0')                                          + // 107 a 108 - Espécie do título
             AceiteStr                                                      + // 109 a 109 - Identificação de título aceito/não aceito
             FormatDateTime('ddmmyyyy', DataDocumento)                      + // 110 a 117 - Data da emissão do título
             '1'                                                            + // 118 a 118 - Código do juro de mora
             '00000000'                                                     + // 119 a 126 - Data do juro de mora
             IntToStrZero(Round(ValorMoraJuros * 100), 15)                  + // 127 a 141 - Juros de mora por dia/taxa
             '1'                                                            + // 142 a 142 - Código do desconto 1
             FormatDateTime('ddmmyyyy', Vencimento)                         + // 143 a 150 - Data do desconto 1
             IntToStrZero(Round(ValorDesconto * 100), 15)                   + // 151 a 165 - Valor percentual a ser concedido
             IntToStrZero(Round(ValorIOF * 100), 15)                        + // 166 a 180 - Valor do IOF a ser recolhido
             IntToStrZero(Round(ValorAbatimento * 100), 15)                 + // 181 a 195 - Valor do abatimento
             padL(NumeroDocumento, 25)                                      + // 196 a 220 - Identificação do título na empresa
             CodProtesto                                                    + // 221 a 221 - Código para protesto
             DiasProtesto                                                   + // 222 a 223 - Número de dias para protesto
             '1'                                                            + // 224 a 224 - Código para baixa/devolução
             '060'                                                          + // 225 a 227 - Nº de dias para baixa/devolução
             '09'                                                           + // 228 a 229 - Código da moeda = "09"
             padL('', 10, '0')                                              + // 230 a 239 - Nº do contrato da operação de crédito
             Space(1);                                                        // 240 a 240 - Uso exclusivo FEBRABAN/CNAB
 
    {SEGMENTO Q}
    Result:= Result + #13#10 +
             '748'                                                          + // 001 a 003 - Código do banco na compensação
             '0001'                                                         + // 004 a 007 - Lote de serviço = "0001"
             '3'                                                            + // 008 a 008 - Tipo de registro = "3" DETALHE
             IntToStrZero(
//               (3 * ACBrBoleto.ListadeBoletos.IndexOf(ACBrTitulo)) + 2 , 5) + // 009 a 013 - Nº sequencial do registro do lote
// alterei aqui
               (2 * ACBrBoleto.ListadeBoletos.IndexOf(ACBrTitulo)) + 2 , 5) + // 009 a 013 - Nº sequencial do registro do lote
             'Q'                                                            + // 014 a 014 - Cód. segmento do registro detalhe
             Space(1)                                                       + // 015 a 015 - Uso exclusivo FEBRABAN/CNAB
             '01'                                                           + // 016 a 017 - Código de movimento de remessa
             TipoSacado                                                     + // 018 a 018 - Tipo de inscrição
             padR(OnlyNumber(Sacado.CNPJCPF), 15, '0')                      + // 019 a 033 - Número de inscrição
             padL(Sacado.NomeSacado, 40)                                    + // 034 a 073 - Nome
             EndSacado                                                      + // 074 a 113 - Endereço
             padL(Sacado.Bairro, 15)                                        + // 114 a 128 - Bairro
             Copy(padR(OnlyNumber(Sacado.CEP),8,'0'),1,5)                   + // 129 a 133 - CEP
             Copy(padR(OnlyNumber(Sacado.CEP),8,'0'),6,3)                   + // 134 a 136 - Sufixo do CEP
             padL(Sacado.Cidade, 15)                                        + // 137 a 151 - Cidade
             padR(UF, 2)                                                    + // 152 a 153 - Unidade da Federação
             TipoAvalista                                                   + // 154 a 154 - Tipo de inscrição
             padL(Sacado.SacadoAvalista.CNPJCPF, 15, '0')                   + // 155 a 169 - Número de inscrição
             padL(Sacado.SacadoAvalista.NomeAvalista,40,' ')                + // 170 a 209 - Nome do sacador/avalista
             padL('', 3, '0')                                               + // 210 a 212 - Cód. bco corresp. na compensação
             Space(20)                                                      + // 213 a 232 - Nosso nº no banco correspondente
             Space(8);                                                        // 233 a 240 - Uso exclusivo FEBRABAN/CNAB
 
  end;
 
  Result := UpperCase(Result);
end;

 

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

 

Além de seguir as instruções do Juliomar, anexe também o arquivo remessa gerado e indique o valor correto na campo com problema.

 

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

Seguem em anexo os arquivos de remessa correto e com problema e também a unit alterada do banco sicredi. Verificando a unit do banco do brasil acredito que o mesmo problema va ocorrer, porém tenho clientes usando e acredito que o banco do brasil não valide isto, porém no sicredi não teve jeito mesmo.

42717325_Correta.txt

42717325_Errada.txt

ACBrBancoSicredi.pas

42717325_Correta.txt

42717325_Errada.txt

ACBrBancoSicredi.pas

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3337 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.