Ir para conteúdo
  • Cadastre-se

dev botao

Possível Erro De Lógica Na Geração Do Nosso Número (Bradesco E Bb)


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

Recommended Posts

Após vários dias tentando adaptar meu sistema para a forma de geração do campo nosso número do ACBrBoleto, comecei a debugar as rotinas do ACBr e em alguns momentos me deparei com uma situação onde posso não estar seguindo ou entendendo a sequência correta de operação com ACBr ou então há um erro de lógica nas rotinas.

 

Apesar de funcionar sem erro para emitir boletos, no meu caso, para salvar no título, era necessário obter o NN gerado completo pelo componente e isso ocorre apenas em determinado momento, sendo assim, tentei de 2 formas: Forçar o cálculo antes de imprimir ou obter o NN gerado após imprimir. Neste ponto que começou a acusar erro de tamanho máximo do NN pelo componente e também o NN do banco do brasil com registro foi gerado diferente do manual, onde devia ter 12 posições tinha 17.

 

Para entender e simular os passos:

 

1. No primeiro momento, passa-se para o componente apenas o sequencial do NN e ele calcula o tamanho máximo do NN somente da parte sequencial dele.

 

2. Após componente gerar o NN completo que, em alguns casos, são adicionados carteira (bradesco), código do cedente (banco do brasil, carteira 18), DV, barra, e/ou traço, etc. ao NN, em determinado momento, o componente faz a validação do tamanho do NN completo mas com base no tamanho apenas da parte sequencial do NN, acusando erro de tamanho máximo.

 

Exemplo Bradesco:

 

NN completo = CC SSSSSSSSSS D    C=carteira (2)     S=sequencial  (11)   D=DV (1)    Tamanho total = 14 (só números)

 

1. Componente seta tamanho máximo como 11 (somente parte do sequencial)

2. Gera NN completo conforme especificação

3. Na validação de tamanho com NN completo acusa erro, pois NN tem 14 digitos e tamanho máximo está definido como 11

 

Exemplo BB convênio com 4 posições, sem registro:

 

NN completo = SSSSSSSSSSSSSSSSS      S = sequencial (17)    Tamanho total = 17 (só números, sem DV sem mais nada)

 

1. Se passar sequencial do NN ao componente com tamanho menor que 10, seta tamanho máximo como 05 (somente parte do sequencial, mas que seria tamanho máximo apenas da parte sequencial da carteira com registro)

2. Gera NN completo conforme especificação com 17 posições, e na rotina que calcula o tamanho máx. do NN passa para 17 no meio do processamento.

3. Na validação de tamanho com NN completo passa, tendo em vista que o tamanho do NN completo é maior que 10 (código que calcula tamanho máximo do sequencial do NN)

 

Exemplo BB convênio com 4 posições, com registro:

 

NN completo = CCCCCC SSSSS D    C = Cod.convenio (6)    S = sequencial (5)    D = DV (1)   Tamanho total = 12 (só números)

 

1. Componente seta tamanho máximo da parte do sequencial do NN como 5.

2. Gera NN completo conforme especificação acima com 12 posições, mas recalcula o tamanho máx. do NN para 17 agora (trecho do código que verifica se tamanho do NN é maior que 10 para setar tam. max. para 17).

3. Em determinado momento, formata o NN acima com 17 posições, mantendo a numeração gerada, adicionando zeros a esquerda por causa do novo tamanho.

4. Na validação de tamanho com NN completo passa, tendo em vista que o tamanho do NN completo é maior que 10 (código que calcula tamanho máximo do sequencial do NN)

 

Inclusive nesta validação de tamanho, considera também os traços, barras, etc. não validando apenas os digitos numericos.

 

Na minha opinião, a solução seria alterar o código fonte do ACBR com as sugestões seguintes:

 

1. Adicionar propriedade no ACBrTitulo para informar apenas sequencial do NN com cálculo e validação apenas do tamanho desta parte sequencial dele;

2. A propriedade "NossoNumero" do ACBrTitulo gerar automaticamente o NN completo calculado com cálculo e validação de seu tamanho completo.

3. Adicionar função (pública) no componente para retornar ou gerar o NN calculado a fim de se obtê-lo a qualquer momento, de acordo com a necessidade de cada sistema.

4. Adicionar propriedade "SemRegistro" tipo boolean no ACBrBanco que será setada pelo usuário e será usada pelo ACBrBancoBrasil (e por ventura outro banco) no cálculo do tamanho máximo do NN para carteira 16 e 18 sem registro, em substituição  ao código fonte "If Length(trim(NossoNumero)) > 10" que se torna true no meio do processo, quando NN está completo e pode ser um erro de lógica.

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

  • Administradores

Bom dia.

 

Resposta no tópico 

 

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

Oi bom dia, muito obrigado pela sua atenção...

 

Antes de postar eu já tinha consultado todos os tópicos a respeito, inclusive, até havia postado no mesmo tópico uma solução que achei mas que acabei esbarrando (ou descobrindo) outro problema.

 

O componente após ter gerado o NN completo, acusa erro de tamanho máximo do NN, entenda assim, o componente aceita que se informe apenas a parte sequencial do NN e gera o NN completo sozinho (com mais dados, carteira, agencia, etc) e depois acusa erro do tamanho NN gerado por ele mesmo, mas pq está testando com base em cálculo do tamanho apenas do sequencial.

 

Isso já ocorreu no meu sistema com Bradesco, BB em varias carteiras. Quando usava somente para emissão do boleto, funcionava perfeito, descobri o problema quando precisei pegar o NN antes de imprimir e alterei o sistema, acho que outros programadores devem ter passado pelo problema e ter se adaptado. Sugeri o post apenas para que seja avaliado se é mesmo um erro de lógica e sugerir uma melhoria, dados que seria interessante se obter o NN completo calculado a qualquer momento e não apenas em dado momento de processamento do componente e ainda exibir o erro de tamanho.

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

 

Oi bom dia, muito obrigado pela sua atenção...

 

Antes de postar eu já tinha consultado todos os tópicos a respeito, inclusive, até havia postado no mesmo tópico uma solução que achei mas que acabei esbarrando (ou descobrindo) outro problema.

 

O componente após ter gerado o NN completo, acusa erro de tamanho máximo do NN, entenda assim, o componente aceita que se informe apenas a parte sequencial do NN e gera o NN completo sozinho (com mais dados, carteira, agencia, etc) e depois acusa erro do tamanho NN gerado por ele mesmo, mas pq está testando com base em cálculo do tamanho apenas do sequencial.

 

Isso já ocorreu no meu sistema com Bradesco, BB em varias carteiras. Quando usava somente para emissão do boleto, funcionava perfeito, descobri o problema quando precisei pegar o NN antes de imprimir e alterei o sistema, acho que outros programadores devem ter passado pelo problema e ter se adaptado. Sugeri o post apenas para que seja avaliado se é mesmo um erro de lógica e sugerir uma melhoria, dados que seria interessante se obter o NN completo calculado a qualquer momento e não apenas em dado momento de processamento do componente e ainda exibir o erro de tamanho.

 

 

A ideia do post anterior é centralizar a discussão do assunto em um único tópico para facilitar a resolução, por isso vou centralizar as repostas lá, considerando oque vc acabou de expor, provavelmente  precisamos somente fazer com que a validação considere somente os valores informados ao componente...

 

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

  • Este tópico foi criado há 3357 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.