Ir para conteúdo
  • Cadastre-se

dev botao

Bloco X Estoque - Lentidão ao GerarXML


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

Recommended Posts

Postado

Olá,

Estou com um problema na geração do Estoque do Bloco X.

Após carregar os produtos (no TACBrBlocoX.Estoque.Produtos) com certa de 10 ou 20 mil produtos, e executar ACBrBlocoX.Estoque.GerarXML(true), o sistema fica "travado", mas na verdade demora de 15 minutos até mais uma hora em alguns casos. Se deixar o processo até o final (o que o usuário não faz) o arquivo é gerado corretamente.

Ano passado teve esse tópico, onde os relatos do pessoal foram exatamente os mesmos do meu. Agora a pouco ainda, atualizei o trunk2 e recompilei e o problema persiste.

Fiz inclusive um projeto de exemplo pra testar com quantidades de 1000, 2000 e assim por diante até 15000 produtos, e a impressão é que o tempo cresce quase que exponencialmente (projeto teste anexo, em Delphi XE8).

 

TESTE BLOCO X.rar

  • Fundadores
Postado

Mesmo que o arquivo seja gerado mais rápido... Provavelmente vocé não conseguirá subir arquivo com essa magnitude no WebService... mesmo compactado, ele ainda assim ficará muito grande para uma transmissão por SOAP...

Questione o SEFAZ... se não me engano é possível gerar esse arquivo apenas com os produtos que tiveram movimentação no período 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Fundadores
Postado

Estamos testando alguns ajustes, na LibXML2, que podem melhorar o desempenho... mas creio que isso só irá adiar o problema para mais adiante (quando você tentar transmitir)

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Certo, vou buscar essa informação junto a SeFaz. 

MAS... no cliente que estou implantando isso, fiz uma simulação, no mês de março, ele movimentou 3800 produtos diferentes (loja de bugigangas de grande movimento e muuuuita variedade de produtos). Só essa quantidade, já demora quase 10 minutos, o que ele continuará reclamando, mesmo sendo somente os produtos movimentados.

E essa demora ocorre mesmo antes de de enviar pra Sefaz, só na hora de gerar o XML.

 

  • Curtir 1
Postado

A demora é exatamente no .GerarXML(). O processo de inserir os produtos na lista é super rápido.

Debugando, o ponto de demora é exatamente esse abaixo, linha 322 da ACBrDFeXsLibXml2.pas (veja imagem anexa)

  xpathObj := xmlXPathEvalExpression(PAnsiChar(xpathExpr), xpathCtx);

Outra simulação que fiz agora, executando aquele projeto que te mandei, é que quando foi tentar fazer a sequencia de 7000 produtos, deu Out of memory....

debug acbr.png

out of memory.png

  • Triste 1
Postado

Rafael, deu erro de compilação

infElement := copy(infElement, Pos(':', infElement) + 1, Length(infElement));

[dcc32 Error] ACBrDFeXsLibXml2.pas(321): E2064 Left side cannot be assigned to

 

  • Fundadores
Postado
17 minutos atrás, Daniel Prochnow disse:

Outra simulação que fiz agora, executando aquele projeto que te mandei, é que quando foi tentar fazer a sequencia de 7000 produtos, deu Out of memory....

Para isso não teríamos solução... a rotina do ACBr trabalha toda em memória... ela não foi projetada para trabalhar com XMLs colossais como esse... Por isso é importante que o Fisco aceite delimitar o envio de dados no arquivo por período, ou ainda somente dos produtos com estoque...

O BlocoX da forma que foi implementado... foi mais uma daquelas ideias "geniais" do fisco...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado
2 horas atrás, Daniel Prochnow disse:

Rafael, deu erro de compilação


infElement := copy(infElement, Pos(':', infElement) + 1, Length(infElement));

[dcc32 Error] ACBrDFeXsLibXml2.pas(321): E2064 Left side cannot be assigned to

 

Atualizei o arquivo tente novamente.

 

Postado (editado)

Funcionou!! A assinatura que era a grande demora agora demorou 17 segundos pra uma simulação de 40.000 produtos. Fechou, tá ótimo.

A hora que vcs postarem no SVN, me avisem por gentiliza

A única observação é que quando tentei com 50.000 produtos, deu Out of memory. A princípio, não tenho clientes com essa quantidade de produtos cadastrados e ainda estamos buscando resposta pra situação de poder enviar apenas dos produtos cadastrados, mas o problema original que eu tinha foi resolvido.

Obrigado!!!

Editado por Daniel Prochnow
  • Curtir 1
Postado

é... parece que não. Mas nem tinha pensado nisso, pois quando o arquivo foi gerado e enviado (pelo menos em homologaçã) veio até o recibo (84cf0674-6336-426b-9594-4aaf57d33ebc). Achei que estava tudo certo.

Anexo está o print da validação com o eecfc e o arquivo gerado

BlocoX.rar

  • Fundadores
Postado

Tente com a Unit em Anexo...

Subi no (tosco) Demo em Lazarus, para o Bloco X, uma verificação de assinaturas e calculo de tempo das tarefas... nos meus testes 40.000 itens foram assinados em 9 segundos

ACBrDFeXsLibXml2.pas

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Fundadores
Postado
procedure TfrmPrincipal.btValAssEstoqueClick(Sender: TObject);
var
  Msg , AXML: String;
  SL: TStringList;
  ok: Boolean;
  tini, tfim: TDateTime;
begin
  OpenDialog1.Title := 'Selecione o XML';
  OpenDialog1.DefaultExt := '*.XML';
  OpenDialog1.Filter := 'Arquivos XML (*.XML)|*.XML|Todos os Arquivos (*.*)|*.*';
  OpenDialog1.InitialDir := ACBrBlocoX1.Configuracoes.Arquivos.PathSalvar;

  if OpenDialog1.Execute then
  begin
    SL := TStringList.Create;
    try
      SL.LoadFromFile(OpenDialog1.FileName);
      AXML := SL.Text;
    finally
      SL.Free;
    end;

    tini := now;
    ok := ACBrBlocoX1.SSL.VerificarAssinatura(AXML, Msg, 'Mensagem');
    tfim := now;

    if ok then
      ShowMessage('Assinatura VÁLIDA. '+FormatFloat('##0.00',SecondSpan(tini,tfim))+' segundos')
    else
      ShowMessage('Erro na Assinatura '+FormatFloat('##0.00',SecondSpan(tini,tfim))+' segundos');
  end;
end;   

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado
Em 16/04/2019 at 17:38, Rafael Dias disse:

Fiz algumas alterações no mecanismo de assinatura do Wincrypt, copie a a unit em anexo na pasta [Fontes\ACBrDFe] e recompile o acbr e teste.

Verifique também se a assinatura dos DFe estão sendo validas.
 

 

 

ACBrDFeXsLibXml2.pasUnavailable

 

Em 20/04/2019 at 13:30, Daniel Simoes disse:

Tente com a Unit em Anexo...

Subi no (tosco) Demo em Lazarus, para o Bloco X, uma verificação de assinaturas e calculo de tempo das tarefas... nos meus testes 40.000 itens foram assinados em 9 segundos

ACBrDFeXsLibXml2.pasUnavailable

 

Boa tarde,

Estou com os fontes atualizados porém também estou tendo o problema de lentidão ao assinar o XML.

Estou tentando gerar com 15000 itens.

Vi que foi disponibilizado alguns arquivos que poderia ter dado certo mas estão indisponíveis para baixar.

Alguém consegue me passar os arquivos que estão assinando ou como está a situação.

Grato desde já.

  • 3 anos depois...
  • Este tópico foi criado há 821 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.