allanbrrj
-
Total de ítens
9 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por allanbrrj
-
-
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.
- 1
-
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
-
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.
-
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)
-
Sem problema. Acabei de anexar.
-
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 BOLETOif 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 LINHASif 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 LINHASif 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;
trywith 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 G045PadRight(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 C027IfThen((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 G004end;
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;
- 1
-
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?
Santander CNAB 240 Segmento R rejeitato
em ACBrBoleto
Postado
Bom dia Daniel, já enviei, enviei na sexta.