Jump to content

dev botao

Possível Erro no AcbrValidador


Go to solution Solved by Juliana Tamizou,
  • Este tópico foi criado há 1698 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Bom dia,

Nas minhas análises concluí que o acbrValidador está fazendo algo errado ao conferir o prefixo de GTINs.
Ao submetermos o código 0606529657802, o Acbr dá como prefixo inválido, mas não é.

No portal nacional de notas eletrônicas, menu "Documentos -> Diversos -> Tabela Prefixo GS1" temos uma planilha com a listagem dos prefixos válidos, bem como uma planilha que demonstra como se extrai o prefixo de um código.

Texto copiado da planilha/norma
Como Identificar o "Prefixo GS1"                                                                                    
O GTIN pode possuir 8, 12, 13 ou 14 algarismos, e segue abaixo uma forma prática de identificar o "Prefixo GS1":    
- Normalizar o tamanho do campo em 14 posições numéricas, com zeros não significativos;                                
- Se primeiras 6 posições = Zeros ==> GTIN-8                                                                        
    -Prefixo GS1: posições 7 a 9 do GTIN normalizado;                                                                
- Se primeiras 6 posições <> Zeros                                                                            
    -Prefixo GS1: posições 2 a 4 do GTIN normalizado;
        

Geração do prefixo segundo normas acima:
- GTIN normlizado: 00606529657802                                                                
- posições 2 a 4 do GTIN normalizado: 060 -> prefixo válido

Já o AcbrValidador gera um prefixo = 606 e, nesse caso seria um prefixo inválido. Mas esse cálculo do Acbr está incorreto, na minha opinião.
                                                                                        
Sugestão para correção (.pas corrigida em anexo)
Trocar a rotina:
  if (StrToInt(Copy(CodigoNormalizado, 1, 6)) = 0) then //gtin8
     sPrefixo := copy(CodigoNormalizado, 7, 3)
   else if StrToInt(Copy(CodigoNormalizado, 1, 2)) = 0 then //gtin12
     sPrefixo := copy(CodigoNormalizado, 3, 3)
   else
     sPrefixo := copy(CodigoNormalizado, 2, 3);

Por esta:
 if (StrToInt(Copy(CodigoNormalizado, 1, 6)) = 0) then //gtin8
     sPrefixo := copy(CodigoNormalizado, 7, 3)
   else
     sPrefixo := copy(CodigoNormalizado, 2, 3);

Obrigado

ACBrValidador.pas

  • Like 2

Valdir Dill

Rio de Janeiro - RJ

 

 

Link to comment
Share on other sites

  • Administradores

Boa tarde.

Obrigada pela análise, adicionado para validação.

Att.

  • Like 1
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 to comment
Share on other sites

  • 2 weeks later...
  • Administradores
  • Solution

Bom dia.

Contribuição disponível no svn.

Att.

  • Like 3
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 to comment
Share on other sites

  • 2 months later...
  • Este tópico foi criado há 1698 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.