Ir para conteúdo
  • Cadastre-se

dev botao

Problemas Ao Ler Quantidade De Itens Em Um Xml


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

Recommended Posts

  • Membros Pro

Boa tarde,

 

Estou com um problema ao ler a quantidade de itens em um XML de uma NFE.

No xml existem 2 itens, mas ao carregá-lo com o (loadfromfile) o mesmo só lê o primeiro item.

Foi verificado que na montagem do arquivo xml a Tag denominada Det não ficou da forma que se esperava.

 

Situação ao ler a variável Itens:

 

'<det nItem="1"><prod><cProd>8816</cProd><cEAN/><xProd>COLHER REFEICAO BRANCA 20 X 50 290X190X380  SACO 17X27,5X0,6</xProd><NCM>39241000</NCM><CFOP>5101</CFOP><uCom>CX</uCom><qCom>30.0000</qCom><vUnCom>25.0000</vUnCom><vProd>750.00</vProd><cEANTrib/><uTrib>CX</uTrib><qTrib>30.0000</qTrib><vUnTrib>25.0000</vUnTrib><indTot>1</indTot></prod><imposto><ICMS><ICMS00><orig>0</orig><CST>00</CST><modBC>3</modBC><vBC>750.00</vBC><pICMS>17.00</pICMS><vICMS>127.50</vICMS></ICMS00></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>50</CST><vBC>750.00</vBC><pIPI>10.00</pIPI><vIPI>75.00</vIPI></IPITrib></IPI><PIS><PISNT><CST>08</CST></PISNT></PIS><COFINS><COFINSNT><CST>07</CST></COFINSNT></COFINS></imposto></det><det nItem'#$D#$A' ="2"><prod><cProd>2522</cProd><cEAN/><xProd>GARFO REFEICAO BRANCO  20X50</xProd><NCM>39241000</NCM><CFOP>5101</CFOP><uCom>CX</uCom><qCom>30.0000</qCom><vUnCom>25.0000</vUnCom><vProd>750.00</vProd><cEANTrib/><uTrib>CX</uTrib><qTrib>30.0000</qTrib><vUnTrib>25.0000</vUnTrib><indTot>1</indTot></prod><imposto><ICMS><ICMS00><orig>0</orig><CST>00</CST><modBC>3</modBC><vBC>750.00</vBC><pICMS>17.00</pICMS><vICMS>127.50</vICMS></ICMS00></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>50</CST><vBC>750.00</vBC><pIPI>10.00</pIPI><vIPI>75.00</vIPI></IPITrib></IPI><PIS><PISNT><CST>08</CST></PISNT></PIS><COFINS><COFINSNT><CST>07</CST></COFINSNT></COFINS></imposto></det>'

 

Observem que o padrão seria para ficar <det nItem="1"> 

Mas no item 2 acontece a seguinte situação: <det nItem'#$D#$A' ="2"> onde existe um espaço após o Enter(#$D#$A). Na sua montagem esse mesmo espaço ficará entre o nlitem e o sinal de igualdade:  <det nItem ="2">.

 

Na unit pcnNFeR.pas da ACBR existe a condição para ler os itens:

while pos('<det nItem=',ItensTemp) <> 0 do

 

E na montagem do item 2 esse padrão é quebrado!

 

Paliativamente ao retirarmos o espaço entre o nlitem e o sinal de igualdade o problema é solucionado, mas nosso código ficará diferente do componente da ACBR.

 

 

Thomas R C Porciuncula

[email protected]

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Thomas,

 

O XML da NF-e, que você esta tentando ler com certeza não foi gerado pelo componente ACBrNFe ou esse XML foi enviado por e-mail e depois foi reenviado, provocando a quebra do arquivo em 2 ou mais linhas.

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

  • Membros Pro

Boa tarde Italo,

 

Verificamos que o ACBR faz um tratamento caso tenha uma quebra de linha, mas não faz o tratamento caso possua um espaço!
 
Observe que além da quebra de linha, possui logo após um espaço antes do sinal de igualdade. É o espaço que está alterando a verdadeira quantidade de itens:
 
<det nItem'#$D#$A' ="2">
 
 

Thomas R C Porciuncula

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Thomas,

 

Correto, mas é preciso saber qual é a fonte do problema.

 

O XML em questão:

 

1 esta sendo baixado do site;

2 esta sendo realizado o download via webservice;

3 esta sendo enviado pelo emitente por e-mail e depois é salvo em disco e posteriormente enviado novamente por e-mail para a pessoa que vai fazer a sua leitura.

 

O componente ACBrNFe ao gerar o XML não insere quebras de linhas e espaços em branco em lugares onde não devem existir.

 

No meu entendimento, devemos descobrir a causa do problema em vez de ficar fazendo alterações no componente.

 

Realizei um teste uma vez que consistia em enviar um XML por e-mail sem nenhum problema.

Ao recebe-lo ele era salvo em disco e o e-mail era encaminhado para uma outra conta.

O XML recebido por esta outra conta era salvo e disco.

Notei que o mesmo continha quebras de linhas.

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

  • Membros Pro

Bom dia Italo,

 

Eu entendi e já solicitei para o cliente fazer o download do XML pelo site da SEFAZ. Também acredito que o arquivo tenha sido alterado no meio do caminho.

O arquivo XML não foi gerado pelo meu sistema, foi recebido pelo cliente via e-mail e estou tentando carregar o arquivo utilizando o componente para importa-lo no meu sistema.

 

O componente desconsiderar as quebras de linhas (#13#10) na hora de carregar os itens do arquivo:

  •   Itens := StringReplace(Itens, #$D#$A, '', [rfReplaceAll]);

Mas mesmo assim o arquivo além da quebra de linha, possui um espaço antes do igual:

  • <det nItem'#$D#$A' ="2">

Fazendo com que a rotina considere que não há mais itens a serem lidos, ou seja a rotina LoadFromFile não lê todos os itens, mas fica a impressão que carregou o arquivo com sucesso para o objeto NFE. Meu sistema somente percebe o problema por que faz uma validação do total x soma dos itens.

 

Acredito que o melhor a fazer é contar as tags <det> e caso não consiga carregar todos os itens gerar uma exceção, até por que possa ser que surja um outro problema parecido com outro carácter por exemplo.

Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...