Página 2 de 4

Classe e função pra carregar XML

Enviado: 08 Set 2016 11:12
por NiltonGM
O Lugab, vc quer abrir de dentro da aplicação? Se for isso aí só com o mestre Zeh que é fera em xml, quando apenas quero ver o conteúdo do xml abro no navegador Chrome que ele formata o xml, também tem um plugin para o editor de texto Notepad++ pra formatar xml e json.

Classe e função pra carregar XML

Enviado: 08 Set 2016 18:50
por lugab
Isso mesmo, Nilton, só preciso q o meu programa exiba o xml.

Dando run no Wordpad e no Winword eu já testei e eles não conseguem , então, que seja por algum código compilável
onde a gente só passe o caminho e o nome do xml

Classe e função pra carregar XML

Enviado: 08 Set 2016 19:12
por JoséQuintas
Geralmente é o explorer:

Código: Selecionar todos

RUN START arquivo.xml
iexml.png

Classe e função pra carregar XML

Enviado: 08 Set 2016 19:27
por JoséQuintas
Não sei se dá pra chamar de mais sofisticado, mas foi só um teste rápido, não apareceram as barras de rolagem, mas virou janela do aplicativo:

Código: Selecionar todos

PROCEDURE PTES0190

   LOCAL oControl
   CLS
   oControl := wvgActivexControl():New(,, { -1, -1 }, { -MaxRow() + 1, -MaxCol() + 1 } )
   oControl:CLSID :=  "\\serverjpa\inetpub\wwwroot\xmlpdf\xxx\xxx.XML"
   oControl:Create()
   Inkey(0)
   RETURN
comgtwvg.png

Classe e função pra carregar XML

Enviado: 09 Set 2016 09:49
por lugab
Olá, Quintas,

O PROCEDURE PTES0190 deu erro de "not exported Method GETHWND" e eu nem experimentei...
Mas o RUN START funcionou...

Obrigado

Classe e função pra carregar XML

Enviado: 15 Out 2016 08:55
por janio
Quintas,

Achei bem interessante essas funções para leitura de xml e as pretendo usar para LER e IMPORTAR xml de fornecedores, apesar de eu pouco saber trabalhar com classes! Não eh o meu forte hehehe

Para fazer testes, peguei os códigos que vc aqui postou (mim interessa apenas a parte de LER um xml de fornecedores), mas ao compilar deu falta de muitas funções!
hbmk2: Erro: Referenciado, faltando, mas fun‡äes desconhecida(s):
XMLTODOCCTEEMI(), XMLTODOCMDFEEMI(), XMLTODOCNFECANCEL(),
XMLTODOCCTECANCEL(), XMLTODOCNFECCE(), XMLTODOCMDFECANCEL(),
XMLTODOCMDFEENC(), SONUMEROS(), CALCULADIGITO(), VALIDCNPJCPF(),
XMLNODE(), XMLELEMENT(), XMLDATE()


Como faço?

Classe e função pra carregar XML

Enviado: 15 Out 2016 13:53
por janio
Quintas,

Encontrei as funções no link que vc disponibilizou!

Mim virando aqui... hehehe

Por enquanto dando certo

Classe e função pra carregar XML

Enviado: 23 Nov 2016 20:04
por rubens
Quintas,

Nessa parte:
FOR EACH oProduto IN ( oDoc:Produto )
Como eu vou pegar os dados do produto?

? oNfe:Produto[ nCont ]:Nome

não tô visualizando isso. oDoc:Produto se refere a classe produto dentro do documento né? Só que aí Eu preciso pegar nome dentro de produto, que quando foi salvo foi identificado por nCont, agora para recuperar como fica essa identificação do nCont? Com o FOR EACH ele pula automático, não preciso identificar a posição ?

Obrigado,

Rubens

Classe e função pra carregar XML

Enviado: 23 Nov 2016 22:51
por JoséQuintas

Código: Selecionar todos

FOR nCont = 1 TO Len( oDoc:Produto )
   ? oDoc:Produto[ nCont ]:Código
   ? oDoc:produto[ nCont ]:Nome
NEXT
ou

Código: Selecionar todos

FOR EACH oElemento IN oDoc:Produto
   ? oElemento:Código
   ? oElemento:Nome
NEXT

Código: Selecionar todos

CREATE CLASS NfeProdutoClass

   VAR  Codigo        INIT ""
   VAR  Nome          INIT ""
   VAR  CfOp          INIT ""
   VAR  NCM           INIT ""
   VAR  GTIN          INIT ""
   VAR  Anp           INIT ""
   VAR  Unidade       INIT ""
   VAR  Qtde          INIT 0
   VAR  ValorUnitario INIT 0
   VAR  ValorTotal    INIT 0
...

Classe e função pra carregar XML

Enviado: 24 Nov 2016 00:37
por janio
Pegando os produtos!

Código: Selecionar todos

  oNfe := XmlToDoc( MemoRead( cArq ) )

FOR EACH oProduto IN ( oNfe:Produto ) 

   ? oProduto:Nome
   ? oProduto:Codigo
   ? oProduto:GTIN
   ? oProduto:GTINt
   ? oProduto:Qtde
   ? oProduto:ValorUnitario
   ? oProduto:ValorTotal
   ? oProduto:NCM
   ? oProduto:CEST
   ? oProduto:ValorDesconto
   ? oProduto:CFOP
   ? oProduto:IcmsSt:Base
   ? oProduto:IcmsSt:Aliquota
   ? oProduto:IcmsSt:Valor                               
   ? oProduto:Icms:Cst
   ? oProduto:Ipi:Valor
   ? oProduto:Ipi:Aliquota
      
NEXT 
E assim vai puxando os campos de acordo com a sua necessidade!

Classe e função pra carregar XML

Enviado: 24 Nov 2016 08:15
por rubens
Bom dia...

Certo... a classe tá instanciada e alimentada.

Código: Selecionar todos

      cCGC      	:= oNfe:Emitente:Cnpj 
      cNOME   	:= oNfe:Emitente:Nome
      *cFantasia   := oNfe:Emitente:Fantasia  		// Implementar na classe
      cEndereco   := oNfe:Emitente:Endereco
      cNumero     := oNfe:Emitente:Numero
      cBairro        := oNfe:Emitente:Bairro
      cCidadeCod  := oNfe:Emitente:CidadeIbge
      cCidade       := oNfe:Emitente:Cidade
      cEstado       := oNfe:Emitente:Uf
      cCep           := oNfe:Emitente:Cep
      cInsc_Est     := oNfe:Emitente:InscricaoEstadual
      cTelefone1  := oNfe:Emitente:Telefone
      cCrtEmit  	:= ''
      cTelefone1  := Transform( Val( cTelefone1 ), '( 99)9999-9999' )
      
      For EACH oProduto IN ( oNfe:Produto ) 
	      cNompro_    := oProduto:Nome
	      cCodBarra    := oProduto:GTIN
	      nQtde_        := oProduto:Qtde
	      nValor_       := oProduto:ValorUnitario
	      nTotal_       := oProduto:ValorTotal
	      cUnd_         := oProduto:Unidade
      Next 
Pego qualquer variável da nota... essa parte aí do emitente tá certinho e tal.
? oNfe:Produto[1]:Nome - Retorna o nome certinho, então se usar o for x/next funciona.
Tô apanhado do FOR EACH (boa oportunidade para aprender usar, porque está dentro do contexto)
Se não declaro oProduto dá erro na hora da execussão - não encontrado
Se declaro Private oProduto, não dá mas retorna tipo U.
O FOR EACH não seria traduzido assim: Enquanto for encontrado oProduto em oNfe:Produto? Mas o oProduto veio de onde? (me desculpem minha ignorância) dei uma olhada nos tópicos sobre o FOR EACH, mas mesmo assim não consegui visualizar nesse caso.
Obrigado

Rubens

Classe e função pra carregar XML

Enviado: 24 Nov 2016 09:30
por janio
Eh a primeira vez que For Each tbm... e ate mim parece mais simples que For... Next

Mas se vc quiser usar o for... next, pode tbm:

Código: Selecionar todos

FOR nCont = 1 TO Len( oNfe:Produto ) 
   ? oNfe:Produto[ nCont ]:Código 
   ? oNfe:produto[ nCont ]:Nome 
NEXT 

Classe e função pra carregar XML

Enviado: 24 Nov 2016 11:21
por JoséQuintas
Uma exigência do FOR/EACH é que a variável seja local.
A variável declarada será equivalente a um elemento do array.

Código: Selecionar todos

LOCAL aProdutosLst, oProduto

aProdutosLst := { "PANETONE", "CASTANHA", "PERU", "ARVORE", "PRESENTE" }
FOR EACH oProduto IN aProdutosLst
   ? oProduto
NEXT
No exemplo acima, oProduto equivale a aProdutosLst[ n ]
No caso da classe, equivale às informações de um produto.

Classe e função pra carregar XML

Enviado: 24 Nov 2016 15:32
por rubens
Fechou Quintas...

Declare local oProduto e depois peguei oProduto:Nome ...

Obrigado
Rubens

Classe e função pra carregar XML

Enviado: 12 Dez 2016 08:59
por NiltonGM
Estou usando e abusando das novas no Harbour como WITH OBJECT, SWITCH, o FOR EACH, esses comandos são ótimos e substitui muito os tradicionais na maioria dos casos sem falar que podemos criar classes pra tudo...

Código: Selecionar todos

FOR EACH xVar IN <array, string, etc>
       .... xVar
NEXT EACH

WITH OBJECT <oBjeto>
         ? :FieldGet(x)
     
     SWITCH :FieldGet('cf_tipo')
           CASE 1
                 .... ; EXIT
           CASE 2
                ..... ; EXIT
           OTHERWISE
     END SWITCH

END WITH