Essa segunda parte do tópico “Dados x XML como começar” foi criada para atender à uma demanda de usuários que têm postado dúvida para gerar o LOOP para criar os itens no XML da NF-e e, acredito que com com esses dados em mãos vai ficar mais fácil para quem está iniciando agora; segue então, o código da versão anterior com o exemplo da implementação para gerar os itens:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
procedure TfrmPrincipal.PnLerNfeClick(Sender: TObject);
var vXMLDoc: TXMLDocument;
    NodeNivelA, NodeNivelB, NodeNivelC, NodeNivelD: IXMLNode;
    nItens : integer;
begin
 
  vXMLDoc := TXMLDocument.Create(self);
  Try
  With vXMLDoc do begin
       Active := True;
       Version := '1.0';
       Encoding := 'UTF-8';
       AddChild('NFe','http://www.portalfiscal.inf.br/nfe');
       DocumentElement.Attributes['xmlns:ds'] :=
       'http://www.w3.org/2000/09/xmldsig#';
       DocumentElement.Attributes['xmlns:xsi'] :=
       'http://www.w3.org/2001/XMLSchema-instance';
       DocumentElement.Attributes['xsi:schemaLocation'] :=
       'http://www.portalfiscal.inf.br/nfe/enviNFe_v1.12.xsd';
 
       // A - Dados da Nota Fiscal eletrônica
       NodeNivelA := DocumentElement;
       // Adiciona a Tag
       NodeNivelA.AddChild('infNFe');
       // Adiciona atributo "Id" da Tag anterior
       NodeNivelA.ChildNodes['infNFe'].Attributes['Id'] := 'NFe31232131232132131231221312312312';
       // Adiciona atributo "versao" da Tag anterior
       NodeNivelA.ChildNodes['infNFe'].Attributes['versao'] :=
            '1.10';
 
       // B - Identificação da Nota Fiscal eletrônica
       NodeNivelB := NodeNivelA.ChildNodes['infNFe'];
       NodeNivelB.ChildNodes['ide'].AddChild('cUF').NodeValue := '51' ;
       NodeNivelB.ChildNodes['ide'].AddChild('cNF').NodeValue := '000001';
 
       // Exemplo Adiciona Itens
       For nItens := 1 to 2 do
       begin
         // adiciona tag <det> com attributo
         NodeNivelC := NodeNivelB.AddChild('det');
         NodeNivelB.ChildNodes.Last.Attributes['nitem'] := IntToStr(nItens);
 
         // adiciona tag <prod> à partir da tag <det>
         NodeNivelD := NodeNivelC.ChildNodes['prod'];
         NodeNivelD.AddChild('cProd').Nodevalue := IntToStr(nItens)+'121231111';
         NodeNivelD.AddChild('cEan').Nodevalue := '7891133005801';
         NodeNivelD.AddChild('xProd').Nodevalue := 'ABRACADEIRA C/PREGO FMX  6 BR - 580';
         NodeNivelD.AddChild('CFOP').Nodevalue := '5102';
         // .....
       end;
 
       //Memo4.Text := vXMLDoc.Encoding;
       vXMLDoc.SaveToFile('EnviNFe.xml');
       Memo4.Lines.LoadFromFile('EnviNFe.xml');
  end;
  finally
     vXMLDoc.Free;
  end;
end;

Posts Relacionados

Tags: ,



57 Comentários

  • At 2008.11.07 16:00, Berdam said:

    Caio, estou perdidaço nessa parada de Nfe, baixei os schemas PL_005b do site nfe.fazenda.gov.br e irei seguir a ordem do arquivo de envio para a receita.

    Estou em dúvida de como montar as tags do xml no formato correto.

    Algum material que possa ajudar talvez??

    • At 2008.11.07 16:34, Caio said:

      Olá Berdam,

      O código desse post pode lhe ajudar à entender o laioute ou e posicionamento das tags; mas, para que vc possa montar a estrutura completa da NF-e, é indispensável que entenda a descrição conforme publicada no “Manual de Integração” 2.0.2 (Pág. 85).

      Ali está detalhado todo o esquema da NF-e; bem como o posicionamento correto das tags.

      Sds,

      • At 2008.11.10 09:05, Berdam said:

        PL_005b/leiauteNFe_v1.10.xsd

        Caio,nos leiautes que baixei SEFAZ existem várias tags que montam o arquivo, como essas aqui

        —————————————

        Código da UF do emitente do Documento Fiscal. Utilizar a Tabela do IBGE.

        Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e.

        —————————————-

        No arquivo que iremos gerar é necessário essas tags malucas ou simplesmente assim basta???

        ———————————
        51
        000001
        ———————————

        • At 2008.11.10 09:06, Berdam said:

          Coloquei as tags ali no cometário acima, mas elas n são aceitas pelo comentário.

          • At 2008.11.10 13:30, Caio Oliveira said:

            Olá Berdam,

            As “tags” e conteúdo têm que ser disponibilizados exatamente como instruído no Manual de Integração “Laioute NF-e”. Além da disponibilização das “tags” é necessário obedecer as regras de preenchimento (formatos e valores) de cada uma delas.

            Acesse o link abaixo e veja um exemplo de um arquivo XML da NF-e:
            http://nf-eletronica.com/blog/?p=77

            Sds,

            • At 2008.11.12 07:47, Pedro said:

              Olá Caio.
              Na página 21,22 do manual de integração, fala-se a respeito do cabeçalho que deve estar em todas as mensagens de envio e resposta,

              1.07

              Estou confuso na tag cabecMsg e versaoDados, por acaso a string cabecMsg deve ser substituída por Nfe e a tag versaoDados se refere a por exemplo a nota de envio para a receita??

              • At 2008.11.12 10:40, admin said:

                O Cabeçalho se trata de outro XML que é enviado juntamente com o XML do lote (esse último, que contê a NF-e).

                A função de recepção do lote aguarda mais de um parâmetro; bem como: a sigla da unidade e federação, o tipo de ambiente, o nome do certificado, o XML do cabeçalho, o XML do lote, … usando, a NFE_UTIL.DLL, por exemplo, vc. não precisa se preocupar com o cabeçalho, pois, o mesmo está “encapsulado” e, apesar da função solicitar o cabecalho vc pode passá-lo em branco (ou seja = ”).

                sds,

                • At 2008.11.14 13:06, João said:

                  Pessoal, na página 118 do manual de integração, tem a tag em relação ao transporte da mercadoria.

                  Se a modalidade da mercadoria for = 0, significa que o próprio produtor da mercadoria realizará o transporte.

                  Pergunto, sendo a modalidade = 0, é necessário repetir todas as informações do produtor novamente??

                  • At 2008.11.18 12:54, Joares said:

                    Estou validando meu XML e aconteceu isso

                    Linha:1 Coluna:40 Erro:Could not find schema information for the element ‘http://www.portalfiscal.inf.br/Nfe:Nfe’.

                    A primeiro linha do XMl encontra-se da seguinte maneira.
                    <Nfe xmlns=”http://www.portalfiscal.inf.br/Nfe”

                    Alguém tem alguma idéia do que possa ser??

                    • At 2008.11.18 13:22, admin said:

                      Olá Joares,

                      Observe que a tag “Nfe” deve escrever como “NFe”.

                      Sds,

                      • At 2008.11.18 14:13, Bel said:

                        Caio,

                        Estou com dúvida no código de barras. Já concluí o modulo 103, consigo inserir a chave e o DV no código de barras do DANFE. No manual de integração eles informam que o caractere de início de leitura é 105, mas não falam o caractere de parada.

                        Poderia me dar uma ajuda??

                        Obrigada,

                        Bel.

                        • At 2008.11.18 18:39, Caio Oliveira said:

                          Oi Bel,

                          Seguinte, eu usei um componente para o Delphi, o CJVBarras que possui contêm o padrão code128c; assim vc não perder tempo com isso.

                          Dá uma olhada no artigo sobre CJVBarras aqui no Blog

                          • At 2008.11.28 17:25, Gilbert said:

                            Caio,

                            Seus exemplos são muito uteis, obrigado por suas contribuições.
                            Quando executo a parte que se refere aos itens/produtos,
                            na linha 41 dá o erro:
                            raised exception class EXMLDocError with message ‘Attributes are not supported on this node type’. Process stopped. Use Step or Run to continue.

                            Sabe o motivo ?

                            Obrigado,

                            Gilbert

                            • At 2008.11.28 17:58, admin said:

                              Olá Gilbert,

                              É bom saber que estamos conseguindo ajudar alguns colegas, o objetivo é esse mesmo. Quanto ao problema que mencionou, eu testei novamente o código acima e, ele está funcional. Copie novamente o código exatamente como acima, faça o teste; em seguida vc faz as implementações.

                              Sds

                              Ps. não se esqueça de referenciar as units: XMLDoc, XMLIntf, xmldom.

                              • At 2008.12.02 13:47, Jean said:

                                Galera, no envio da nota estou recebendo o seguinte erro.

                                Alguém tem conhecimento do que possa ser isso??

                                O webservice está como produção e o certificado está vaildado.
                                —————————
                                Erro
                                —————————
                                Falha na chamada do WebService…

                                Erro: A licença informada tem tamanho diferente de 128 – () – tam (0)
                                —————————
                                OK
                                —————————

                                • At 2008.12.10 21:43, Nilton Cleverson de Oliveira said:

                                  caio estou com um problema aqui no delhi
                                  NodeNivelH := NodeNivelH.ChildNodes['det nItem="1"'];
                                  o delphi fala que não pode ter espaço entre os caracteres da ‘det nItem=”1″ como eu posso resolver isso

                                  • At 2008.12.11 10:09, Bel said:

                                    caio,
                                    estava lendo sobre a distribuicao da nota fiscal eletronica.
                                    Meu programa tem que gerar um arquivo xml proc_NFe para que eu envie ao destinatário?

                                    Obrigada,

                                    Bel.

                                    • At 2008.12.11 11:55, Caio said:

                                      Olá Nilton,

                                      Veja esse exemplo: http://www.caiooliveira.com.br/?p=73

                                      • At 2008.12.11 12:00, Caio said:

                                        Olá Bel,

                                        Não necessariamente; agora, seu destinatário (cliente por exemplo) pode lhe pedir para que envie o arquivo de forma que eles possam aproveitar (fazer a leitura dos dados com o programa deles) e facilitar o processo de registro de entradas, por exemplo. Nesse caso vc deve decidir se a sua aplicação terá essa funcionalidade ou não.

                                        A tendência é que isso ocorra naturalmente. Afinal, o registro de entradas é um dos processos que consomem mais tempo e, esse nova realidade (um arquivo XML padrão como o da NF-e) tende a agilizar esse processo.

                                        Sds,

                                        • At 2009.01.14 15:58, Fabiana said:

                                          Olá Caio, bem eu estou em dúvida de como se comporta a NFe_Util.dll, no caso de envio de scan, se eu mando o xml normal alterando apenas a tag de cabeçalho e a de tipo de emissão.

                                          Muito obrigada

                                          • At 2009.01.14 17:54, admin said:

                                            Para usar o ambiente de SCAN; alêm de alterar o “tpEmis” para “3″; vc deve observar que a série da NF-e deve ser modificada para a faixa “900 a 999″ exclusiva para o sistema de contigencia SCAN, visto que as NF-e emitidas via SCAN tem que ter numeração própria

                                            Sds

                                            • At 2009.05.05 08:47, Junior said:

                                              Como eu poderia fazer para ler os dados dos campos dos nodos/ids : A – Dados da Nota Fiscal eletrônica e B – Identificação da Nota Fiscal eletrônica.

                                              Eu só queria ler os dados dos campos:

                                              campos do nodo A:
                                              id
                                              versao
                                              pk_nitem

                                              campos do nodo B:
                                              cUF
                                              cNF
                                              natOp

                                              Só quero ler esses dados e jogar o resultado pra dentro de uma variavel string, mais nada.

                                              Eu tentei criar uma função utilizando como base seus exemplos, mas não consegui.

                                              • At 2009.05.05 11:40, admin said:

                                                Olá Junior,

                                                Segue um exemplo:

                                                var vXMLDoc: TXMLDocument;
                                                    NodePrim,NodePai,Nodeide: IXMLNode;
                                                    id,nome, codigo: WideString;
                                                begin
                                                  vXMLDoc := TXMLDocument.Create(self);
                                                  vXMLDoc.LoadFromFile('suaNFe.xml'); 
                                                 
                                                  try
                                                  {
                                                  para ler a partir do arquivo de lote de envio modifique o codigo
                                                  ------------------------------------------------------
                                                  NodePrim := vXMLDoc.DocumentElement.ChildNodes.FindNode('NFe');
                                                  NodePai := NodePrim.ChildNodes.FindNode('infNFe');
                                                  }
                                                  // ou para ler o arquivo da NFe
                                                  NodePai := vXMLDoc.DocumentElement.ChildNodes.FindNode('infNFe');
                                                  Id := NodePai.GetAttributeNS('Id','');
                                                  Memo.Lines.Add( 'Id:' +Id );
                                                 
                                                 
                                                  Nodeide := NodePai.ChildNodes.FindNode('ide');
                                                  Memo.Lines.Add( 'dEmi = '+Nodeide.ChildNodes['dEmi'].text);
                                                  Memo.Lines.Add( 'dSaiEnt = '+Nodeide.ChildNodes['dSaiEnt'].text);
                                                  Memo.Lines.Add( 'cNF = '+Nodeide.ChildNodes['cNF'].text);
                                                  Memo.Lines.Add( 'natOp = '+Nodeide.ChildNodes['natOp'].text);
                                                 
                                                  //.... e assim por diante....
                                                 
                                                  finally
                                                     vXMLDoc.free
                                                  end;
                                                end;
                                                • At 2009.05.06 17:36, Junior said:

                                                  Cara muito obrigado. Deu certinho, e nesse ultimo exemplo finalmente eu entendi como funciona a leitura de xml. Obrigado mesmo.

                                                  • At 2009.07.15 15:14, Emanuel Gadelha said:

                                                    Olá..

                                                    Caio, tdo tranquilo?

                                                    Minha duvida é se tem como ler o XML no delphi como se ele estivesse dentro do browser? Sem ser com Memo.. Tem?
                                                    Abraço!

                                                    • At 2009.07.20 08:09, Caio said:

                                                      Olá Emanuel,

                                                      Para ler o XML no Delphi vc. pode usar o exemplo postado em (http://www.caiooliveira.com.br/?p=73). Abrir no browser usando o Delphi também é possível; depende do que vc quer fazer.

                                                      Sds,

                                                      • At 2009.07.20 16:44, Eduardo Rocha said:

                                                        Grande Caio, vê se pode me ajudar.

                                                        Eu vou imprimir o Danfe através de comandos do delphi, o que seria melhor buscar os dados no xml já gerado ou buscar no banco de dados ?

                                                        Grato,

                                                        Eduardo

                                                        • At 2009.07.22 08:35, Caio said:

                                                          Olá Eduardo,

                                                          Eu gero a partir dos dados do sistema; mas, vc. pode fazer do modo que achar mais fácil.

                                                          Sds,

                                                          • At 2009.07.22 12:45, Emanuel Gadelha said:

                                                            Olá Caio.. novamente por aqui!

                                                            Cara agora tou com um erro, quando vou abrir o XML resposta de verificação de Status, o Xml dá o seguinte erro:

                                                            A página XML não pode ser exibida
                                                            Não é possível exibir a entrada XML usando a folha de estilos . Corrija o erro e clique no botão Atualizar ou tente novamente mais tarde.

                                                            ——————————————————————————–

                                                            Inválido no nível superior do documento. Erro ao processar o recurso ‘file:///C:/FEC_NFe/Fontestemp.xml’. Linha 1, posição…

                                                            {\rtf1\ansi\ansicpg1252\deff0\deflang1046{\fonttbl{\f0\fnil\fcharset0 Trebuchet MS;}}
                                                            ^

                                                            • At 2009.07.22 12:51, Emanuel Gadelha said:

                                                              Foi mals…

                                                              Consertei o erro já!

                                                              De qualquer forma valeu!

                                                              • At 2009.08.14 09:05, Eduardo Rocha said:

                                                                Olá Caio, bom dia !

                                                                É possível saber o tamanho do arquivo xml em bytes, antes de gravá-lo no hd ? É que estou montando o lote com 50 notas e na maioria das vezes ultrapassa o 500Kb,

                                                                Valeu !

                                                                • At 2009.08.15 08:28, Eduardo Rocha said:

                                                                  opa Caio, blz ?

                                                                  Consegui resolver sobre o tamanho do arquivo da segte. maneira : verifico quantos caracteres tem no lote, isto me dá um estimativa bem próxima,

                                                                  if Length(Lote_NFe)>500000 then iniciar_novo_lote

                                                                  De qquer forma valeu !

                                                                  • At 2009.08.19 15:51, Alexandre said:

                                                                    Caio, parabéns pela sua postagem!
                                                                    Está muito bom! Excelente!

                                                                    • At 2009.08.20 08:27, Ricardo said:

                                                                      Caio,

                                                                      Uma ajuda, alguns clientes que possuem
                                                                      NF-e, precisam de informações para serem
                                                                      lançadas no sistema SPED, vc sabe dizer se os
                                                                      XML gerado pode ser importado para o SPED Fiscal ?

                                                                      • At 2009.08.20 09:34, admin said:

                                                                        Bom dia Ricardo,

                                                                        Vc. pode importar o XML da NF-e para qualquer formato, inclusive para o SPED Fiscal. Embora eu ache mais prático no caso gerar o arquivo a partir do banco de dados do sistema; mesmo porque, os dados do registro de entradas, registro de inventário e cupom fiscal (se houver) deverão constar no arquivo na EFD.

                                                                        sds,

                                                                        • At 2009.08.20 10:45, Ricardo said:

                                                                          Caio,

                                                                          Obrigado pelas dicas, mas olha só, tem como vc me passar informações básicas de como gerar este arquivo para sped (lay-out), ou onde posso obte-las ? e outra coisa, com a padronização do uso da EFD, como fica a integração por meio do SINTEGRA, não vai mais ser utilizado ?

                                                                          sds,
                                                                          Ricardo

                                                                          • At 2009.08.20 11:39, Caio said:

                                                                            Olá Ricardo,

                                                                            Baixe o Guia Prático da EFD a partir do portal (http://www1.receita.fazenda.gov.br/Sped/). O EFD deveria substituir o uso do SINTEGRA, visto que as informações são as mesmas (aliás, a EFD é mais completa), mas, ainda não sei lhe informar como isso vai ocorrer.

                                                                            Sds,

                                                                            • At 2009.09.08 10:47, Ricardo said:

                                                                              Oi Caio.

                                                                              Estou gerando o arquivo XML normalmente. Porém, sempre que a primeira tag tem o atributo “xmlns”, todas as suas tags filha (de 1º nível) tbm ficam com o mesmo atributo, mas sem valor nenhum.

                                                                              Você sabe porque isso ocorre? E o q deve ser feito para que não aconteca?

                                                                              Obrigado

                                                                              • At 2009.09.15 08:39, Lorde_MF said:

                                                                                Bom dia Ricardo

                                                                                conseguiu gerar já o arquivo TXT para o sistema SPED
                                                                                estou quebrando a cabeça nisso, o contador me solicitou o (Layout 18)

                                                                                Grato

                                                                                • At 2009.09.17 09:17, Bruno said:

                                                                                  Galera, no envio da nota estou recebendo o seguinte erro.

                                                                                  Alguém tem conhecimento do que possa ser isso??

                                                                                  O webservice está como produção e o certificado está vaildado.
                                                                                  —————————
                                                                                  Erro
                                                                                  —————————
                                                                                  Falha na chamada do WebService…

                                                                                  Erro: A licença informada tem tamanho diferente de 128 – () – tam (0)

                                                                                  • At 2009.09.17 22:53, Ricardo said:

                                                                                    Caio,

                                                                                    Enviei para a SEFAZ-MT um NF-e em ambiente de homologação o mesmo retorna o n. Recibo, Protocolo, ID NFE, etc… parace tudo ok. mas quando consulto o NF-e no portal da SEFAZ através do nº Chave, o mesmo informa que tal nf-e não consta na base de dados da SEFAZ, será porque esta no ambiente homologação, ou não tem nada a ver ?

                                                                                    at.
                                                                                    Ricardo

                                                                                    • At 2010.01.29 05:55, SERGIO OBLADEN said:

                                                                                      Bom dia, tenho acompanhado seus artigo, e diga-se de passagem sao excelentes, gostaria de saber se é possivel baixar uma nfe ou seja o arquivo xml da nfe direto do site da fazenda, sou contador e gostaria de saber se posso baixar qualquer nota fiscal do site por exemplo dos fornecedores do meu cliente ???? precisaria com urgencia

                                                                                      • At 2010.01.29 14:18, admin said:

                                                                                        Olá SERGIO OBLADEN,

                                                                                        No site da SEFAZ vc vai conseguir consultar a NF-e mas não consegue baixar o XML (codigo) da mesma. Por outro lado, repare que o fornecedor tem a obrigatoriedade de lhe enviar o arquivo XML de distribuição da NF-e. Veja detalhes no “Manual de Integração do Contribuinte”.

                                                                                        Sds

                                                                                        • At 2010.02.02 18:16, Valtino said:

                                                                                          Caio, boa Noite

                                                                                          Poderia me informar como faço para criar o arquivo de Sped, se possivel poderia me enviar um arquivo como exemplo, este arquivo pode ser um xml ou tem quer ser um txt. Grato.

                                                                                          Valtino de Oliveira

                                                                                          • At 2010.02.23 18:26, rui said:

                                                                                            boa noite, alguem poderia me ajudar?
                                                                                            Quando estou consultando o Servidor WS esta retornando a seguinte mensagem:
                                                                                            Inválido no nível superior do documento
                                                                                            Configuration system failed to initializ.

                                                                                            • At 2010.09.01 10:32, Edilson said:

                                                                                              Muito obrigado mesmo, me ajudou demais.

                                                                                              • At 2010.09.21 19:54, Fabio Trindade said:

                                                                                                Caio, estou gerando o xml usando a dll no ambiente de teste. O xml gera normalmente e também é assinado com perfeição. Porém quando começa o processo de envio eu recebo o arquivo de retorno com o erro :
                                                                                                Rejeição: NF-e não consta na base de dados da SEFAZ

                                                                                                Veja a baixo o xml de retorno:

                                                                                                -
                                                                                                -
                                                                                                2
                                                                                                SP_NFE_PL_005e
                                                                                                217
                                                                                                Rejeição: NF-e não consta na base de dados da SEFAZ
                                                                                                35

                                                                                                • At 2010.09.22 07:57, admin said:

                                                                                                  Olá Fabio,

                                                                                                  Quando vc. envia a NF-e vc. deve receber o XML contendo o numero do recibo de entrega da mesma apenas; normalmente nesse momento não se sabe se houve rejeição. Para saber se houve rejeição, vc. vai fazer a consulta (usando o número do recibo). Verifique se não está consultando a NF-e no ambiente de produção.

                                                                                                  Sds

                                                                                                  • At 2010.10.01 15:02, fabio said:

                                                                                                    Erro: A licença informada tem tamanho diferente de 128 – () – tam (0)

                                                                                                    quando vou enviar a nfe usando a nfe_util.dll me retorna este erro. Alguém pode me ajudar como resolver isto ?

                                                                                                    • At 2010.10.01 15:19, admin said:

                                                                                                      Fabio,

                                                                                                      A licença da NFe_util.dll é um produto comercial; no entanto, a maioria das funcionalidades não exige o uso da licença; outras sim, bem como: os comandos de cancelamento ou e inutilização da NF-e. Nesse caso, vc deve adquirir um número de licença para poder executar o comando. Veja mais informações no site da “FlexDocs“.

                                                                                                      Sds

                                                                                                      • 7 old comments are not displayed. Click to display all comments

                                                                                                      You must be logged in to post a comment.