Jump to content

Lentidão Na Validação De Nota Com 400 Itens


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

Recommended Posts

Olá pessoal!

 

Primeiramente gostaria de agradecer a equipe ACBR pelo excelente componente que vocês desenvolvem.

 

Sou usuário do ACBR a 5 anos e possuo centenas de clientes rodando o sistema sem problemas, porém recentemente um cliente gerou uma NF-e muito grande com 380 itens e para minha surpresa o programa demorou muito, mais muito mesmo para gerar e transmitir a nfe. 

 

Inicialmente pensei que a lentidão era no meu código que calcula os impostos dos itens, debugando o código cheguei na seguinte linha que causa a demora:

 

ACBrNFe1.NotasFiscais.Valida; ( Cerca de 5 minutos )
 
ACBrNFe1.NotasFiscais.GerarNFe; ( Cerca de 5 minutos )
 
Debugando a função VALIDA encontrei o ponto do codigo do acbr onde ocorre a demora no processamento:
 
Arquivo : PcnNfeW.pas
 
Vou tentar colocar a pilha (call stack) para facilitar o entendimento:
 
ACBrNFeNotasFiscais.TNotasFiscais.Valida
ACBrNFeNotasFiscais.NotaFiscal.GetNFeXML
pcnNFeW.TNFeW.GerarXml
pcnNFeW.TNFeW.GerarInfNFe
pcnNFeW.TNFeW.GerarDet
 
 
A Função GerarDet leva cerca de 30 segundos para ser processada, até ai tudo bem um tempo aceitável para o tamanho da nota fiscal e a quantidade de itens, mas debugando percebi que a função  GerarInfNFe é chamada dezenas de vezes inclusive em algumas partes do código onde ela é chamada consta um (**) na frente do comando.
  (**)GerarInfNFe;

Creio que esta função GerarInfNFe > GeraDet deveria ser processada somente uma vez e setar um flag para indicar que os itens já foram processados.

 

 

 

Pensei até em alterar o componente mas achei melhor informar para alguém mais experiente para que faça a alteração caso seja necessário ou me informar oque estou fazendo de errado.

 

 
Aguardo ajuda dos colegas.
Link to comment
Share on other sites

  • Consultores

Bom dia

Após alterar como ficou o processamento? e a NF-e gerou corretamente ou teve algum problema?

o bom é efetuar diversos testes pra verificar senão ocasiona algum outro problema ! 

e caso obtenha sucesso favor anexar aqui a unit alterada para que possamos avaliar e subir ao svn!

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other sites

Olá Juniomar!

 

Como eu disse não fiz a alteração, apesar de ter pesquisado bastante no fórum não encontrei nenhum post relacionado então resolvi postar aqui primeiro para ver se alguém passou por isso e já tem uma solução, creio que não sou o primeiro a emitir uma nota com muitos itens.

Link to comment
Share on other sites

  • Moderadores

Só encontrei uma chamada para a função GerarInfNFe na unit pcnNFeW.pas na linha 269. Talvez passe mais de uma vez, pois qdo vc chama ACBrNFe1.NotasFiscais.Valida; ele já gera a nota(não tem como validar a nota sem antes gerar) e depois vc está chamando novamente a função para gerar as notas(ACBrNFe1.NotasFiscais.GerarNFe; ).

  • Like 1
djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link to comment
Share on other sites

Boa tarde  André,

 

obrigado pela ajuda,

 

Bom depois de seu comentário revisei o  código melhor o caso e removi a chamada a função VALIDA, e deixei apenas duas chamadas no meu código:

 

 
Meu codigo:
 
ACBrNFe1.NotasFiscais.GerarNFe;
ACBrNFe1.Enviar(StrToInt(vNumLote));

 

 

Mesmo assim estas funções chamam 6 Vezes a função que recalcula os itens da nota, como você disse a função GeraNfe chama apenas uma vez, porém a função Enviar chama 5 vezes.

ACBrNFe1.NotasFiscais.GerarNFe; 


 1) 
pcnNFeW.TNFeW.GerarInfNFe
pcnNFeW.TNFeW.GerarXml
ACBrNFeNotasFiscais.TNotasFiscais.GerarNFe


ACBrNFe1.Enviar(StrToInt(vNumLote));


 2)
pcnNFeW.TNFeW.GerarInfNFe
pcnNFeW.TNFeW.GerarXml
ACBrNFeNotasFiscais.TNotasFiscais.Assinar
ACBrNFe.TACBrNFe.Enviar('218',True,False)
ACBrNFe.TACBrNFe.Enviar(218,True,False)




 3)


pcnNFeW.TNFeW.GerarInfNFe
pcnNFeW.TNFeW.GerarXml
ACBrNFeNotasFiscais.NotaFiscal.GetNFeXML
ACBrNFeNotasFiscais.TNotasFiscais.Valida
ACBrNFe.TACBrNFe.Enviar('218',True,False)
ACBrNFe.TACBrNFe.Enviar(218,True,False)


 4)


pcnNFeW.TNFeW.GerarInfNFe
pcnNFeW.TNFeW.GerarXml
ACBrNFeNotasFiscais.NotaFiscal.GetNFeXML
ACBrNFeNotasFiscais.TNotasFiscais.Valida
ACBrNFe.TACBrNFe.Enviar('218',True,False)
ACBrNFe.TACBrNFe.Enviar(218,True,False)


 5)
pcnNFeW.TNFeW.GerarInfNFe
pcnNFeW.TNFeW.GerarXml
ACBrNFeNotasFiscais.NotaFiscal.GetNFeXML
ACBrNFeWebServices.TWebServicesBase.DoNFeRecepcao
ACBrNFeWebServices.TWebServicesBase.LoadMsgEntrada
ACBrNFeWebServices.TWebServicesBase.Executar
ACBrNFeWebServices.TNFeRecepcao.Executar
ACBrNFeWebServices.TWebServices.Envia('218',False)
ACBrNFe.TACBrNFe.Enviar('218',True,False)
ACBrNFe.TACBrNFe.Enviar(218,True,False)


 6) 
pcnNFeW.TNFeW.GerarInfNFe
pcnNFeW.TNFeW.GerarXml
ACBrNFeNotasFiscais.NotaFiscal.SaveToFile('C:\RegraEmpresarial\NotasFiscais2\\NFE\201405\NFe\52140508674453000105550010000002181000002181-nfe.xml',False)
ACBrNFeWebServices.TNFeRetRecepcao.Confirma($841F9D0)
ACBrNFeWebServices.TNFeRetRecepcao.Executar
ACBrNFeWebServices.TWebServices.Envia('218',???)
ACBrNFe.TACBrNFe.Enviar('218',True,False)
ACBrNFe.TACBrNFe.Enviar(218,True,False)
Link to comment
Share on other sites

  • Moderadores

Desculpe, mas não consigo entender seu log. 

 

O que posso te afirmar é que o método ACBrNFe.Enviar chama o método de assinar que por sua vez acaba gerando novamente o XML. As demais chamadas vc deve debugar o componente e ver pq está ocorrendo e qual seria a possível solução(algum flag q indique q a NFe já foi gerada).

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link to comment
Share on other sites

  • 3 years later...

Não sei se o assunto é pertinente com o q foi tratado na época, mas hj recebi um caso de gerar uma NFCe com 450 itens e demorar demais na parte de VALIDAR, removi a parte de validar e deixei somente. (utilizo o ACBrMonitorPlus, versão final 1.1.0.59)

NFe.CriarNFe("INI")

depois NFe.EnviarNFe("XML")

Mesmo assim demora.

Já limitei o LOG conforme outros tópicos sugeriram, mas permanece.

Desculpe se a postagem esta em local errado, mas me pareceu semelhante o caso e não vi solução aparente nas informações acima, dando a impressão q estaria em aberto ainda a questão apesar do tempo.

Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.