Ir para conteúdo
  • Cadastre-se

Sugestão correção Validação Número Drawback


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

Recommended Posts

Postado

Olá gostaria de sugerir uma correção na validação do Drawback da NFe, me deparei essa semana com uma nota de importação de um cliente, o qual tem seu registro de Drawback iniciando com 2016, sua concessão do Drawback é valido por 2 anos, conforme anexo abaixo destaquei data de registro e validade, acontece que o ACBR NFe existe uma validação que estava retornando Falso o qual impedia a emissão da NFe, ajustei o método ValidaDrawback do fonte ACBrDFeUtil.pas, anexei nesse post tanto o fonte completo como o patch de correção do ACBr como for mais fácil para comparar com minha alteração.

Também aproveito para postar aqui o código de como estava:

function ValidaDrawback(AValue: String): Boolean;
var
  ano: integer;
begin
  // AValue = AAAANNNNNND
  // Onde: AAAA Ano corrente do registro
  //       NNNNNN Número sequencial dentro do Ano ( 6 dígitos )
  //       D Dígito Verificador, Módulo 11, Pesos de 2 a 9
  AValue := OnlyNumber(AValue);
  ano := StrToInt(Copy(IntToStr(YearOf(Date)), 3, 2));
  if length(AValue) = 11 then
    AValue := copy(AValue, 3, 9);

  if length(AValue) <> 9 then
    Result := False
  else if not ((StrToInt(copy(Avalue, 1, 2)) >= ano - 1) and
    (StrToInt(copy(Avalue, 1, 2)) <= ano + 1)) then
    Result := False
  else
    Result := copy(AValue, 9, 1) = Modulo11(copy(AValue, 1, 8));
end;

E como ficou depois da minha alteração:

function ValidaDrawback(AValue: String): Boolean;
var
  ano: integer;
begin
  // AValue = AAAANNNNNND
  // Onde: AAAA Ano corrente do registro
  //       NNNNNN Número sequencial dentro do Ano ( 6 dígitos )
  //       D Dígito Verificador, Módulo 11, Pesos de 2 a 9
  AValue := OnlyNumber(AValue);
  ano := StrToInt(Copy(IntToStr(YearOf(Date)), 3, 2));
  if length(AValue) = 11 then
    AValue := copy(AValue, 3, 9);

  if length(AValue) <> 9 then
    Result := False
  else if not ((StrToInt(copy(Avalue, 1, 2)) >= ano - 2) and
    (StrToInt(copy(Avalue, 1, 2)) <= ano + 2)) then
    Result := False
  else
    Result := copy(AValue, 9, 1) = Modulo11(copy(AValue, 1, 8));
end;

 

Qualquer dúvida estou a disposição e agradeço caso a sugestão de alteração seja aceita.

 

documento.PNG

ACBrDFeUtil.pas.patch

ACBrDFeUtil.pas

  • 3 semanas depois ...
  • Consultores
  • Solution
Postado

Acho que já subi no svn.

confere.

  • Obrigado 1

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
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 !!

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