Pesquisar na Comunidade
Showing results for tags 'Numero Sequencial do Registro'.
Encontrado 1 registro
-
Problema No Numero Sequencial Do Registro No Lote Cnab240
um tópico no fórum postou marcianobandeira ACBrBoleto
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;