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: 20415
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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