× Linguagem de Programação ADVPL

Perguntas Erro ao ler arquivo XML com campo em branco

Mais
8 anos 6 meses atrás #30595 por wesley wsc
Olá sou novo com o ADVPL e estou tendo um problema com o código criado.
Quando leio um arquivo XML e qualquer campo esta em brando o programa efetua um erro
invalid property.


já tentei if len(alltrim(oNotaxml:_ICS:_ST)) < 12
e outras formas mas nenhuma deu resultado.

Se alguém puder ajudar fico agradecido.
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 6 meses atrás #30628 por fmmattos
Tenta assim:

oNotaxml := xmlparserfile(cNomearq, "_", @cError, @cWarning)

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 5 meses atrás #30694 por wesley wsc
Bom dia eu tendei dessa forma mas não adiantou.

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 5 meses atrás #30698 por will
Boa Tarde, pra te ajudar, preciso também do arquivo xml que vc está tentando importar.

"NCMteste.xml"

salve o seu prw e o xml em uma pasta compactada .rar e coloque aqui para gente poder analisar melhor.

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 5 meses atrás #30756 por wesley wsc
Boa tarde!!!
Estou enviando os arquivos para verificar o erro.
Obrigado.
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Mais
8 anos 5 meses atrás #30759 por will
Bom dia Wesley!

Consegui resolver segue em anexo, deu trabalho em meu jovem..rsrsr

Bom Vamos lá!

Quando a variavel i está no valor 14 dá o erro nas variaveis de _aliquota.

Esses objetos não tinha quando o i estava na posição 14 gerando o erro.

Existe essa função que checa se existe o nó no xml XmlChildEx

Então eu checo antes para aí ver se manda ou não para a variavel tipo assim.


oALIQUOTADESTINO := XmlChildEx(oNotaxml:_ICS:_ST, "_ALIQUOTADESTINO")
cALIQUOTADESTINO := IIF(oALIQUOTADESTINO == NIL,0,oNotaxml:_ICS:_ST:_ALIQUOTADESTINO:Text)

Ai funcionou belezinha.


Só não entendi o que vc quer com esse trecho.

z := i //(oNotaxml:_ICS:_ST)
tam := i+1 //(oNotaxml:_ICS:_ST[i+1])


if ( tam >= z )

Porque do jeito que estava no final o Z estava sempre maior do que tem no i e aí dava erro de estouro de vetor. alterei vê se é assim que vc quer ou não.

Uma dica.. Identação de Código é importante demorei para entender onde começa e terminava o if.
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.134 segundos
Joomla templates by a4joomla