-
Total de ítens
15 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por Mailson.Dragon
-
-
Me desculpa, não estou entendendo qual arquivo é esse.
Você fala ACBrBancoSafra.pas?
- 1
-
Modifiquei ...\ACBr\Fontes\ACBrBoleto\ACBrBancoSafra.pas
A partir da linha 810
segmentoR := IntToStrZero(ACBrBanco.Numero, 3) + // 001 - 003 / Código do Banco na compensação
'0001' + // 004 - 007 / Numero do lote remessa
'3' + // 008 - 008 / Tipo de registro
IntToStrZero(FSequencia ,5) + // 009 - 013 / Número seqüencial do registro no lote
'R' + // 014 - 014 / Cód. Segmento do registro detalhe
Space(1) + // 015 - 015 / Reservado (uso Banco)
sCodMovimento + // 016 - 017 / Código de movimento remessa
'0' + // 018 - 018 / Código do desconto 2
PadLeft('', 8, '0') + // 019 - 026 / Data do desconto 2
IntToStrZero(0, 15) + // 027 - 041 / Valor/Percentual a ser concedido
'0' + // 042 - 042 / Código do desconto 3
PadLeft('', 8, '0') + // 043 - 050 / Data do desconto 3
IntToStrZero(0, 15) + // 051 - 065 / Valor/Percentual a ser concedido
{sTipoDesconto + // 042 - 042 1 = Valor Fixo ate a Data Informada / 2 = Percentual ate a Data Informada / 3 = Valor por Antecipação dia Corrido
// 5 = Percentual por Antecipação dia corrido
IfThen((ACBrTitulo.ValorDesconto > 0),
FormatDateTime('ddmmyyyy', ACBrTitulo.DataDesconto), '00000000') + // 043 - 050 Campo numerico e deve ser preenchido, caso não tenha desconto manter o campo zerado. DDMMAAAA
IntToStrZero(round(ACBrTitulo.ValorDesconto), 15) + // 051 - 065 / Valor/Percentual a ser aplicado}
IfThen((ACBrTitulo.PercentualMulta > 0),
IfThen(ACBrTitulo.MultaValorFixo,'1','2'), '0') + // 66 - 66 1-Cobrar Multa Valor Fixo / 2-Percentual / 0-Não cobrar multa
IfThen((ACBrTitulo.PercentualMulta > 0),
FormatDateTime('ddmmyyyy', ACBrTitulo.DataMulta), '00000000') + // 67 - 74 Se cobrar informe a data para iniciar a cobrança ou informe zeros se não cobrar
IfThen((ACBrTitulo.PercentualMulta > 0), IntToStrZero(round(ACBrTitulo.PercentualMulta * 100), 15),
PadRight('', 15, '0')) + // 075 - 089 / Valor/Percentual a ser aplicado
Space(10) + // 090 - 099 / Reservado (uso Banco)
MontarInstrucoes1 + // 100 - 139 / Mensagem 3
// 140 - 179 / Mensagem 4
Space(61) ; // 180 - 240 / Reservado (uso Banco) -
Sim, mudar para não informar o desconto 2 e 3 que o banco safra não trata essas informações, hoje na unit do ACBr está informando desconto 1 que o o único aceitável, desconto 2 em branco e desconto 3 que é o mesmo do desconto 1, resumindo aceitam apenas o desconto 1.
Estou homologando essa carteira, a equipe da ACBr já corrigiram outras pendencias, mais ainda falta essa.
Retorno do banco:
Os títulos foram rejeitados pelo motivo "115-SEQUENCIA DO DESCONTO INVALIDA".
Olhando o arquivo, consta que a empresa está enviando duas formas de desconto, porém, está utilizando o primeiro campo e o terceiro campo de Desconto, pulando o campo 2.
-
Por favor, analisem esse manual de implantação, onde na pagina 15 informa que o Banco Safra não trata desconto 2 e desconto 3 no segmento R.
Especificamente na function TACBrBancoSafra.GerarRegistroTransacao240
Linha 810
-
Meu problema é com o código da agência, resolvi quando mudei a função "MontarCodigoBarras", se poderem atualiza-la ficarei grato.
function TACBrBancoSafra.MontarCodigoBarras(const ACBrTitulo: TACBrTitulo): string;
var
CodigoBarras, FatorVencimento, DigitoCodBarras,
valorDocumento, agencia, {agenciaDigito, }conta,
ContaDigito, NossoNumero: string;
begin
with ACBrTitulo.ACBrBoleto do
begin
FatorVencimento := CalcularFatorVencimento(ACBrTitulo.Vencimento);
valorDocumento := IntToStrZero(Round(ACBrTitulo.ValorDocumento * 100), 10);
agencia := PadLeft(RightStr(Cedente.Agencia,fpTamanhoAgencia), fpTamanhoAgencia, '0');
//agenciaDigito := PadLeft(Cedente.AgenciaDigito, 1, '0');
conta := Cedente.Conta;
ContaDigito := PadLeft(Cedente.ContaDigito, 1, '0');
NossoNumero := PadLeft(RightStr(ACBrTitulo.NossoNumero,fpTamanhoMaximoNossoNum),fpTamanhoMaximoNossoNum,'0');CodigoBarras := IntToStr(Banco.Numero) + '9' + FatorVencimento +
valorDocumento +
'7' + agencia + {Trim(agenciaDigito) +} Trim(conta) + ContaDigito +
NossoNumero + '2';
DigitoCodBarras := CalcularDigitoCodigoBarras(CodigoBarras);
end;Result := IntToStr(Numero) + '9' + DigitoCodBarras + Copy(CodigoBarras, 5, 39);
end;
-
Boa tarde, estou com o mesmo problema na formatação da agência, seque em anexo o manual do banco onde informa a agência com 5 dígitos sem a necessidade do digito verificador.
Pude observar que no arquivo ..\Fontes\ACBrBoleto\ACBrBancoSafra.pas
A função "MontarCodigoBarras", trata agencia com 4 dígitos mais 1 digito verificador
Já na função: "GerarRegistroHeader240", Posições 53-57 trata a agencia com 5 dígitos
Gerando inconsistências nas informações.
Ex: minha agencia é "19700"
-
Está faltando a versão do lote 087 e versão do arquivo 045
...
VersaoArquivo := LayoutVersaoArquivo;
if not (VersaoArquivo in [030, 040, 080, 082, 083, 084, 087]) then
VersaoArquivo := 030;...
VersaoLote := LayoutVersaoLote;
case VersaoArquivo of
030: if VersaoLote <> 020 then VersaoLote := 020;
040: if VersaoLote <> 030 then VersaoLote := 030;
080: if VersaoLote <> 040 then VersaoLote := 040;
082: if VersaoLote <> 041 then VersaoLote := 041;
083: if VersaoLote <> 042 then VersaoLote := 042;
084: if VersaoLote <> 043 then VersaoLote := 043;
087: if VersaoLote <> 045 then VersaoLote := 045;
else
VersaoLote := 000;
end;...
-
11 horas atrás, Antonio Gomes disse:
Maison: E o manual ou leiaute que usou como base posta ele aqui por favor, tem como? Grato.
- 2
-
Sugestão de atualização da função ACBrBancoBrasil.pas/GerarRegistroHeader240
Leiaute CNAB 240 Posições
Header de Arquivo Posições 164 a 166 Nº da Versão do Layout do Arquivo
Hoje está fixa em 030, preciso manipular esse valor conforme meu cliente, que é 087.
Nas posições 223 a 225 está fixo 'CSP'
-(Informar 'brancos', porém se o arquivo foi formatado com a versão do layout 030, pode ser informado 'CSP' nas posições 223 a 225, e 'zeros' nas posições 226 a 228)
Header de Lote Posições 14 a 16 Nº da Versão do Layout do Lote
Hoje está fixa em 020, preciso manipular esse valor conforme meu cliente, que é 045.
>------------------------------------------------------------------------------------------<
A seguir minhas alterações.
{ GERAR REGISTRO-HEADER DO ARQUIVO }
Result:= IntToStrZero(ACBrBanco.Numero, 3) + // 1 a 3 - Código do banco
'0000' + // 4 a 7 - Lote de serviço
'0' + // 8 - Tipo de registro - Registro header de arquivo
StringOfChar(' ', 9) + // 9 a 17 Uso exclusivo FEBRABAN/CNAB
ATipoInscricao + // 18 - Tipo de inscrição do cedente
PadLeft(OnlyNumber(CNPJCPF), 14, '0') + // 19 a 32 -Número de inscrição do cedente
PadLeft(Convenio, 9, '0') + '0014' + // 33 a 45 - Código do convênio no banco [ Alterado conforme instruções da CSO Brasília ] 27-07-09
ACBrBanco.ACBrBoleto.ListadeBoletos[0].Carteira + // 46 a 47 - Carteira
aModalidade + ' ' + // 48 a 52 - Variacao Carteira
aAgencia + // 53 a 57 - Código da agência do cedente
PadRight(AgenciaDigito, 1 , '0') + // 58 - Dígito da agência do cedente
aConta + // 59 a 70 - Número da conta do cedente
PadRight(ContaDigito, 1, '0') + // 71 - Dígito da conta do cedente
' ' + // 72 - Dígito verificador da agência / conta
TiraAcentos(UpperCase(PadRight(Nome, 30, ' '))) + // 73 a 102 - Nome do cedente
PadRight('BANCO DO BRASIL', 30, ' ') + // 103 a 132 - Nome do banco
StringOfChar(' ', 10) + // 133 a 142 - Uso exclusivo FEBRABAN/CNAB
'1' + // 143 - Código de Remessa (1) / Retorno (2)
FormatDateTime('ddmmyyyy', Now) + // 144 a 151 - Data do de geração do arquivo
FormatDateTime('hhmmss', Now) + // 152 a 157 - Hora de geração do arquivo
PadLeft(IntToStr(NumeroRemessa), 6, '0') + // 158 a 163 - Número seqüencial do arquivo
PadLeft(IntToStr(LayoutVersaoArquivo), 3, '0') + // 164 a 166 - Número da versão do layout do arquivo
StringOfChar('0', 5) + // 167 a 171 - Densidade de gravação do arquivo (BPI)
StringOfChar(' ', 20) + // 172 a 191 - Uso reservado do banco
StringOfChar('0', 20) + // 192 a 211 - Uso reservado da empresa
StringOfChar(' ', 11) + // 212 a 222 - 11 brancos
StringOfChar(' ', 3) + // 223 a 225 - 'CSP'
StringOfChar('0', 3) + // 226 a 228 - Uso exclusivo de Vans
StringOfChar(' ', 2) + // 229 a 230 - Tipo de servico
StringOfChar(' ', 10); // 231 a 240 - titulo em carteira de cobranca{ GERAR REGISTRO-HEADER DO LOTE }
Result:= Result + #13#10 +
IntToStrZero(ACBrBanco.Numero, 3) + // 1 a 3 - Código do banco
'0001' + // 4 a 7 - Lote de serviço
'1' + // 8 - Tipo de registro - Registro header de arquivo
'R' + // 9 - Tipo de operação: R (Remessa) ou T (Retorno)
'01' + // 10 a 11 - Tipo de serviço: 01 (Cobrança)
'00' + // 12 a 13 - Forma de lançamento: preencher com ZEROS no caso de cobrança
PadLeft(IntToStr(LayoutVersaoLote), 3, '0') + // 14 a 16 - Número da versão do layout do lote
' ' + // 17 - Uso exclusivo FEBRABAN/CNAB
ATipoInscricao + // 18 - Tipo de inscrição do cedente
PadLeft(OnlyNumber(CNPJCPF), 15, '0') + // 19 a 32 -Número de inscrição do cedente
PadLeft(Convenio, 9, '0') + '0014' + // 33 a 45 - Código do convênio no banco [ Alterado conforme instruções da CSO Brasília ] 27-07-09
ACBrBanco.ACBrBoleto.ListadeBoletos[0].Carteira + // 46 a 47 - Carteira
aModalidade + ' ' + // 48 a 52 - Variacao Carteira
aAgencia + // 53 a 57 - Código da agência do cedente
PadRight(AgenciaDigito, 1 , '0') + // 58 - Dígito da agência do cedente
aConta + // 59 a 70 - Número da conta do cedente
PadRight(ContaDigito, 1, '0') + // 71 - Dígito da conta do cedente
' ' + // 72 - Dígito verificador da agência / conta
PadRight(Nome, 30, ' ') + // 73 a 102 - Nome do cedente
StringOfChar(' ', 40) + // 104 a 143 - Mensagem 1 para todos os boletos do lote
StringOfChar(' ', 40) + // 144 a 183 - Mensagem 2 para todos os boletos do lote
PadLeft(IntToStr(NumeroRemessa), 8, '0') + // 184 a 191 - Número do arquivo
FormatDateTime('ddmmyyyy', Now) + // 192 a 199 - Data de geração do arquivo
StringOfChar('0', 8 ) + // 200 a 207 - Data do crédito - Só para arquivo retorno
StringOfChar(' ', 33); // 208 a 240 - Uso exclusivo FEBRABAN/CNAB -
Conforme foi citado acima não é obrigatório o envio do endereço completo apenas o CEP, estou homologando a carteira de um cliente e deu tudo certo apenas com o CEP dele, não tivemos problemas com a ausência do endereço completo. A melhor forma e testar, pegar esses boletos e pesquisar no site do banco para visualizar a 2ª via do mesmo caso apareça é por que está registrado.
- 2
-
Sim, problema resolvido.
- 1
-
Sim pelo suporte do banco descobrirão o motivo, sequencial da remessa errado
0800 202 1000 opção 04
- 2
-
Olá, estou com problema nos boletos do Bradesco. Existe algum motivo para os boletos serem reconhecidos apenas nas agencias do Bradesco? Mesmo depois do registro não são reconhecidos em outros bancos CAIXA e Banco do Brasil.
-
Olá, estou com problema nos boletos do Bradesco. Existe algum motivo para os boletos serem reconhecidos apenas nas agencias do Bradesco? Mesmo depois do registro não são reconhecidos em outros bancos CAIXA e Banco do Brasil.
Erro na consulta boleto Banco do Brasil
em ACBrBoleto
Postado
Estou com o mesmo problema
JSON={"erros":[{"codigoMensagem":"4678420","versaoMensagem":"1","textoMensagem":"Campo Carteira preenchido com dados inv\u00e1lidos.","codigoRetorno":"9998"}]}