Ir para conteúdo
  • Cadastre-se

dev botao

Funçao q calcula a chave/digito da nfe onde .pas?


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

Recommended Posts

  • Consultores

Bom dia Carlos,

Você esta postando no lugar errado, aqui tratamos assunto da NFS-e e não NF-e.

Mas respondendo a sua pergunda: ACBrNFeUtil.pas

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Olá boa tarde!

Fiz o teste de gerar Chave da Nfe , mas vi q não esta gerando corretamente pois esta usando a config. da Nfe v.01.

Então como faço para acessar a versao da chave nfe 2.0 ?

O correto seria assim:

vFemissao := '1';

vUF := NotaUtil.Poem_Zeros(AUF, 2);

vDataEmissao := FormatDateTime('YYMM', ADataEmissao);

vModelo := NotaUtil.Poem_Zeros(AModelo, 2);

vSerie := NotaUtil.Poem_Zeros(ASerie, 3);

vNumero := NotaUtil.Poem_Zeros(ANumero, 9);

vCodigo := NotaUtil.Poem_Zeros(ACodigo, 8);

Result := vUF+vDataEmissao+ACNPJ+vModelo+vSerie+vNumero+vFemissao+vCodigo;

Não estou entendo pq quando gero uma nota sai correto.

100+

ANT.CARLOS/SP

-------------- funcao original---------------------------------------------

class function NotaUtil.ChaveAcesso(AUF: Integer; ADataEmissao: TDateTime;

ACNPJ: String; ASerie, ANumero, ACodigo: Integer; AModelo: Integer): String;

var

vUF, vDataEmissao, vSerie, vNumero,

vCodigo, vModelo: String;

begin

vUF := NotaUtil.Poem_Zeros(AUF, 2);

vDataEmissao := FormatDateTime('YYMM', ADataEmissao);

vModelo := NotaUtil.Poem_Zeros(AModelo, 2);

vSerie := NotaUtil.Poem_Zeros(ASerie, 3);

vNumero := NotaUtil.Poem_Zeros(ANumero, 9);

vCodigo := NotaUtil.Poem_Zeros(ACodigo, 9);

Result := vUF+vDataEmissao+ACNPJ+vModelo+vSerie+vNumero+vCodigo;

Result := Result+NotaUtil.Modulo11(Result);

end;

Link para o comentário
Compartilhar em outros sites

O negocio é tão simples gente... Acho que o tempo para fazer essas 2 funcoes foi menor que o de ficar procurando nos fontes (nada contra procurar nos fontes)

Não sei se vai ter muita utilidade para quem usa o Componente, mas pra quem usa o Monitor e quiser gerar a chave antes de enviar a NFe

tai as funcoes que eu uso em C#

        public static String montaChaveAcessoNFe(String UF, Int32 Ano, Int32 Mes, String CNPJ, String Serie, String Numero, String FormaEmissao)

        {

            //Forma Emissao = 1-Normal, 2-Contigencia FS, 3-SCAN, 4-DPEC, 5-FS-DA

            CNPJ = FuncoesUteis.somenteNumeros(CNPJ);

            String sAno = (Ano - (Ano / 100 * 100)).ToString();

            String Chave = UF + sAno + Mes.ToString("D2") + CNPJ + "55" + Serie.PadLeft(3, '0') + Numero.PadLeft(9, '0') + FormaEmissao + Numero.PadLeft(8, '0');

            Chave += calculaDVNFe(Chave);

            return Chave;

        }


        public static String calculaDVNFe(String ChaveAcesso) 

        {

          Int32 Peso = 2, Soma = 0, Contador, Digito;

          for (Contador = (ChaveAcesso.Length-1); Contador >= 0; Contador--)

          {

            Soma = Soma + (Convert.ToInt32(ChaveAcesso[Contador].ToString()) * Peso);

            if (Peso < 9) Peso++;

            else Peso = 2;

          }

          Digito = 11 - (Soma % 11);

          if (Digito > 9) Digito = 0;

          return Digito.ToString();

        }

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Não entendi porque perder tempo fazendo se já tem pronto no ACBr, porque fazer uma nova função sendo que já existe uma testada e funcionando a um bom tempo? Não é questão de procurar nos fontes, é questão de conhecer a ferramenta que se tem nas mãos, simples.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

Ok entao, agora sim faz sentido meu comentario ser inutil.

Nao conhecia esse comando, pois nao esta na relacao que eu conhecia:

http://anfm.blogspot.com.br/2010/02/com ... nitor.html

Tem algum lugar que existe todos os comandos do monitor documentados?

De qquer maneira fica a dica, pra quem quiser saber como gerar a chave, ou

pra quem nao quer enviar o comando pro monitor, testar o retorno, e todo o tratamento,

Eu vou continuar usando a funcao pq é uma coisa tão simples que não vejo necessidade

de carregar o monitor para processar um digito verificador. Seria o mesmo que usar o monitor

para validar um CPF, CEP, IE.

Isso não quer dizer que essas funcoes presentes no componente do acbr nao sejam competentes,

muito pelo contrario, como vc mesmo disse, já foram testadas a um bom tempo. Mas opiniao é opiniao,

ai vai do gosto do fregues.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Não temos um help atualizado, o tempo não deixa fazer um :).

Para quem utiliza o monitor realmente eu penso ser mais simples se for somente isso, fazer a mão, mas para quem utiliza o ACBr em delphi ai é outra história, tem muita coisa pronta no ACBr eu mesmo utilizo bastante.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

  • 4 anos depois...

Bom dia Pessoal!

Provavelmente esse não é o lugar certo para publicar isso mas, acho importante compartilhar ... 

O Código abaixo valida o número da NFe (44 caracteres) usando a linguagem C#. Ele somente verifica se o dígito verificador está batendo com o resto do código.

 public static bool ValidarChaveNFe(String ChaveAcesso)
        {

            string chaveacessosemdigito = "";
            string digitochaveacesso = "";

            if (string.IsNullOrWhiteSpace(ChaveAcesso))
                return false; //verificando se a chave não é nula.

            if (ChaveAcesso.Length != 44)
                return false; //verificando se a chave tem 44 caracteres

            chaveacessosemdigito = Framework.ToolBox.StringFunctions.Left(ChaveAcesso, 43);
            digitochaveacesso = Framework.ToolBox.StringFunctions.Right(ChaveAcesso, 1);

            Int32 Peso = 2, Soma = 0, Contador, Digito;

            for (Contador = (chaveacessosemdigito.Length - 1); Contador >= 0; Contador--)
            {

                Soma = Soma + (Convert.ToInt32(chaveacessosemdigito[Contador].ToString()) * Peso);

                if (Peso < 9)
                    Peso++;
                else
                    Peso = 2;

            }

            Digito = 11 - (Soma % 11);

            if (Digito > 9) Digito = 0;

            if (digitochaveacesso == Digito.ToString())
                return true;

            return false;

        }

Caso o retorno da função seja "True", o numero da chave é válido... caso contrário o número é inválido.

Esperamos que seja útil para alguém!!!

Equipe Weblayer

Link para o comentário
Compartilhar em outros sites

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