Manual didático de NFE em XML

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

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

Manual didático de NFE em XML

Mensagem por JoséQuintas »

Basicamente o XML é composto de tags.
A tag começa com <tag> e termina com </tag>
E uma tag pode conter sub-tags.

O cnpj do emitente ficaria assim:

Código: Selecionar todos

mXml := "<cnpj>" + emitente->cnpj + "</cnpj>"
O nome do emitente ficaria assim:

Código: Selecionar todos

mXml := "<nome>" + emitente->nome + "</nome>"
E o conjunto de dados do emitente ficaria assim:

Código: Selecionar todos

mXml := "<emitente>" + ;
   "<cnpj>" + emitente->cnpj + "</cnpj>" + ;
   "<nome>" + emitente->nome + "</nome>" + ;
   "</emitente>"
Nos exemplos acima, vemos que a parte mais chata é ficar abrindo e fechando tags.
Pra isso, criamos uma função, só precisando passar o nome e o conteúdo.

E pode confundir o abrir/fechar, quando o Xml vai ficando extenso.
Então vamos separar em blocos.
Abaixo um fonte mais completo, só pra dar uma idéia.

Código: Selecionar todos

mXmlNota := XmlTag("nota",notafiscal->numero) + ;
   XmlTag("emissao",Dtos(notafiscal->emissao)) + ;
   XmlTag("natureza",notfiscal->natureza)

mXmlEmitente := XmlTag("cnpj",emitente->cnpj) + ;
   XmlTag("nome",emitente->nome) + ;
   XmlTag("endereco",emitente->endereco) + ;
   XmlTag("cidade",emitente->cidade) + ;
   XmlTag("UF", emitente->uf)

mXmlDestinatario := XmlTag("cnpj",cliente->cnpj) + ;
   XmlTag("nome",emitente->nome) + ;
   XmlTag("endereco",emitente->endereco) + ;
   XmlTag("cidade",emitente->cidade) + ;
   XmlTag("UF",emitente->UF)

mXmlProduto := XmlTag("produto",produto->nome) + ;
   XmlTag("Qtde",Ltrim(Str(produto->Qtde,16,2))) + ;
   XmlTag("Valor",Ltrim(Str(produto->Valor,16,4)))

mXmlGeral := ;
   XmlTag("Nota",mXmlNota) + ;
   XmlTag("emitente",mXmlEmitente) + ;
   XmlTag("destinatario",mXmlDestinatario") + ;
   XmlTag("produto",mXmlProduto)

MemoWrit(ArquivoXml,mXmlGeral)

Function XmlTag(cTag, cConteudo)
Local cTexto := ""
cTexto := "<" + cTag + ">" + cConteudo + "</" + cTag + ">"
Return cTexto
Há várias formas de fazer tudo isso. Basta escolher a que achar melhor.
Outra opção dos dados de clientes, por exemplo, poderia ser um Array.

Código: Selecionar todos

aDadosCli := {}
Aadd(aDadosCli,{"CNPJ",clientes->Cnpj})
Aadd(aDadosCli,{"Nome",clientes->Nome})
Aadd(aDadosCli,{"Endereco",clientes->Endereco})
Aadd(aDadosCli,{"Cidade",clientes->Cidade})
Aadd(aDadosCli,{"UF",clientes->Uf})

mXml := ""
For nCont = 1 To Len(aDadosCli)
   cCampo := aDadosCli[nCont,1]
   cConteudo := aDadosCli[nCont,2]
   mXml := mXml + "<" + cCampo + ">" + cConteudo + "</" + cCampo + ">"
Next
E por aí vai....
As opções são muitas, aqui tem apenas algumas para ajudar.
De repente poderia usar o eval() no array, mas nunca usei isso, e não saberia ensinar.

Esse fonte é simples e prático.
Tem um componente da Microsoft pra XML, mas em VB uso o fonte exatamente igual.
O componente da Microsoft parece só complicar, assim como algumas classes criadas pra XML que existem por aí.
Espero que este post ajude.

Obs. Estas e outras dicas estão em meu site, ainda com cores zoneadas, devido a testes.
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/
anacatacombs
Membro Master
Membro Master
Mensagens: 472
Registrado em: 12 Jul 2005 16:53
Localização: Cianorte-Paraná
Contato:

Re: Manual didático de NFE em XML

Mensagem por anacatacombs »

Parabéns pela iniciativa :)
A propósito.. qual seu site?
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Re: Manual didático de NFE em XML

Mensagem por lugab »

José Quintas,

Até eu, um quase zero em linguagem de programação, compreendi.

Falo por todos aqui do fórum que tem o mesmo nível que eu, e que costumam só baixar , silenciosamente, e necas de postar um agradecimento.

Muito obrigado, de verdade.

gabriel
lugab
Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

Re: Manual didático de NFE em XML

Mensagem por Dr.Microso »

Parabéns José!

Ficou bakana o formato, é legal quando alguém posta algo visando toda a "escada de instrução".
Embora eu não trabalhe com XML ainda, estava protelando o estudo do assunto... Parecia algo mais complexo, e agora ficou claro que é um TXT formatado... Seu post me deu uma noção legal de base. Tomara que o formato do post seja adotado por muitos aqui...

Algumas solicitações de ajuda são atendidas aqui num código até funcional, mas... Acompanhada de penduricalhos e/ou em alguns casos em vez do PRG limpo e didático, um PPO com instruções nuas como a manipulação de objetos (para mim é simples...) dificultando para muitos.
Não, não estou fazendo alusão à nenhum post correlacionado (que fique bem claro!), mas sim à muitos que estão espalhados por aí sobre assuntos diversos. Obviamente, cada um posta da forma que quer, mas tenho certeza que a maioria concorda que fica mais bonito e atende um número bem maior de pessoas, quando a visibilidade é global.
Viva o passo-a-passo, o código simples e didático, altruísta e não disfarçado de "espelho para a vaidade"!

Um abraço!
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
Responder