allanbrrj
Membros-
Total de ítens
9 -
Registro em
-
Última visita
Últimos Visitantes
O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.
allanbrrj's Achievements
-
Bom dia Daniel, já enviei, enviei na sexta.
-
Boa noite o último post deu erro não consegui completar. O arquivo na integra, o original não poderei colocar, vou anexar um com os dados modificados, cnpj, conta etc. Especificamente este cliente só usa 1 desconto por data, no processo de homologação foi apenas 1 data. Mas tenho outros clientes com 2 e 3 datas, já homologados, com o mesmo código acima em produção. CB000056.REM
-
Boa noite o arquivo na integra não poderei colocar. Mas
-
Boa tarde a todos. Recentemente vi esse post. Dizendo que está com problema no remessa, eles estão rejeitando informando que é necessário vir com espaços ao invés de 0. Passei pelo mesmo problema, ao tentar homologar mais um cliente. Porém já tenho outros clientes pleno funcionamento. Informo que fiz as alterações com os espaços mas o boleto foi igualmente rejeitado. E levei a contestação junto ao suporte, informando essa divergência. E hoje tive o ok, o arquivo remessa foi homologado, com os "0". Aproveitei e implementei os descontos por data. Segue em anexo caso seja interessante para o projeto ACBrBancoSantander.pas
-
Boa noite a todos. Reparem que APENAS no layout de 400 posições o número documento tem apenas 10 posições, porém esse número não muda ao usar o layout de 400 posições. O valor alimentado vem padrão da classe TACBrBancoClass 15 posições. Essa informação (layout 400 tem apenas 10 posições) pode ser confirmada no manual do Bradesco e também na classe TACBrBancoBradesco método TACBrBancoBradesco.GerarRegistroTransacao400 Linha 446 "PadRight( NumeroDocumento, 10) + // 111 a 120 - Numero Documento" Vejam ele pega apenas 10 posições do NumeroDocumento. Fiz uma pequena modificação no create da classe TACBrBancoBradesco Adicionei no final do create if AOwner.ACBrBoleto.LayoutRemessa=c400 then fpTamanhoNumeroDocumento := 10; Caso seja interessante, favor adicionar no trunc2 do projeto. ACBrBancoBradesco.pas
-
Boa tarde a todos Implementei os descontos por data 2 e 3 para os layouts 240 e 400 Caso seja interessante, favor adicionar no trunc2 do projeto. Obs. no layout de 400 posições para usar é necessário cadastramento prévio do indicador 19.0 pelo Itaú. Conforme no manual, página 23 item (16) ACBrBancoItau.pas
-
Sem problema. Acabei de anexar. ACBrBancoBradesco.pas ACBrBoleto.pas
-
Boa noite, segue a solução para o problema. Já testei e foi homologado pelo banco. Caso seja interessante, favor adicionar no trunc2 do projeto. 2 units sofrerão modificações ACBrBancoBradesco.pas e ACBrBoleto.pas ACBrBancoBradesco.pas function MontaInstrucoesCNAB400(const ACBrTitulo :TACBrTitulo; const nRegistro: Integer ): String; override; function TACBrBancoBradesco.MontaInstrucoesCNAB400( const ACBrTitulo: TACBrTitulo; const nRegistro: Integer): String; var lNossoNumero, lDigNossoNumero: String; begin Result := ''; ValidaNossoNumeroResponsavel(lNossoNumero, lDigNossoNumero, ACBrTitulo); with ACBrTitulo, ACBrBoleto do begin {Primeira instrução vai no registro 1} if Mensagem.Count <= 1 then begin Result := ''; Exit; end; Result := '2' + // IDENTIFICAÇÃO DO LAYOUT PARA O REGISTRO Copy(PadRight(TiraAcentos(Mensagem[1]), 80, ' '), 1, 80); // CONTEÚDO DA 1ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO if Mensagem.Count >= 3 then Result := Result + Copy(PadRight(TiraAcentos(Mensagem[2]), 80, ' '), 1, 80) // CONTEÚDO DA 2ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS if Mensagem.Count >= 4 then Result := Result + Copy(PadRight(TiraAcentos(Mensagem[3]), 80, ' '), 1, 80) // CONTEÚDO DA 3ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS if Mensagem.Count >= 5 then Result := Result + Copy(PadRight(TiraAcentos(Mensagem[4]), 80, ' '), 1, 80) // CONTEÚDO DA 4ª LINHA DE IMPRESSÃO DA ÁREA "INSTRUÇÕES” DO BOLETO else Result := Result + PadRight('', 80, ' '); // CONTEÚDO DO RESTANTE DAS LINHAS Result := Result + IfThen(DataDesconto2 < EncodeDate(2000,01,01),PadLeft('', 6, '0'), FormatDateTime( 'ddmmyy', DataDesconto2)) + // 322 a 327 - Data limite para concessão de Desconto 2 IntToStrZero( round( ValorDesconto2 * 100 ), 13) + // 328 a 340 - Valor do Desconto 2 IfThen(DataDesconto3 < EncodeDate(2000,01,01),PadLeft('', 6, '0'), FormatDateTime( 'ddmmyy', DataDesconto3)) + // 341 a 346 - Data limite para concessão de Desconto 3 IntToStrZero( round( ValorDesconto3 * 100 ), 13) + // 347 a 359 - Valor do Desconto 3 space(7) + // 360 a 366 - Reserva IntToStrZero(StrToIntDef(trim(Carteira), 0), 3) + IntToStrZero(StrToIntDef(OnlyNumber(ACBrBoleto.Cedente.Agencia), 0), 5) + IntToStrZero(StrToIntDef(OnlyNumber(ACBrBoleto.Cedente.Conta) , 0), 7) + Cedente.ContaDigito + lNossoNumero + lDigNossoNumero + IntToStrZero( nRegistro + 1, 6); // Nº SEQÜENCIAL DO REGISTRO NO ARQUIVO end; end; function TACBrBancoBradesco.GerarRegistroTransacao240(ACBrTitulo: TACBrTitulo): String; var ATipoOcorrencia, ATipoBoleto, ADataMoraJuros, ACodigoMoraJuros, ACodigoDesconto: String; ADataDesconto, ACodigoMulta, ADataMulta, ATipoAceite, AEspecieDoc: String; Fsequencia:Integer; FdigitoNossoNumero: String; FcodCarteira: String; ACodProtesto: String; ListTransacao: TStringList; begin Fsequencia := 3 * ACBrTitulo.ACBrBoleto.ListadeBoletos.IndexOf(ACBrTitulo); //Caracteristica Título FcodCarteira := DefineCaracTitulo(ACBrTitulo); //Digito Nosso Número FdigitoNossoNumero := CalcularDigitoVerificador(ACBrTitulo); {Código para Protesto} ACodProtesto := DefineTipoDiasProtesto(ACBrTitulo); {Tipo de Ocorrencia} ATipoOcorrencia := TipoOcorrenciaToCodRemessa(ACBrTitulo.OcorrenciaOriginal.Tipo); {Aceite do Titulo } ATipoAceite := DefineAceite(ACBrTitulo); {Especie Documento} AEspecieDoc := DefineEspecieDoc(ACBrTitulo); {Responsavel Emissão} ATipoBoleto := DefineResponsEmissao; {Código Mora} ACodigoMoraJuros := DefineCodigoMoraJuros(ACBrTitulo); {Data Mora} ADataMoraJuros := DefineDataMoraJuros(ACBrTitulo); {Código Desconto} ACodigoDesconto := DefineCodigoDesconto(ACBrTitulo); {Data Desconto} ADataDesconto := DefineDataDesconto(ACBrTitulo); {Código Multa} ACodigoMulta := DefineCodigoMulta(ACBrTitulo); {Data Multa} ADataMulta := DefineDataMulta(ACBrTitulo); ListTransacao:= TStringList.Create; try with ACBrTitulo do begin {REGISTRO P} ListTransacao.Add(IntToStrZero(ACBrBanco.Numero, 3) + //1 a 3 - Código do banco '0001' + //4 a 7 - Lote de serviço '3' + //8 - Tipo do registro: Registro detalhe IntToStrZero(Fsequencia+1,5) + //Nº Sequencial do Registro no Lote 9 13 5 - Num *G038 'P' + //14 - Código do segmento do registro detalhe ' ' + //15 - Uso exclusivo FEBRABAN/CNAB: Branco ATipoOcorrencia + //Código de Movimento Remessa 16 17 2 - Num *C004 PadLeft(OnlyNumber(ACBrTitulo.ACBrBoleto.Cedente.Agencia), 5, '0') + //18 a 22 - Agência mantenedora da conta PadRight(ACBrBoleto.Cedente.AgenciaDigito, 1 , '0') + //23 -Dígito verificador da agência PadLeft(ACBrBoleto.Cedente.conta, 12, '0') + //24 a 35 - Número da Conta Corrente Padleft(ACBrBoleto.Cedente.ContaDigito, 1 , '0') + //36 a 36 Dígito Verificador da Conta Alfa *G011 ' ' + //Retornaram que deve gravar vazio .. contrario ao layout //PadLeft(Copy(Fconta,Length(Fconta) ,1 ),1, ' ') + //37-37Dígito Verificador da Ag/Conta 37 37 1 - Alfa *G012 PadLeft(ACBrTitulo.Carteira, 3, '0') + //38-40 Identificação do Produto 38 40 3 Num *G069 PadLeft('0', 5, '0') + //Zeros 41 45 5 Num *G069 PadLeft(NossoNumero, 11, '0') + //Nosso Número 46 56 11 Num *G069 PadLeft(FdigitoNossoNumero,1,'0') + //Digito do nosso Número 57 57 1 Num *G069 PadLeft(FcodCarteira,1,'0' ) + //Código da Carteira 58 58 1 - Num *C006 '1' + //Forma de Cadastr. do Título no Banco 59 59 1 - Num *C007 1-cobrança Registrada '1' + //Tipo de Documento 60 60 1 - Alfa C008 -1-Tradicional ATipoBoleto + //Identificação da Emissão do Bloqueto 61 61 1 - Num *C009 ATipoBoleto +//Identificação da Distribuição 62 62 1 - Alfa C010 -Quem emite que distribua... PadRight(NumeroDocumento, 15, ' ') + //Número do Documento de Cobrança 63 77 15 - Alfa *C011 FormatDateTime('ddmmyyyy', Vencimento) + //Data de Vencimento do Título 78 85 8 - Num *C012 IntToStrZero( round( ValorDocumento * 100), 15) + //Valor Nominal do Título 86 100 13 2 Num *G070 Padleft('0', 5, '0') + //Agência Encarregada da Cobrança 101 105 5 - Num *C014 '0' + //Dígito Verificador da Agência 106 106 1 - Alfa *G009 PadRight(AEspecieDoc, 2) + //Espécie do Título 107 108 2 - Num *C015 ATipoAceite + //Identific. de Título Aceito/Não Aceito 109 109 1 - Alfa C016 FormatDateTime('ddmmyyyy', DataDocumento) + //Data da Emissão do Título 110 117 8 - Num G071 ACodigoMoraJuros + //Código do Juros de Mora 118 118 1 - Num *C018 '1' = Valor por Dia'2' = Taxa Mensal '3' = Isento ADataMoraJuros + //Data do Juros de Mora 119 126 8 - Num *C019 IfThen(ValorMoraJuros > 0, IntToStrZero(round(ValorMoraJuros * 100), 15),PadRight('', 15, '0')) + //juros de Mora por Dia/Taxa 127 141 13 2 Num C020 ACodigoDesconto + //Código do Desconto 1 142 142 1 - Num *C021 ADataDesconto + //Data do Desconto 1 143 150 8 - Num C022 IfThen(ValorDesconto > 0, IntToStrZero( round(ValorDesconto * 100), 15),PadRight('', 15, '0')) + //Valor/Percentual a ser Concedido 151 165 13 2 Num C023 IntToStrZero( round(ValorIOF * 100), 15) + //Valor do IOF a ser Recolhido 166 180 13 2 Num C024 IntToStrZero( round(ValorAbatimento * 100), 15) + //Valor do Abatimento 181 195 13 2 Num G045 PadRight(IfThen(SeuNumero <> '',SeuNumero,NumeroDocumento), 25, ' ') + //Identificação do Título na Empresa 196 220 25 - Alfa G072 IfThen((DataProtesto <> 0) and (DiasDeProtesto > 0), ACodProtesto, '3') + //Código para Protesto 221 221 1 - Num C026 IfThen((DataProtesto <> 0) and (DiasDeProtesto > 0), PadLeft(IntToStr(DiasDeProtesto), 2, '0'), '00') + //Número de Dias para Protesto 222 223 2 - Num C027 IfThen((DataBaixa <> 0) and (DataBaixa > Vencimento), '1', '2') + //Código para Baixa/Devolução 224 224 1 - Num C028 IfThen((DataBaixa <> 0) and (DataBaixa > Vencimento),PadLeft(IntToStr(DaysBetween(DataBaixa, Vencimento)), 3, '0'), '000') + //Número de Dias para Baixa/Devolução 225 227 3 - Alfa C029 '09' + //Código da Moeda 228 229 2 - Num *G065 '09' = Real PadRight('', 10 , '0') + //Nº do Contrato da Operação de Créd. 230 239 10 - Num C030 ' '); //240 - Uso exclusivo FEBRABAN/CNAB {SEGMENTO Q} ListTransacao.Add(IntToStrZero(ACBrBanco.Numero, 3) + //Código do Banco na Compensação 1 3 3 - Num G001 '0001' + //Lote Lote de Serviço 4 7 4 - Num *G002 '3' + //Tipo de Registro 8 8 1 - Num ‘3’ *G003 IntToStrZero(Fsequencia+ 2 ,5) + //Nº Sequencial do Registro no Lote 9 13 5 - Num *G038 'Q' + //Cód. Segmento do Registro Detalhe 14 14 1 - Alfa ‘Q’ *G039 ' ' + //Uso Exclusivo FEBRABAN/CNAB 15 15 1 - Alfa Brancos G004 ATipoOcorrencia + //Código de Movimento Remessa 16 17 2 - Num *C004 {Dados do sacado} IfThen(Sacado.Pessoa = pJuridica,'2','1') + //Tipo Tipo de Inscrição 18 18 1 - Num *G005 PadLeft(OnlyNumber(Sacado.CNPJCPF), 15, '0') + //Número Número de Inscrição 19 33 15 - Num *G006 PadRight(Sacado.NomeSacado, 40, ' ') + //Nome 34 73 40 - Alfa G013 PadRight(Sacado.Logradouro + ' ' + Sacado.Numero +' ' + Sacado.Complemento , 40, ' ') + //Endereço 74 113 40 - Alfa G032 PadRight(Sacado.Bairro, 15, ' ') + //Bairro 114 128 15 - Alfa G032 PadLeft(copy(OnlyNumber(ACBrTitulo.Sacado.CEP),0,5), 5, '0') + //CEP 129 133 5 - Num G034 PadRight(copy(OnlyNumber(ACBrTitulo.Sacado.CEP),length(OnlyNumber(ACBrTitulo.Sacado.CEP))-2,3), 3, ' ') + //Sufixo do CEP 134 136 3 - Num G035 PadRight(Sacado.Cidade, 15, ' ') + // Cidade 137 151 15 - Alfa G033 PadRight(Sacado.UF, 2, ' ') + //Unidade da Federação 152 153 2 - Alfa G036 {Dados do sacador/avalista} '0' + // 154 a 154 - Tipo de Inscrição 154 154 1 - Num *G005 PadRight('', 15, '0') + // Número de Inscrição 155 169 15 - Num *G006 PadRight('', 40, ' ') + // Nome do Pagadorr/Avalista 170 209 40 - Alfa G013 PadRight('0', 3, '0') + // Cód. Bco. Corresp. na Compensação 210 212 3 - Num *C031 PadRight('',20, ' ') + // Nosso Nº no Banco Correspondente 213 232 20 - Alfa *C032 PadRight('', 8, ' ')); // FEBRABAN/CNAB 233 240 8 - Alfa Brancos G004 {SEGMENTO R OPCIONAL } ListTransacao.Add(IntToStrZero(ACBrBanco.Numero, 3) + //Código do Banco na Compensação 1 3 3 - Num G001 '0001' + //Lote de Serviço 4 7 4 - Num *G002 '3' + //Tipo de Registro 8 8 1 - Num ‘3’ *G003 IntToStrZero(Fsequencia+ 3 ,5) + //Nº Sequencial do Registro no Lote 9 13 5 - Num *G038 'R' + //Cód. Segmento do Registro Detalhe 14 14 1 - Alfa ‘R’ *G039 ' ' + //CNAB Uso Exclusivo FEBRABAN/CNAB 15 15 1 - Alfa Brancos G004 ATipoOcorrencia + //Código de Movimento Remessa 16 17 2 - Num *C004 TipoDescontoToString(TipoDesconto2) + //Código do Desconto 2 18 18 1 - Num *C021 IfThen(TipoDesconto2<>tdNaoConcederDesconto, IfThen(DataDesconto2 < EncodeDate(2000,01,01), PadLeft('',8,'0'), FormatDateTime( 'ddmmyyyy', DataDesconto2)), PadLeft('',8,'0')) + //Data do Desconto 2 19 26 8 - Num C022 IfThen(TipoDesconto2<>tdNaoConcederDesconto, IfThen(ValorDesconto2>0, IntToStrZero(round(ValorDesconto2 * 100), 15), PadLeft('',15,'0'))) + //Valor/Percentual a ser Concedido 27 41 13 2 Num C023 TipoDescontoToString(TipoDesconto3) + //Código do Desconto 3 42 42 1 - Num *C021 IfThen(TipoDesconto3<>tdNaoConcederDesconto, IfThen(DataDesconto3 < EncodeDate(2000,01,01), PadLeft('', 8, '0'), FormatDateTime( 'ddmmyyyy', DataDesconto3)), PadLeft('',8,'0')) + //Data do Desconto 3 43 50 8 - Num C022 IfThen(TipoDesconto3<>tdNaoConcederDesconto, IfThen(ValorDesconto3>0, IntToStrZero(round(ValorDesconto3 * 100), 15), PadLeft('',15,'0'))) + //Valor/Percentual a Ser Concedido 51 65 13 2 Num C023 ADataMulta + //Data da Multa 67 74 8 - Num G074 IfThen(PercentualMulta > 0, IntToStrZero(round(PercentualMulta * 100), 15), PadRight('', 15, '0')) + //Multa Valor/Percentual a Ser Aplicado 75 89 13 2 Num G075 PadRight('', 10, ' ') + //Informação ao Pagador Informação ao Pagador 90 99 10 - Alfa *C036 PadRight('', 40, ' ') + //Informação 3 Mensagem 3 100 139 40 - Alfa *C037 PadRight('', 40, ' ') + //Mensagem 4 140 179 40 - Alfa *C037 PadRight('', 20, ' ') + //CNAB Uso Exclusivo FEBRABAN/CNAB 180 199 20 - Alfa Brancos G004 PadLeft('', 8, '0') +//Cód. Ocor. do Pagador 200 207 8 - Num *C038 PadLeft('', 3, '0') +//Cód. do Banco na Conta do Débito 208 210 3 - Num G001 PadLeft('', 5, '0') +//Código da Agência do Débito 211 215 5 - Num *G008 PadLeft('', 1, ' ') +//Dígito Verificador da Agência 216 216 1 - Alfa *G009 PadLeft('', 12, '0') +//Corrente para Débito 217 228 12 - Num *G010 PadLeft('', 1, ' ') +//Dígito Verificador da Conta 229 229 1 - Alfa *G011 PadLeft('', 1, ' ') +//DV Dígito Verificador Ag/Conta 230 230 1 - Alfa *G012 PadLeft('', 1, '3') +//Ident. da Emissão do Aviso Déb. Aviso para Débito Automático 231 231 1 - Num *C039 PadLeft('',9, ' ')); //CNAB Uso Exclusivo FEBRABAN/CNAB 232 240 9 - Alfa Brancos G004 end; Result := RemoverQuebraLinhaFinal(ListTransacao.Text); finally ListTransacao.Free; end; end; ACBrBoleto.pas Na classe TACBrTitulo adicionar o field: fTipoDesconto3 : TACBrTipoDesconto; Depois adicionar a propety property TipoDesconto3 : TACBrTipoDesconto read fTipoDesconto3 write fTipoDesconto3;
-
Boa tarde a todos. Sou iniciante neste projeto, ainda não estou familiarizado com o ambiente. Estou tentando gerar o arquivo remessa para o Bradesco ("cobBradesco"). Porém na linha de registro de transações 2, onde deveriam vir os descontos por data, está sendo gerado com "0". Já informei as propriedade "TipoDesconto" e "TipoDesconto2" como "tdValorFixoAteDataInformada" no TACBrTitulo e nada. Utilizei tanto layout 240 como 400 e nada. Olhando o fontes no "ACBrBancoBradesco.pas" percebi que a transação tipo "2" não é especifico da carteira vem por herança "TACBrBancoClass.MontaInstrucoesCNAB400" que não está implementada. e o TACBrBancoBradesco.GerarRegistroTransacao240 também não vem informando os descontos por data. Esses descontos por data ainda não foram implementados? Ou estou informando as propriedades erradas ou tem alguma outra? Caso elas não estejam implementadas estou olhando nos arquivos corretos? Caso eu altere como posso deixar essa contribuição parar o projeto ACBR?