Ir para conteúdo
  • Cadastre-se

dev botao

Parse Chave Nfe


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

Recommended Posts

Postado

Olá amigos.

 

Vocês conhecem alguma função que faça o parse (decomposição) da chave de acesso da NFe?

Sim, seria simples de implementar, mas me pergunto se tem algo pronto ;-)

 

obrigado

André

  • Solution
Postado

Prezados.

 

Como não houve resposta, vou postar aqui um código que faz isso e pode ser útil para outros.

Eu tenho isso dividido em algumas classes, então pra copiar precisa adaptar, claro.

Caso queiram, podem incorporar ao Acbr.

type
  TCampoChaveNfe = (ccnUf, ccnAno, ccnMes, ccnCnpj, ccnModelo, ccnSerie,
      ccnNumero, ccnFormaEmissao, ccnCodigoNumerico, ccnDigitoVerificador);


class function TStrUtils.FiltrarNumero(Value: string): string;
var
  i: integer;
begin
  Result := '';
  for i := 1 to Length(Value) do
    if Value[i] in ['0'..'9'] then
      Result := Result + Value[i];
end;

class function TNfe.GetConteudoCampoChaveNfe(Campo: TCampoChaveNfe;
  Chave: string): string;
var
  sChave: string;
begin
  sChave := TStrUtils.FiltrarNumero(Chave);
  if Length(sChave) <> 44 then
    raise Exception.Create('Chave de acesso inválida, não possui 44 números.');
  case Campo of
    ccnUf: Result := Copy(sChave, 1 , 2);
    ccnAno: Result := Copy(sChave, 3, 2);
    ccnMes: Result := Copy(sChave, 5, 2);
    ccnCnpj: Result := Copy(sChave, 7, 14);
    ccnModelo: Result := Copy(sChave, 21, 2);
    ccnSerie: Result := Copy(sChave, 23, 3);
    ccnNumero: Result := Copy(sChave, 26, 9);
    ccnFormaEmissao: Result := Copy(sChave, 35, 1);
    ccnCodigoNumerico: Result := Copy(sChave, 36, 8);
    else
      Result := Copy(sChave, 44, 1);
  end;
end;

abs

André

Postado (editado)

Claro que existem N formas de fazer isso, fazer um parse completo, retornar num Record, usar Ord(TipoDoCampo) pra ler um array e assim por diante.

Também tem a questão do versionamento...

Eu postei assim porque é assim que eu preciso dele no momento  :wink:

Editado por dremul
  • Este tópico foi criado há 3703 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.