Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Consultores
Postado

   Enquanto estava analisando um problema nos meus clientes, descobri que a validação EAN13 da unit ACBrUtil.pas (método EAN13Valido) não está correta. Ela é chamada pelo componente ACBrInStore. Não consegui descobrir desde quando isso vem ocorrendo, mas me parece que é recente.

 

   Códigos como 7896232517828, 7896645900026, 7897186015095 e 2000100002629, estão sendo acusados como inválidos. No entanto, eles são válidos conforme pode-se testar em http://www.gs1.org/check-digit-calculator.

   No entanto, o ACBrValidador está funcionando corretamente.

 

   Adicionei testes unitários para esse método exemplificar e facilitar a correção. Daí percebi que o que acontece é que ao passar para o método ACBrUtil.EAN13_DV um valor com 13 caracteres, ele trunca de forma incorreta e calcula o dígito validador errado. Mas se você passa 12 caracteres, ele vai fazer da forma certa. É como se o PadR estivesse trocado por um PadL...

   Temos algumas opções então para corrigir:

   1) Trocar o código na função ACBrUtils.EAN13_DV utilizando um PadL:

function EAN13_DV(CodEAN13: String): String;
Var A,DV : Integer ;
begin
   Result   := '' ;
   CodEAN13 := String( PadL(AnsiString(Trim(String(CodEAN13))),12,'0') ) ;
   if not StrIsNumber( AnsiString( CodEAN13 ) ) then
      exit ;

   DV := 0;
   For A := 12 downto 1 do
      DV := DV + (StrToInt( CodEAN13[A] ) * IfThen(odd(A),1,3));

   DV := (Ceil( DV / 10 ) * 10) - DV ;

   Result := IntToStr( DV );
end;

2) Trocar o método EAN13Valido pelo método na unit ACBrValidador (ACBrValidadorValidarGTIN)

 

  

   Como não sei onde esse método é utilizado, fiquei pensando, será que não seria uma boa ideia passar a utilizar os métodos do ACBrValidador aproveitando para reduzir a redundância de código?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Fundadores
Postado

Lembro que o Juliomar havia subido uma modificação para o PadR, que poderia causar esse tipo de problema... mas acho que já foi revertida...

 

O problema ocorre com o Trunk2 ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Consultores
Postado

No trunk eu sei que está com problemas. Mas vou enviar os testes para o trunk2 também e verificar.

 

Sim Daniel!

reverti e está conforme era pra ser

Pois é... como eu disse antes, não consegui descobrir desde quando começou a acontecer esse problema. Só sei que está funcionando no ACBrValidador e não na ACBrUtil.EAN13Valido.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Consultores
Postado

Testei no Trunk2, mas o problema só se encontra realmente no trunk.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Consultores
Postado

O problema está na PadR. Ele está truncando o parâmetro passado saltando o primeiro caracter. Estou alterando para PadL para corrigir.

Os testes unitários passaram sem nenhum problema.

 

Vou tentar compatibilizar os testes unitários tanto do trunk como o trunk2 só para facilitar o acompanhamento.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Este tópico foi criado há 3449 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.