Ir para conteúdo
  • Cadastre-se

dev botao

Banco Safra GerarRegistroTransacao400


Ver Solução Respondido por José M. S. Junior,
  • Este tópico foi criado há 1545 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Bom dia.

Na procedure GerarRegistroTransacao400

Foi feita alteração de
              PadRight(SeuNumero, 25, ' ')                                                   + //  38 a  62 - Uso exclusivo da Empresa
para
              Space(25)                                                                      + // Uso exclusivo da Empresa

Isto faz uma diferença muito grande para nosso projeto porque usamos preferencialmente essa informação no retorno para fazer a baixa dos recebimentos.

Por isso peço que essa linha fique como estava antes da atualização.

Obrigado.

  • Membros Pro
Postado

Boa tarde, um problema que identifiquei na Remessa400 do Safra foi com relação ao Nosso Numero.

Apos atualizar os fontes e fazer os testes, precebi que esta sendo gerado o Nosso numero de formas distintas. Segue exemplo:

No metodo MontarCampoNossoNumero a seguir esta tudo OK;

function TACBrBancoSafra.MontarCampoNossoNumero(const ACBrTitulo: TACBrTitulo): string;
begin
  with ACBrTitulo do
  begin
    Result := PadLeft(RightStr(NossoNumero,9),9,'0');
  end;
end; 

Porem ao gerar a remessa ele gera da seguinte forma:

IfThen(NossoNumero = '000000000', '000000000',
                                 PadLeft(RightStr(NossoNumero,8),8,'0') +
                                 CalcularDigitoVerificador(ACBrTitulo))

Ou seja...

Quando mando para a homologação vem uma rejeição, informando que o nossoNumero do boleto difere do NossoNumero da Remessa.

Atenciosamente...

 

Postado

fiz alguns ajustes e comentários na unit.

o cliente não estava conseguindo pagar o boleto, mensagem de código verificador inválido.

 

O código de barras e a linha digitável estão corretos, comparei com um boleto emitido pelo banco.

O arquivo de remessa ainda estou testando, como vi que estão alterando a unit, estou enviando a minha.

alterei isso tbm

Em 12/09/2019 at 08:52, pauloclv disse:

Bom dia.

Na procedure GerarRegistroTransacao400

Foi feita alteração de
              PadRight(SeuNumero, 25, ' ')                                                   + //  38 a  62 - Uso exclusivo da Empresa
para
              Space(25)                                                                      + // Uso exclusivo da Empresa

Isto faz uma diferença muito grande para nosso projeto porque usamos preferencialmente essa informação no retorno para fazer a baixa dos recebimentos.

Por isso peço que essa linha fique como estava antes da atualização.

Obrigado.

 

Em 13/09/2019 at 12:50, marcosfbm disse:

Boa tarde, um problema que identifiquei na Remessa400 do Safra foi com relação ao Nosso Numero.

Apos atualizar os fontes e fazer os testes, precebi que esta sendo gerado o Nosso numero de formas distintas. Segue exemplo:

No metodo MontarCampoNossoNumero a seguir esta tudo OK;

function TACBrBancoSafra.MontarCampoNossoNumero(const ACBrTitulo: TACBrTitulo): string;
begin
  with ACBrTitulo do
  begin
    Result := PadLeft(RightStr(NossoNumero,9),9,'0');
  end;
end; 

Porem ao gerar a remessa ele gera da seguinte forma:

IfThen(NossoNumero = '000000000', '000000000',
                                 PadLeft(RightStr(NossoNumero,8),8,'0') +
                                 CalcularDigitoVerificador(ACBrTitulo))

Ou seja...

Quando mando para a homologação vem uma rejeição, informando que o nossoNumero do boleto difere do NossoNumero da Remessa.

Atenciosamente...

 

obrigado

ACBrBancoSafra.pas

Postado

Favor desconsiderar o ultimo arquivo.

Código de barras e linha digitável de acordo com manual de dezembro de 2017 que parece ser o ultimo para este banco.

fiz um boleto com as informações do manual para simular a linha digitável e o código de barras.

ag: 40-0;

cc: 27824-7

valor: 180,84

vencimento 23/02/2025

nosso numero 26173001.

 

boleto igual ao modelo do manual com cobrança registras.png

Boleto igual ao modelo do manual sem cobrança registrada.png

modelo do manual.png

ACBrBancoSafra.pas

  • Curtir 1
Postado

Bom dia.

Por exemplo na geração do registro 400 dos bancos Bradesco, Banco do Brasil, Caixa e Santander o campo SeuNumero é gerado na posição 38 a 62 e o campo NumeroDocumento na posição 111 a 120.

Então seguindo este padrão, o que estaria invertido é na geração do registro 400 e consequentemente no retorno do banco Safra deste arquivo enviado pelo Emerson.

Obrigado.

Postado
1 hora atrás, pauloclv disse:

Bom dia.

Por exemplo na geração do registro 400 dos bancos Bradesco, Banco do Brasil, Caixa e Santander o campo SeuNumero é gerado na posição 38 a 62 e o campo NumeroDocumento na posição 111 a 120.

Então seguindo este padrão, o que estaria invertido é na geração do registro 400 e consequentemente no retorno do banco Safra deste arquivo enviado pelo Emerson.

Obrigado.

boa tarde paulo.

fiz de acordo com o manual na remessa o campo seu numero aparece na posicao 111 a 120 conforme imagem

image.png.6928d8146c5d10541c1d973829d84ff1.png

e o no retorno existe esta campo em duas posições 117 a 126 e 377 a 391 (achei estranho), porem mantive na posição 117 a 126 como estava antes da revisao 16972.

image.png.2667b742719470729532e02a7e73ad6f.png

att

 

Postado
17 horas atrás, pauloclv disse:

Boa tarde Emerson.
Olhando o manual entendo seu argumento.

O problema acaba sendo como cada manual identifica a informação SeuNumero.
Criei um novo tópico para que isso possa ser avaliado.

Obrigado.

bom dia Paulo.

sobre a posição do campo, não vejo problema em estarem em lugares diferente desde que no retorno este campo tenha a mesma informação que foi passada na remessa.

tipo:

remessa 

    SeuNumero: 123456789

    NumeroDocumento: 152345-1/6

 

e no retorno

   SeuNumero: 123456789

   NumeroDocumento: 152345-1/6

 

imagino que nesse caso a posição que o banco define o campo não faz diferença.

att.

abraço

 

Postado

Bom dia Emerson

Concordo que a posição padrão(posição 38 a 62) usada na maioria das implementações não seja obrigatória, você tem razão em dizer que importante é enviar e receber a mesma informação.

A diferença ocorre na medida em que a propriedade SeuNumero se refira a identificação do título na empresa que na maioria das implementações tem 25 caracteres e no manual do Banco Safra tenha 10 caracteres conforme imagem que você enviou anteriormente.

O que é descrito como identificação do título na empresa(ou algo parecido) em outros  bancos, no manual do Banco Safra está descrito como: uso exclusiva da empresa. A atribuição de nome, neste caso, causa confusão.

image.png.8990916d649f0cae0a07fa1ca898fc71.png

Por esse motivo entendo que a versão que está no repositório segue o padrão das demais implementações e no meu entendimento deve ser mantida.

Obrigado

  • Curtir 1
  • 3 semanas depois ...
  • Membros Pro
Postado
Em 13/09/2019 at 12:50, marcosfbm disse:

Boa tarde, um problema que identifiquei na Remessa400 do Safra foi com relação ao Nosso Numero.

Apos atualizar os fontes e fazer os testes, precebi que esta sendo gerado o Nosso numero de formas distintas. Segue exemplo:

No metodo MontarCampoNossoNumero a seguir esta tudo OK;

function TACBrBancoSafra.MontarCampoNossoNumero(const ACBrTitulo: TACBrTitulo): string;
begin
  with ACBrTitulo do
  begin
    Result := PadLeft(RightStr(NossoNumero,9),9,'0');
  end;
end; 

Porem ao gerar a remessa ele gera da seguinte forma:

IfThen(NossoNumero = '000000000', '000000000',
                                 PadLeft(RightStr(NossoNumero,8),8,'0') +
                                 CalcularDigitoVerificador(ACBrTitulo))

Ou seja...

Quando mando para a homologação vem uma rejeição, informando que o nossoNumero do boleto difere do NossoNumero da Remessa.

Atenciosamente...

 

Estou tendo esse mesmo problema. Meu ACBr está atualizado. será q se eu baixar esse arquivo que o marcosfbm usou vou conseguir homologar tb?

Postado

Boa tarde à todos.

Enviei um arquivo de remessa para homologação no banco Safra.

Linha gerada:

1020255642300011865000058037511                               000000000 

Respostas:

No Registro Detalhe do Arquivo - Nas posições: 18 a 31 - Identificação da empresa no Banco: A empresa deve inserir o numero da agência de 5 dígitos + conta com 9 dígitos, como a conta não possui 9 dígitos, pode completar com zero a esquerda: 06500005803751
 

constructor TACBrBancoSafra.Create(AOwner: TACBrBanco);
begin
  inherited Create(AOwner);
  fpDigito                         := 7;
  fpNome                         := 'Banco Safra';
  fpNumero                     := 422;
  fpTamanhoAgencia    := 5;
  fpTamanhoConta        := 8;  <= tamanho da conta corrente
  fpTamanhoCarteira     := 1;
  fpTamanhoMaximoNossoNum := 9;
end;
 

 

A agência tem 5 dígitos porém, inicia com zero( 06500).

Acredito que na procedure TACBrBancoSafra.GerarRegistroTransacao400(ACBrTitulo: TACBrTitulo;
  aRemessa: TStringList), na linha 864, está excluindo o zero.

    aAgencia := PadLeft(RightStr( ACBrBoleto.Cedente.Agencia, 4), 4, '0') +
                                                                                                            PadLeft(ACBrBoleto.Cedente.AgenciaDigito, 1, '0');

Os demais erros de localização dos dados, devam estar relacionados com o tamanho do código da agência.

Segue em anexo o arquivo cnab400 enviado pelo departamento responsável pela homologação.

Desde já agradeço,

Tércio Lins.

cnab400.pdf

Postado
33 minutos atrás, Tercio Lins disse:

Boa tarde à todos.

Enviei um arquivo de remessa para homologação no banco Safra.

Linha gerada:

1020255642300011865000058037511                               000000000 

Respostas:

No Registro Detalhe do Arquivo - Nas posições: 18 a 31 - Identificação da empresa no Banco: A empresa deve inserir o numero da agência de 5 dígitos + conta com 9 dígitos, como a conta não possui 9 dígitos, pode completar com zero a esquerda: 06500005803751
 

constructor TACBrBancoSafra.Create(AOwner: TACBrBanco);
begin
  inherited Create(AOwner);
  fpDigito                         := 7;
  fpNome                         := 'Banco Safra';
  fpNumero                     := 422;
  fpTamanhoAgencia    := 5;
  fpTamanhoConta        := 8;  <= tamanho da conta corrente
  fpTamanhoCarteira     := 1;
  fpTamanhoMaximoNossoNum := 9;
end;
 

 

A agência tem 5 dígitos porém, inicia com zero( 06500).

Acredito que na procedure TACBrBancoSafra.GerarRegistroTransacao400(ACBrTitulo: TACBrTitulo;
  aRemessa: TStringList), na linha 864, está excluindo o zero.

    aAgencia := PadLeft(RightStr( ACBrBoleto.Cedente.Agencia, 4), 4, '0') +
                                                                                                            PadLeft(ACBrBoleto.Cedente.AgenciaDigito, 1, '0');

Os demais erros de localização dos dados, devam estar relacionados com o tamanho do código da agência.

Segue em anexo o arquivo cnab400 enviado pelo departamento responsável pela homologação.

Desde já agradeço,

Tércio Lins.

cnab400.pdf 461 kB · 0 downloads

Um adendo: não é para incluir o dígito verificador da agência, como também o da conta corrente.

Postado
48 minutos atrás, Tercio Lins disse:

Um adendo: não é para incluir o dígito verificador da agência, como também o da conta corrente.

Alterações feitas:

constructor TACBrBancoSafra.Create(AOwner: TACBrBanco);
begin
  inherited Create(AOwner);
  fpDigito                := 7;
  fpNome                  := 'Banco Safra';
  fpNumero                := 422;
  fpTamanhoAgencia        := 5;
  fpTamanhoConta          := 9;
  fpTamanhoCarteira       := 1;
  fpTamanhoMaximoNossoNum := 9;
end;
 

procedure TACBrBancoSafra.GerarRegistroTransacao400(ACBrTitulo: TACBrTitulo;
  aRemessa: TStringList);
 

    aAgencia := PadLeft(RightStr( ACBrBoleto.Cedente.Agencia, 5), 5, '0');

    aConta := PadLeft(ACBrBoleto.Cedente.Conta, 9, '0');

    Sem adicionar os DV;

 

Uma observação:

 

Na procedure:

procedure TACBrBancoSafra.GerarRegistroHeader400(NumeroRemessa: integer;
  ARemessa: TStringList);

 

  with ACBrBanco.ACBrBoleto.Cedente do
  begin
    wLinha := '0'                             + // ID do Registro Header
              '1'                             + // ID do Arquivo de Remessa
              'REMESSA'                       + // Literal de Remessa
              '01'                            + // Código do Tipo de Serviço
              PadRight('COBRANCA', 15)        + // Descrição do tipo de serviço + "brancos"
              PadLeft(CodigoCedente, 14, '0') + // Codigo da Empresa no Banco
              Space(6)                        + // "brancos"
              PadRight(Nome, 30)              + // Nome da Empresa
              IntToStr(Numero)                + // Código do Banco - 237
              PadRight('BANCO SAFRA', 15)     + // Nome do Banco - BANCO SAFRA + "brancos"
              FormatDateTime('ddmmyy', Now)   + // Data de geração do arquivo
              Space(291)                      + // "brancos"
              IntToStrZero(NumeroRemessa, 3)  + // Nr. Sequencial de Geração do Arquivo
              IntToStrZero(1, 6);               // Nr. Sequencial do Registro no Arquivo

    ARemessa.Text := ARemessa.Text + UpperCase(wLinha);
  end;
 

CodigoCedente  é colocado sem a concatenação dos dois códigos, ou seja, ele terá que ser alimentado antes nos dados do cedente.

Poderia-se colocar também, o CodigoCedente direto na procedure GerarRegistroTransacao400.

 

 
 

 

Postado
1 hora atrás, Tercio Lins disse:

Alterações feitas:

constructor TACBrBancoSafra.Create(AOwner: TACBrBanco);
begin
  inherited Create(AOwner);
  fpDigito                := 7;
  fpNome                  := 'Banco Safra';
  fpNumero                := 422;
  fpTamanhoAgencia        := 5;
  fpTamanhoConta          := 9;
  fpTamanhoCarteira       := 1;
  fpTamanhoMaximoNossoNum := 9;
end;
 

procedure TACBrBancoSafra.GerarRegistroTransacao400(ACBrTitulo: TACBrTitulo;
  aRemessa: TStringList);
 

    aAgencia := PadLeft(RightStr( ACBrBoleto.Cedente.Agencia, 5), 5, '0');

    aConta := PadLeft(ACBrBoleto.Cedente.Conta, 9, '0');

    Sem adicionar os DV;

 

Uma observação:

 

Na procedure:

procedure TACBrBancoSafra.GerarRegistroHeader400(NumeroRemessa: integer;
  ARemessa: TStringList);

 

  with ACBrBanco.ACBrBoleto.Cedente do
  begin
    wLinha := '0'                             + // ID do Registro Header
              '1'                             + // ID do Arquivo de Remessa
              'REMESSA'                       + // Literal de Remessa
              '01'                            + // Código do Tipo de Serviço
              PadRight('COBRANCA', 15)        + // Descrição do tipo de serviço + "brancos"
              PadLeft(CodigoCedente, 14, '0') + // Codigo da Empresa no Banco
              Space(6)                        + // "brancos"
              PadRight(Nome, 30)              + // Nome da Empresa
              IntToStr(Numero)                + // Código do Banco - 237
              PadRight('BANCO SAFRA', 15)     + // Nome do Banco - BANCO SAFRA + "brancos"
              FormatDateTime('ddmmyy', Now)   + // Data de geração do arquivo
              Space(291)                      + // "brancos"
              IntToStrZero(NumeroRemessa, 3)  + // Nr. Sequencial de Geração do Arquivo
              IntToStrZero(1, 6);               // Nr. Sequencial do Registro no Arquivo

    ARemessa.Text := ARemessa.Text + UpperCase(wLinha);
  end;
 

CodigoCedente  é colocado sem a concatenação dos dois códigos, ou seja, ele terá que ser alimentado antes nos dados do cedente.

Poderia-se colocar também, o CodigoCedente direto na procedure GerarRegistroTransacao400.

 

 
 

 

Boa tarde Tercio. 

Usa a unit que postei acima, nela consta todos estes ajustes de tamanho de conta, nosso número, código do cedente entre outras coisas

Tenho vários clientes usando o banco safra 

Att

Postado
Em 12/10/2019 at 18:01, Emerson Teixeira disse:

Boa tarde Tercio. 

Usa a unit que postei acima, nela consta todos estes ajustes de tamanho de conta, nosso número, código do cedente entre outras coisas

Tenho vários clientes usando o banco safra 

Att

Boa Emerson Teixeira.

Vou verificar a unit.

Grato.

  • Administradores
Postado

Bom dia.

Obrigada pelas informações e alterações, recentemente tivemos uma série de mudanças na unit desse banco, por isso é preciso analisar com calma as novas mudanças.

@José M. S. Junior poderia adicionar a sua agenda para verificar?

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 !!

  • 3 meses depois ...
Postado (editado)

Bom dia a todos, 

Estou fazendo Homologação de boletos no Banco Safra e eles estão validando o nosso número como não existe código verificador

e no código do ACBr está acrescentando um código verificador no arquivo de remessa.

Gostaria de saber onde consta que deve conter esse digito, pois no manual do leiaute do  arquivo CNAB 400, não diz nada sobre digito verificador.

Segue imagens  e manual

link do manual em anexo: https://www.safra.com.br/pessoa-juridica/cash-management-servicos/layout-de-arquivos.htm

img3.thumb.PNG.8a81b39d1a7b7699eeaa2f02beb2d93e.PNGimg2.thumb.PNG.e10131c3feadea408cb00d73008618d2.PNGimg1.thumb.PNG.15754894706c1b36576794d2120a1d98.PNG

 

Leiaute de Arquivos - Cobranca CNAB 400.pdf

Editado por Dyego Noé Sousa Gomes

Dyego Noé                                                      | e-mail: [email protected]
Analista de Sistemas e Desenvolvedor         | skype: dyegonoe

 

  • Este tópico foi criado há 1545 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.