Ir para conteúdo
  • Cadastre-se

dev botao

BlocoX Estoque - Lentidão ao GerarXML


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

Recommended Posts

Estou gerando o BlocoX de Estoque e ReduçãoZ, seguindo os exemplos do ACBr versão Lazarus sem problemas em minha máquina de desenvolvimento, porém ao testar nas máquinas de PDV do Cliente a geração do XML de Estoque está demorando cerca de 30 minutos, me parece que o problema está na função GerarXML, justamente quando são criados os nós baseados em como os objetos de produto são informados, pelo que verifiquei na base de dados do cliente existem cerca de 10mil produtos, mas ainda não me parece ser justificável essa demora apenas pelo volume de dados, pode ser até performance nas máquinas do cliente.

Buscando solucionar isso, pensei na alternativa de gerar o XML por outras rotinas, como vi neste Tópico, porém não encontrei como informaria o XML externo para o ACBrBlocoX assinar e enviar, existe algum exemplo deste cenário? A propriedade ACBrBlocoX.Estoque.XMLOriginal é protected.

 

Tentei da seguinte forma sem sucesso:

DM_BlocoX.QXMLEstoque.Close;
DM_BlocoX.QXMLEstoque.ParamByName('inscricao_estadual').Value    := DM_PDV.QParametrosINSCRICAO_ESTADUAL.Value;
DM_BlocoX.QXMLEstoque.ParamByName('numero_credenciamento').Value := '123456789';
DM_BlocoX.QXMLEstoque.Open;

ACBrBlocoX.WebServices.EnviarBlocoX.XML := DM_BlocoX.QXMLEstoqueXML_ESTOQUE.Value;      

Gerando o XML diretamente pelo SQL, porém neste caso o XML não seria assinado, certo?

Editado por Igor Grava
Link para o comentário
Compartilhar em outros sites

  • Consultores
1 hora atrás, Igor Grava disse:

geração do XML de Estoque está demorando cerca de 30 minutos, me parece que o problema está na função GerarXML

Você consegue me passar um passo a passo pra reproduzir no Demo do ACBrBlocoX?

Por exemplo, quais comandos você chama e quantos produtos são necessários para observar a lentidão?

 

1 hora atrás, Igor Grava disse:

Gerando o XML diretamente pelo SQL, porém neste caso o XML não seria assinado, certo? 

Acho que não, mas talvez você possa assinar usando o próprio componente. O TACBrBlocoX_Estoque.GerarXML usa algo assim:

    FXMLAssinado := ACBrBlocoX1.SSL.Assinar(FXMLOriginal, 'Estoque', 'Mensagem');

 

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

1 hora atrás, EMBarbosa disse:

Você consegue me passar um passo a passo pra reproduzir no Demo do ACBrBlocoX?

Por exemplo, quais comandos você chama e quantos produtos são necessários para observar a lentidão?

 

Acho que não, mas talvez você possa assinar usando o próprio componente. O TACBrBlocoX_Estoque.GerarXML usa algo assim:


    FXMLAssinado := ACBrBlocoX1.SSL.Assinar(FXMLOriginal, 'Estoque', 'Mensagem');

 

Elton, boa tarde

Tentei desta forma que enviou, explorando dentro da função GerarXML vi essa chamada e fiz desta forma:

 

DM_BlocoX.QXMLEstoque.Close;
DM_BlocoX.QXMLEstoque.ParamByName('inscricao_estadual').Value    := DM_PDV.ParametrosINSCRICAO_ESTADUAL.Value;
DM_BlocoX.QXMLEstoque.Open;

oBlocoX.WebServices.EnviarBlocoX.XML := oBlocoX.SSL.Assinar(DM_BlocoX.QXMLEstoqueXML_CONTEUDO.Value, 'Estoque', 'Mensagem');

Após alguns problemas com a formatação dos valores numéricos, alguns com 3 casas decimais e todos utilizando vírgula como separadores decimais, consegui o envio sem problemas de minha máquina, porém em teste no cliente justamente a linha do Assinar que está demorando cerca de 10 minutos agora e ainda não finalizou, ainda aguardando para ver se fica na casa dos 30 minutos como pelo GerarXML ou se terá alguma diferença mesmo.

Como essa função do Assinar é chamada dentro da GerarXML estou achando que é justamente ela que causa a lentidão, embora cheguei a testar a GerarXML enviando o parâmetro Assinar = False e demorou da mesma forma.

Link para o comentário
Compartilhar em outros sites

  • Consultores

 

14 horas atrás, Igor Grava disse:

consegui o envio sem problemas de minha máquina, porém em teste no cliente justamente a linha do Assinar que está demorando cerca de 10 minutos agora e ainda não finalizou, ainda aguardando para ver se fica na casa dos 30 minutos como pelo GerarXML ou se terá alguma diferença mesmo.

Como essa função do Assinar é chamada dentro da GerarXML estou achando que é justamente ela que causa a lentidão, embora cheguei a testar a GerarXML enviando o parâmetro Assinar = False e demorou da mesma forma. 

Nesse caso, vou voltar a pedir as informações que você ainda não me passou, veja:

16 horas atrás, EMBarbosa disse:

Você consegue me passar um passo a passo pra reproduzir no Demo do ACBrBlocoX?

Por exemplo, quais comandos você chama e quantos produtos são necessários para observar a lentidão?

 

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

11 minutos atrás, EMBarbosa disse:

 

Nesse caso, vou voltar a pedir as informações que você ainda não me passou, veja:

 

No cliente o estoque tem cerca de 10mil produtos,

Segue o código:
 

     if DecimalSeparator = '.' then
     begin
         DecimalSeparator := ',';
         ThousandSeparator:= '.';
     end;

     with AACBrBlocoX do
     begin
          with Estoque do
          begin
               DataReferencia := DATE;
               //Abrindo Query EstoqueAtual
               DM_BlocoX.QEstoqueAtual.Close;
               DM_BlocoX.QEstoqueAtual.Open;
               DM_BlocoX.QEstoqueAtual.First;
               //Abriu Query EstoqueAtual
               Produtos.Clear;
              
               while not DM_BlocoX.QEstoqueAtual.EoF do
               begin
                    with Produtos.Add do
                    begin
                         Codigo.Tipo             := tpcEAN;
                         Codigo.CodigoProprio    := DM_BlocoX.QEstoqueAtualPRODUTO.AsString;
                         Codigo.CodigoCEST       := DM_BlocoX.QEstoqueAtualCODIGO_CEST.Value;
                         Codigo.CodigoGTIN       := DM_BlocoX.QEstoqueAtualEAN.Value;
                         Codigo.CodigoNCMSH      := DM_BlocoX.QEstoqueAtualNCM.Value;
                         Descricao               := DM_BlocoX.QEstoqueAtualDESCRICAO.Value;
                         ValorUnitario           := DM_BlocoX.QEstoqueAtualPRECO.Value;

                         if DM_BlocoX.QEstoqueAtualIPPT.Value = 'T' then
                            Ippt                 := ipptTerceiros
                         else
                            Ippt                 := ipptProprio;

                         SituacaoTributaria      := stTributado;
                         Aliquota                := DM_BlocoX.QEstoqueAtualALIQUOTA_ICMS.Value;
                         Unidade                 := DM_BlocoX.QEstoqueAtualUNIDADE_MEDIDA.Value;
                         Quantidade              := DM_BlocoX.QEstoqueAtualSALDO.Value;
                         IndicadorArredondamento := False;
                    end;
                    DM_BlocoX.QEstoqueAtual.Next;
               end;
               //Fim da Query - Salvar XML
               GerarXML(True);
          end;
     end;

     if DecimalSeparator = '.' then
     begin
         DecimalSeparator := ',';
         ThousandSeparator:= '.';
     end;

 

Link para o comentário
Compartilhar em outros sites

29 minutos atrás, Celso disse:

Estamos analisando o problema, em breve teremos uma posição para o caso.

Certo, estou buscando alternativas pois pelo que verificamos o problema está justamente dentro da procedure Assinar da Procedure ACBrDFeXsLibXml2, me parece ser justamente nestas linhas:

if URI = '' then
      Canon := AnsiString(CanonC14n(aDoc, docElement))
    else
      Canon := AnsiString(CanonC14n(aDoc, infElement));

 

Link para o comentário
Compartilhar em outros sites

@Igor Grava

Foi feita uma alteração no método de formatação do XML, derrubando o tempo de formatação do XML, o tempo de geração aqui nos testes caiu de 36 minutos para ~2 minutos. Estou anexando o .pas para que você possa fazer os testes, se possível faça testes de geração de outros DFe´s, como NFe por exemplo, e poste o resultado. Assim que concluirmos a etapa de testes, devemos disponibilizar no SVN a correção.

 

ACBrDFeXsLibXml2.pas

  • Curtir 7
Consultor SAC ACBr

Celso Marigo Junior

Conheça o Portal do Projeto ACBr
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Administradores

Tópico fechado por falta de retorno do usuário

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Consultores
Em 07/12/2018 at 16:07, Celso disse:

@Igor Grava

Foi feita uma alteração no método de formatação do XML, derrubando o tempo de formatação do XML, o tempo de geração aqui nos testes caiu de 36 minutos para ~2 minutos. Estou anexando o .pas para que você possa fazer os testes, se possível faça testes de geração de outros DFe´s, como NFe por exemplo, e poste o resultado. Assim que concluirmos a etapa de testes, devemos disponibilizar no SVN a correção.

 

ACBrDFeXsLibXml2.pas

Apenas como informação: Essa modificação foi enviada ao SVN na revisão 16125.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

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