Ir para conteúdo
  • Cadastre-se

dev botao

Acbrbancosafrabradesco.pas: Banco Safra Com Correspondente Bradesco.


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

Recommended Posts

  • 10 meses depois ...

Jacinto,

 

utilizo o componente para os bancos ITAU, SANTANDER, HSBC e BRADESCO. Estou tentando homologar agora para o SAFRA com correspondente bancário BRADESCO. Segundo a documentação do SAFRA, o arquivo de remessa segue o layout padrão do SAFRA, porém a emissão dos boletos segue um padrão específico.

 

Minhas dúvidas:

 

1. Devo utilizar o cobSafraBradesco tanto para a geração da remessa quanto para a emissão dos boletos, ou devo utilizar o cobSafra na geração da remessa e o cobSafraBradesco para a geração dos boletos?

2. Estes layouts foram homologados, pois estou encontrando várias inconsistências?

 

At.

 

Jorge

Link para o comentário
Compartilhar em outros sites

Utilize cobSafraBradesco tanto para emissão do boleto quanto para geração da remessa.

 

Provavelmente na emissão do boleto você tenha de configurar o cedente como sendo o Banco Safra.

 

Os layouts foram homologados em 02/2014 e estão em operação desde então, porém não sei lhe informar se atualmente estão mais criteriosos quanto a homologação.

Link para o comentário
Compartilhar em outros sites

Jacinto,

 

o layout  atual não está sendo aprovado na homologação, apresentando diversas inconsistências. Você tem boletos Safra/Bradesco em produção?

 

E temos um problema difícil de resolver usando apenas um layout: o calculo do dígito verificador do nosso número é feito segundo o SAFRA para a geração do arquivo de remessa e segundo o BRADESCO para emissão do boleto.

 

Rotina de Calculo do Dv Módulo 11 Safra

Se na divisão o resto for 0 (Zero), o Dígito de controle será 1 (Um)
Se na divisão o resto for 1 (Um), o Dígito de controle será 0 (Zero)

Rotina de Calculo do Dv Módulo 11 Bradesco

Se o resto da divisão for 0 considere DV =  0
Se o resto da divisão for 1 considere DV = P      

Link para o comentário
Compartilhar em outros sites

Tenho boletos do Safra com o Bradesco como correspondente em produção sim, desde 02/2014.

 

Realmente tive que tratar alguma particularidades. Desculpe mas não lembro de todas de imediato. Referente ao cálculo do dígito verificador foi necessário no ato da emissão gerar o nosso número da seguinte forma:

FTitulo.NossoNumero := FormatDateTime('yy', <Data_de_Vencimento>) + IntToStr(VSeqNossoNumero) 
  + Self.CalcularDigitoVerificadorSafra(IntToStr(VSeqNossoNumero));

function CalcularDigitoVerificadorSafra(ANossoNumero: String): String;
begin
  FACBrBoleto.Banco.BancoClass.Modulo.CalculoPadrao;
  FACBrBoleto.Banco.BancoClass.Modulo.Documento := ANossoNumero;
  FACBrBoleto.Banco.BancoClass.Modulo.Calcular;

  if FACBrBoleto.Banco.BancoClass.Modulo.ModuloFinal = 0 then
    Result := '1'
  else if FACBrBoleto.Banco.BancoClass.Modulo.ModuloFinal = 1 then
    Result := '0'
  else
    Result := IntToStr(FACBrBoleto.Banco.BancoClass.Modulo.DigitoFinal);
end;
Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

 

Me parece um pouco incoerente  esse tratamento onde se o ModuloFonal for 0 o Result é  1 e se for 1 o Result é 0. Qual manual foi utilizado para esta implementação?

 

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

Bom dia.

 

Me parece um pouco incoerente  esse tratamento onde se o ModuloFonal for 0 o Result é  1 e se for 1 o Result é 0. Qual manual foi utilizado para esta implementação?

 

Att.

 

Bom dia.

 

Segue em anexo o manual utilizado, veja o item 10.2 na página 40.

Cobranca Safra CNAB 400 v2010-09.pdf

Link para o comentário
Compartilhar em outros sites

Jacinto,

 

este código não se encontra no seu arquivo ou no fonte do ACBR.....

 

Se vocês me ajudarem proponho ajustar o ACBRBancoSafraBradesco....Posso contar com vocês?

 

Minha primeira dúvida é utilizar o ACBRBancoSafra ou o ACBRBancoSafraBradesco para a geração da remessa? Fiz as correções no ACBRBancoSafra mas, se for o caso para manter o padrão, posso fazer estes ajustes no ACBRBancoSafraBradesco. Fiz desta forma pois preciso ter duas funções de cálculo de dígito verificador....uma SAFRA (para a remessa) e outra SAFRA/BRADESCO (para o boleto).

 

Aguardo suas sugestões.....

Editado por jorgerp
Link para o comentário
Compartilhar em outros sites

Jorge, o manual que disponibilizei foi o que o suporte me forneceu na época.

 

Realmente este trecho de código não está na unit ACBrBancoSafraBradesco.pas, acabei por utiliza-lo diretamente na aplicação.

 

Sugiro utilizar a unit ACBrBancoSafraBradesco.pas pois acredito que o Safra também tenha o serviço de cobrança sem banco correspondente.

 

Pode contar comigo no que precisar.

Link para o comentário
Compartilhar em outros sites

Jacinto e Juliana,

 

fiz todas as alterações necessárias no ACBRBancoSafraBradesco, porém estou com este último problema....

 

Preciso de duas funções de cálculo de dígito verificador,

 

sendo para o cálculo do dígito Safra:

 

function TACBrBancoSafraBradesco.CalcularDigitoVerificador(const ACBrTitulo: TACBrTitulo): String;
begin
  Modulo.CalculoPadrao;
  Modulo.Documento := ACBrTitulo.NossoNumero;
  Modulo.Calcular;
  if Modulo.ModuloFinal = 0 then
    Result := '1'
  else
    Result := IntToStr(Modulo.DigitoFinal);
end;
 
e a do Bradesco:
 
function TACBrBancoSafraBradesco.CalcularDigitoVerificadorBradesco(const ACBrTitulo: TACBrTitulo): String;
begin
  Modulo.CalculoPadrao;
  Modulo.MultiplicadorInicial := 2;
  Modulo.MultiplicadorFinal := 7;
  Modulo.Documento := ACBrTitulo.Carteira + Copy(DateToStr(ACBrTitulo.DataDocumento), 9, 2) + ACBrTitulo.NossoNumero + CalcularDigitoVerificador(ACBrTitulo);
  Modulo.Calcular;
 
  if Modulo.ModuloFinal = 1 then
    Result := 'P'
  else
    Result := IntToStr(Modulo.DigitoFinal);
end;

 

Segue a regra de cálculo do dígito verificador do Bradesco segundo o manual do SAFRA página 34:

 

d) CÁLCULO DO DÍGITO VERIFICADOR DO “NOSSO NÚMERO” BRADESCO
· Dados para obtenção do DV do número bancário do Bradesco:
o Carteira: duas posições fixas = “09”
o Ano de emissão do boleto: duas posições correspondendo ao ano de emissão
o Nosso Número Safra: nove posições, incluindo o dígito Safra
o Cálculo do dígito do Nosso Número Bradesco pelo critério do módulo 11
· Ver cálculo conforme exemplo abaixo:
Ex: Carteira /Ano emissão do Boleto/ N/Número = 09 05 207732833-?
0 9 0 5 2 0 7 7 3 2 8 3 3
2 7 6 5 4 3 2 7 6 5 4 3 2
0 +63 +0 +25 +8 +0 +14 +49 +18 +10 +32 +9 +6 = 234
· Dividir o resultado da soma por 11
234 11
14 21
03 Resto*
· Subtrair o resto de 11
11 - 3 = 8 Este será o dígito verificador do Nosso Número Bradesco
*** Importante: Se o resto da divisão for 0 considere DV = 0
Se o resto da divisão for 1 considere DV = “P”

 

Agora vamos ao problema....embora eu configure o a propriedade Modulo.MultiplicadorFinal := 7 a função Modulo.Calcular continua utilizando 9 como o multiplicador final, retornando um DV incorreto.

 

Acredito que o Set desta propriedade não está fazendo efeito, o que afeta o componente de forma geral.

 

Poderiam ajudar e ver qual a melhor forma de resolvermos isto?

 

Abraços

Link para o comentário
Compartilhar em outros sites

Meu caro, isso ocorre devido ao fato de na função CalcularDigitoVerificadorBradesco você fazer uso de CalcularDigitoVerificador, e este utilizar o CalculoPadrao, que por sua vez utiliza o MultiplicadorFinal igual a 9.

 

Tente com o seguinte código:

function TACBrBancoSafraBradesco.CalcularDigitoVerificadorBradesco(const ACBrTitulo: TACBrTitulo): String;
begin
  Modulo.CalculoPadrao;
  Modulo.MultiplicadorInicial := 2;
  Modulo.Documento := ACBrTitulo.Carteira + Copy(DateToStr(ACBrTitulo.DataDocumento), 9, 2) 
    + ACBrTitulo.NossoNumero + CalcularDigitoVerificador(ACBrTitulo);
  Modulo.MultiplicadorFinal := 7;
  Modulo.Calcular;
 
  if Modulo.ModuloFinal = 1 then
    Result := 'P'
  else
    Result := IntToStr(Modulo.DigitoFinal);
end;
Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...
  • Este tópico foi criado há 2384 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.

The popup will be closed in 10 segundos...