Ir para conteúdo
  • Cadastre-se

dev botao

Sugestão - Velocidade de carregamento de XML's grandes


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

Recommended Posts

Há pouco tempo, um novo cliente adquiriu o nosso sistema, e para eles é bastante comum realizar operações de transporte com centenas de notas fiscais embarcadas - eles transportam para uma loja virtual bastante popular.
Ao realizar estas operações, foi notado um problema de velocidade muito grande, e descobrimos que o responsável por isso era o ACBr, mais especificamente em uma determinada linha da função LerXml do pcteCTeR.pas.

Conseguimos resolver este problema, e gostaríamos de compartilhar a solução com vocês.

O "culpado" por este problema de velocidade é a repetição da função Leitor.rExtrai, que é executada a cada documento vinculado. Para documentos pequenos, não há diferença significativa de desempenho, mas à medida que a quantidade de documentos aumenta, mais pesada fica a busca.
A solução foi eliminarmos esta repetição - que tinha como objetivo apenas identificar se ainda haviam documentos vinculados - e criar uma função que apenas retorna a quantidade de repetições necessária.
Isso fez com que a velocidade de carregamento caísse de vários minutos para apenas poucos segundos.

Além da alteração na unit pcteCTeR.pas, foi necessário alterar a unit pcnLeitor.pas, criando uma propriedade para permitir definir o Nivel após a atribuição do Grupo. As duas units modificadas estão em anexo, e correspondem a revisão 11941 do Trunk2.

Em anexo também um exemplo de CT-e emitido pelo nosso cliente, com 1994 NF-e's vinculadas (a operação original era composta de 5980 NF-e's, que precisou ser dividido em três devido a limitação da SEFAZ de 2000 documentos). O conteúdo foi modificado para preservar as informações da transportadora e do seu cliente, mas o arquivo carrega normalmente no ACBr.

Não utilizamos a regra de indentação do ACBr, mas sintam-se à vontade em padronizar de acordo com seus critérios.
Após substituir os dois arquivos, é necessário recompilar os pacotes ACBr_PCNComum e ACBr_CTe.

CTeGigante.xml

pcnLeitor.pas

pcteCTeR.pas

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde, 

Me responda uma coisa.

Todas essas notas emitidas por essa Loja Virtual, cujas mercadorias refentes a todas essas notas tem como destino somente um Destinatário?

Se não for o mesmo, é necessário emitir um CT-e para cada destinatário.

Mesmo que tenhamos 400 destinatários na mesma cidade.

A não ser que essa transportadora seja detentora do regime especial que é concedido pela UF de sua jurisdição que permite a emissão do CT-e Globalizado.

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 tarde, Ítalo!

Sim, esta era uma operação de transferência de um CD para outro, depois que foi realizada a distribuição entre os destinatários finais, com emissões individuais de CT-e's.

Mas mesmo se fosse para diversos destinatários, existe a Portaria CAT 121 de 29/11/2013 que regulamenta este tipo de operação, quando há apenas um tomador do frete, aí no lugar do nome do destinatário seria enviado "Diversos", com o CNPJ da Transportadora.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Jek,

Exatamente o que eu tinha dito quando eu me referi ao CT-e Globalizado.

Existe um Boletim Técnico de 2012/001 que Padroniza o CT-e Globalizado.

  • Curtir 1
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

Ítalo, obrigado pela informação, não conhecia este Boletim Técnico 2012/001. Até procurei por um site oficial com estes boletins, para ver se há outros, mas não encontrei nada... sabe se existe?

Interessante também que a Portaria CAT 121/2013 não faz menção ao termo "CT-e Globalizado", e comparando com o Boletim, parece ser um pouco menos burocrático, sem a necessidade do regime especial concedido pela UF;

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Achei que a sugestão deixa a legibilidade do código confusa... tb me incomodei, com o Fato do pcnLeitor ter uma propriedade StringList que não será criada/destruída por ele...

Estamos analisando a oportunidade de aposentar as classes de geração de XML do PCN, usando o projeto OpenSource "OmniXML"

 

  • Curtir 2
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.

Link para o comentário
Compartilhar em outros sites

Com certeza a leitura e o armazenamento seriam mais rápidos se fosse usado métodos próprios para manipulação de XML, até com o TXMLDocument nativo seria melhor. Mas será um projeto bem grande realizar esta mudança.

Quanto a propriedade Nivel, na verdade nós só tornamos published a variável private FNivel, porque é necessário sincronizar este StringList para a leitura correta das tags filhas infUnidTransp e infUnidCarga. Pensamos até em modularizar a leitura destas duas tags, para não ficar esta repetição tripla de código (InfNF, InfNFE e InfOutros) que existe atualmente.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Fundadores

O problema de usar o TXMLDocument é a compatibilidade com as diferentes versões do Delphi e o Lazarus... por isso estamos cogitando usar o OmniXML...

Realmente será um trabalho "insano"... Seria o inicio de um "trunk3" ? (espero que nem tanto)

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.

Link para o comentário
Compartilhar em outros sites

Sobre o CT-e globalizado, ele é permitido somente quando você tiver as seguintes condições:

- 1 remetente e 5 ou mais entregas diferentes

- 5 ou mais remetentes e 1 destinatário

Consolidar menos de 5 entregas ou 5 coletas em 1 ct-e globalizado é ilegal e muita gente está fazendo isso.

http://info.fazenda.sp.gov.br/NXT/gateway.dll/legislacao_tributaria/portaria_cat/pcat1212013.htm?f=templates&fn=default.htm&vid=sefaz_tributaria:vtribut

Disciplina a emissão de um único Conhecimento de Transporte Eletrônico de Cargas - CT-e, por veículo e por viagem, nos serviços de transportes prestados para um único tomador, envolvendo vários remetentes ou destinatários.

O Coordenador da Administração Tributária, tendo em vista o disposto no artigo 69 do Convênio SINIEF 06, de 21-02-1989, e no artigo 489 do Regulamento do ICMS - RICMS, aprovado pelo Decreto 45.490, de 30-11-2000, expede a seguinte portaria:

 

Artigo 1º - Nas prestações de serviços de transporte intermunicipal de mercadorias, mediante contrato, envolvendo diversos remetentes ou destinatários e um único tomador, o transportador poderá emitir um Conhecimento de Transporte Eletrônico de Cargas - CT-e, englobando as prestações realizadas para este tomador, por veículo e por viagem, desde que:

 

I - o tomador seja o remetente ou o destinatário das mercadorias transportadas;

 

II - o transporte compreenda no mínimo 05 (cinco) remetentes ou 05 (cinco) destinatários;

 

III - as mercadorias transportadas estejam acobertadas com Notas Fiscais Eletrônicas- Nf-e.

 

Artigo 2º - Na emissão do CT-e de que trata esta Portaria, além dos demais requisitos, o transportador deverá observar o que segue:

 

I - o campo “Tipo do CT-e” será preenchido com “0” (CT-e Normal);

 

II - tratando-se de prestação de serviço de transporte de um remetente (tomador) para vários destinatários:

 

a) no grupo “Informações do Remetente das mercadorias transportadas pelo CT-e” todos os campos serão preenchidos com os dados do remetente das mercadorias;

 

B) no grupo “Informações do Destinatário do CT-e” o campo “Razão Social ou Nome do destinatário” será preenchido com a expressão “DIVERSOS” e os demais campos, inclusive o CNPJ, serão preenchidos com os dados do emitente do CT-e;

 

III - tratando-se de prestação de serviço de transporte de vários remetentes para um destinatário (tomador):

 

a) no grupo “Informações do Destinatário do CT-e” os campos serão todos preenchidos com os dados do destinatário das mercadorias;

 

B) no grupo “Informações do Remetente das mercadorias transportadas pelo CT-e” o campo “Razão Social ou Nome do Emitente” será preenchido com a expressão “DIVERSOS” e os demais campos, inclusive o CNPJ, serão preenchidos com os dados do emitente do CT-e;

 

IV - no campo “Observações Gerais” deverá constar a informação “Procedimento efetuado nos termos da Portaria CAT xx/2013” (indicar o número desta portaria);

 

V - no grupo "Informações das NF-e", o campo "Chave de Acesso da NF-e", de múltipla ocorrência, deverá ser preenchido para indicar as chaves de acesso de todas as NF-e relativas aos produtos transportados.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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