Ir para conteúdo
  • Cadastre-se

dev botao

NFe sem protocolo de autorização


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

Recommended Posts

  • Consultores

Boa tarde Marcelo,

Devemos utilizar o LoadFromFile ou LoadFromStream ou LoadFromString quando o componente não contem os dados da nota.

E pelo que eu vi o componente já esta com os dados da nota, loto não faz sentido carrega-lo novamente.

Caso você tenha o XML assinado salvo em disco faça o seguinte:

acbrnfe1.notasfiscais.loadfromfile(nomearq, false); // o segundo parâmetro é false para que o componente não gere novamente o XML.

acbrnfe1.consultar;

caso o XML assinado esteja salvo no banco de dados faça desta outra forma:

acbrnfe1.notasfiscais.loadfromstring(varString, false); // varString é a variável que contem o XML assinado lido do banco de dados.

acbrnfe1.consultar;

 
Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Italo, eu tenho o xml salvo em disco. Passei com você mencionou (acbrnfe1.notasfiscais.loadfromfile(nomearq, false);)

depois acbrnfe1.consultar;

E continua sem vincular.

Alterei algumas configurações do componente como a propriedade salvarapenasnfeprocessadas=true; validarDigest=true;

e mesmo assim nada. Será que é alguma configuração?

Link para o comentário
Compartilhar em outros sites

Ítalo, consegui vincular o retorno da sefaz com o xml, porem achei que ficou um pouco de gambiarra:

Fiz assim no retorno:

acbrnfe1.notasfiscais.loadfromstring(acbrnfe1.notasfiscais[0].xmlassinado,false);

depois acbrnfe1.notasfiscais.items[0].gravarXml();

Obs: não sei como será o comportamento quando a nota não for aceita.

Será que é arriscado fazer desse jeito?

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Marcelo,

Já tentou desta forma:

ACBrNFe1.Configuracoes.Arquivo.Salvar := True;

ACBrNFe1.NotasFiscais.LoadFromFile(nomearq, false);

ACBrNFe1.Consultar;

Pois o XML atualizado só será salvo em disco caso a propriedade Salvar valer True.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Marcelo,

Exite também uma outra propriedade chamada: SalvarApenasNFeProcessadas atribua o valor True a ela também.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Atualizei para trunk2 e também estou com o mesmo problema... o caso é que os dados do protocolo (tag protNFe) não está sendo gravado no XML da nota.
Para grava o XML, faço: "ACBrNFe1.NotasFiscais.GravarXML(wPath)".

Testei até uma outra rotina que gera XML para distribuição, onde carregando o XML de envio + o XML de retorno...e o XML gravado está sem o protocolo (no trunk1 funciona corretamente)

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde,

Você esta atribuindo o valor True a propriedade de configuração: Configuracoes.Arquivos.Salvar?

Outra coisa o GravarXML não grava o XML protocolado.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

De forma simplificada eu faço o seguinte:

1. Alimento o componente com os dados da nota;

2. executo o método Assinar; (este se encarrega de gerar o XML, assinar e salvar o mesmo em disco)

3. executo o método Validar; (este submete o XML assinado ao validado, caso tenha erros será abortado)

4. executo o método Enviar; (este se encarrega de enviar a nota para SEFAZ e atualizar o XML com o protocolo de autorização caso tenha sido autorizada)

Não executo GerarNFe, GravarXML ou outra coisa aparecida apenas os 3 métodos acima.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Boa noite Italo,

Herdei a manutenção de um sistema ERP que só tinha o XML2. Com o XML3, em questão de +- 1 mês, desenvolvi um gerenciador de NFe usando o ACBr, fora do sistema (o que tá ótimo pra quem, apesar de ser de desenvolvimento, nunca usou XML, Webservices, etc... graças ao exemplo de uso do ACBrNFe)

Analisando a minha aplicação e efetuando alguns testes:
Versão antiga (trunk1): para carregar o componente, uso "ACBrNFe1.NotasFiscais.LoadFromFile(XmlNFe)"... Quando não encontro o XML da nota, carrego o Xml de envio + Xml Retorno que estão gravados na Tabela do Gerenciador (uso "ACBrNFe1.NotasFiscais.LoadFromString(XmlEnvio+XmlRetorno).asString)"). Em ambos os casos, a execução do GravarXML grava inclusive o protocolo. Desta forma, mesmo notas de 2014 (XML2) a DANFE e/ou XML para o cliente estão ok.
Na versão trunk2: se executo LoadFromFile(XML com protocolo), o GravarXML grava com protocolo. Se executo LoadFromFile(XmlEnvio+XmlRetorno), fica sem protocolo.

Concluo que o caso está no LoadFromFile(XmlEnvio+XmlRetorno) com comportamento diferente: no trunk1=com protocolo...já no trunk2=sem protocolo.

Aguardo retorno (ou na atual situação: tenho o XML de envio e outro XML com o retorno (com autorização e protocolo), como gerar o XML de distribuição?

 

Observações:
. Não me recordo agora o porque sempre uso o GravaXML (ou a versão da época não gerava ou se foi para resolver a situação quando dá problema local ou SEFAZ (não consegui nem o recibo e no SEFAZ está autorizado...)
. Acredito que o MarceloJSilva está na mesma situação minha ....

 

Link para o comentário
Compartilhar em outros sites

Italo/Juliomar,

Realmente me esqueci da refatoração...e vou brincar com o exemplo do svn....não sei se foi um puxão de orelha, mas obrigado de qualquer forma.

Mais um detalhe: onde trabalho, é uma empresa pequena, porém com 13 filiais (PR, MT, GO, RS, MS...) e o faturamento é centralizado na Matriz (PR). Tenho tido a seguinte situação: envio a NFe e ocorre algum problema (SEFAZ lento, normalmente) e nem recibo consigo... daí, no meu registro fica como não enviada (ou com erro). Um novo envio gera erro (duplicidade), pois neste caso, o SEFAZ processou posteriormente). Só me resta efetuar a consulta pela chave. Então eu tenho o XML de envio e outro XML com a autorização.

Acabei de efetuar mais alguns testes e consegui resolver usando: 
1) ACBrNFe1.NotasFiscais.Add.LerXML(XmlEnvio + XMLRetorno)
2) ACBrNFe1.NotasFiscais.GerarNFe;
Desta forma, tanto a DANFE e o GravarXML funcionam perfeitamente!!!

Vou proceder às alterações conforme exemplo, depois vou ao ACBrBoleto e ACBrNFSe...... 

Grato pela atenção ...

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia,

Nas minhas postagens a dica que dou é o seguinte:

Se ocorrer falha após o envio, não devemos enviar a nota novamente, uma vez que não sabemos se a falha ocorreu de fato no envio ou no retorno da SEFAZ.

Sendo assim o que devemos fazer é carregar o componente com o XML assinado usando o LoadFromFile e em seguida executar o método Consultar.

 

Exemplo:

ACBrNFe1.NotasFiscais.Clear;

ACBrNFe1.NotasFiscais.LoadFromFile(XmlNFe);      // o XML da NF-e a ser carregado esta assinado

ACBrNFe1.Consultar;

 

Se obtivermos uma resposta da SEFAZ informando que a nota não existe no banco de dados dela, isso significa que a falha ocorreu no envio, portanto devemos envia-la novamente.

Por outro lado se a nota foi enviada e processada com sucesso vamos ter como resposta o protocolo de autorização, neste caso o método Consultar se encarrega de atualizar o XML deixando-o completo, ou seja, assinado e protocolo, pronto para ser enviado ao destinatário.

Como você pode ver em nenhum momento foi necessário usar o GerarNFe e GravarXML.

  • Curtir 3
Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...
  • Consultores

Boa noite,

Você segui o meu exemplo acima?

Antes de executar o exemplo o componente foi configurado para salvar o XML?

Configuracoes.Arquivos.Salvar := True;

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Olá a todos, estou com uma questão aqui e não consegui ainda achar o rumo correto,

nos posts anteriores o Italo descreve: 

"1. Alimento o componente com os dados da nota;

2. executo o método Assinar; (este se encarrega de gerar o XML, assinar e salvar o mesmo em disco)

3. executo o método Validar; (este submete o XML assinado ao validado, caso tenha erros será abortado)

4. executo o método Enviar; (este se encarrega de enviar a nota para SEFAZ e atualizar o XML com o protocolo de autorização caso tenha sido autorizada)"

Na minha aplicação faço quase isso, não faço o passo 3, não entendi bem o porque precisaria

já que acabei de passar as informações e assinar, tem dado certo, o que realmente preciso no momento 

um outro processo, que tem a ver com validação. 

Tenho por exemplo um xml que foi assinado e tal usando o token, por algum motivo entre o processo

de assinar e enviar o token foi retirado do pc, o que me leva a crer que não precisaria mais do token, certo?

Porém ainda assim esta fazendo validações sobre o token, no acbr hoje tem como eu fazer por exemplo: 

ACBrNFProduto.NotasFiscais.Items[0].LerXML(vaXMLAssinado);

ACBrNFProduto.Enviar(123, False);

Bem isso que estou fazendo o que me pede o token, queria por exemplo carregar o valor que esta

na variável vaXMLAssinado (foi assinado utilizando o próprio acbr com o token e tal) e só enviar?

 

Atenciosamente.

Eliomar.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Eliomar,

Quem garante que após gerar e assinar o XML ele não precisa ser validado?

Gerar um XML com um campo do tipo caracter que necessita de no minimo 15 caracteres e você só informou 13, o componente gera e assina, mas você concorda que ele esta errado?

O Validar é muito importante para que falhas como o exemplo acima sejam detectados antes do envio.

A presença do certificado digital é importante em dois momentos:

1. Assinatura do XML;

2. Conexão com os Web Services.

Sendo assim o Assinar e o Enviar (por exemplo) necessitam do certificado digital.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

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