Classe e função pra carregar XML

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Classe e função pra carregar XML

Mensagem 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.
Nilton Medeiros
nilton@sistrom.com.br
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Classe e função pra carregar XML

Mensagem 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
lugab
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Classe e função pra carregar XML

Mensagem por JoséQuintas »

Geralmente é o explorer:

Código: Selecionar todos

RUN START arquivo.xml
iexml.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Classe e função pra carregar XML

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Classe e função pra carregar XML

Mensagem por lugab »

Olá, Quintas,

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

Obrigado
lugab
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Classe e função pra carregar XML

Mensagem 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?
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Classe e função pra carregar XML

Mensagem por janio »

Quintas,

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

Mim virando aqui... hehehe

Por enquanto dando certo
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Classe e função pra carregar XML

Mensagem 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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Classe e função pra carregar XML

Mensagem 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
...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Classe e função pra carregar XML

Mensagem 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!
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Classe e função pra carregar XML

Mensagem 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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Classe e função pra carregar XML

Mensagem 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 
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Classe e função pra carregar XML

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Classe e função pra carregar XML

Mensagem por rubens »

Fechou Quintas...

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

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Classe e função pra carregar XML

Mensagem 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
Nilton Medeiros
nilton@sistrom.com.br
Responder