Ir para conteúdo
  • Cadastre-se

dev botao

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


  • Este tópico foi criado há 3584 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 para o comentário
Compartilhar em outros sites

  • Moderadores

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
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros 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; ).

  • Curtir 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

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