Página 1 de 1

tag infCpl XML NFe com caracter invalido

Enviado: 02 Fev 2017 12:47
por softecmario
Ola foreiros.
Lendo um XML de NFe me vem o campo infCpl (informações complementares) com caracteres inválidos.
Dai meu teste para ver se tem informação [CODIGO] if len(alltrim(infCpl)) # 0 [CODIGO] provoca um erro.
Como posso evitar este erro se tiver caracteres invalidos?
XML em anexo.
Obrigado.

tag infCpl XML NFe com caracter invalido

Enviado: 02 Fev 2017 14:16
por fladimir
depende de sua função... como vc esta fazendo?

tag infCpl XML NFe com caracter invalido

Enviado: 02 Fev 2017 15:05
por softecmario
Obrigado pelo interesse fladimir.

Código: Selecionar todos

...
          IF oCurrent:cName == "infCpl"
            infCpl :=  oCurrent:cData 
          ENDIF
...
            if len(alltrim(infCpl)) # 0         <------------------------------------------------------------------------------------------------ aqui da erro Error BASE/2022 Argument error: ALLTRIM
                xObs:=infCpl
                nPed:=WED_PEDIDO
                nObserv:=FOBSERV_GRV("EOBSERV","PED_PEDIDO","PED_SEQUEN","PED_OBSERV",nPed,nObserv,xObs)  //grava
                replace PED_OBSER with nObserv
            endif
...
Uso HMG EXTEND 17.01, BORLAND\BCC55, WINDOWS 10

no .xml esta:
-<infCpl>

-<![CDATA[<BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/>]]>
</infCpl>

tag infCpl XML NFe com caracter invalido

Enviado: 02 Fev 2017 15:22
por JoséQuintas
Nem parece que é programador..... rs

Código: Selecionar todos

if len(alltrim(infCpl)) # 0
Se isso dá erro em AllTrim() e AllTrim() serve pra string, então..... o conteúdo não é string.

O certo seria rever o conteúdo dessa variável, como ele inicia, e como ele se altera.
Apenas pra esconder o SEU erro, é desprezar se não for string.

Código: Selecionar todos

if ValType( infCpl ) != "C" .OR. Len( AllTrim( InfCpl ) ) != 0

tag infCpl XML NFe com caracter invalido

Enviado: 02 Fev 2017 17:21
por softecmario
Obrigado José Quintas.
Nada como um expert para os mínimos detalhes.
alterei para:

Código: Selecionar todos

            if ValType( infCpl ) != "C"
               //caracteres inválidos no campo infCpl do XML, não grava observação
            elseif Len( AllTrim( InfCpl ) ) != 0
                ...
            endif

FUNCIONANDO OK.

Colaborando,
o XML que estava lendo é de uma NFe aprovada na SEFAZ, Fornecedor de Cliente meu.
Ou seja não estava esperando NFe aprovada com Caracteres Inválidos no campo infCpl.