Migrando para a NFe 2.00

Dicas Blog, Informação dezembro 13th, 2010

Logo NF-eNesse artigo, publico uma resumo das principais alterações necessárias para adaptar o código da sua aplicação de forma a validar a nova versão do XML da NFe 2.00 (Nfe 2G) e também, cito algumas alterações importantes que deverão ser realizadas no código para o calculo de imposto conforme empresa optante pelo Simples Nacional. Na verdade, a maior alteração, no meu ponto de vista, foram as novas tags para implementar os novos códigos de tributação para as empresas optantes pelo “Simples Nacional”.

Caso ainda não tenha feito, baixe agora mesmo o “Manual de Integração do Contribuinte (v4.01)”; as alterações promovidas foram destacadas em azul ou vermelho.

Clique para continuar lendo “Migrando para a NFe 2.00″

Tags:

Interpretando o “layout” da NF-e a partir do Manual de Integração

Dicas Blog, Informação, Programação agosto 5th, 2009

Esse artigo tem por objetivo auxiliar no entendimento para interpretação da documentação da NF-e referente ao “layout” no Manual de Integração do Contribuinte. A idéia dessa matéria surgiu a partir de alguns colegas que visitaram o blog e, estavam com dificuldades em entender o conceito ali atribuído para a montagem do XML.

Vamos começar de “trás para frente”, na minha opinião, costuma ser sempre mais fácil ver o exemplo pronto e depois procurar entendê-lo. No exemplo abaixo destacamos apenas a parte do XML da NF-e correspondente aos dados dos produtos e totais da NF-e.

Vamos analisar o mesmo trecho na documentação do Manual de Integração e entender o posicionamento/agrupamento das “tags” dentro do XML.

Veja abaixo um Exemplo de Parte do XML de uma NF-e (detalhes produto/totais NF-e).

Clique para continuar lendo “Interpretando o “layout” da NF-e a partir do Manual de Integração”

Tags: , ,

Certificado Digital – Qual modelo devo comprar para a NF-e?

Informação julho 8th, 2009

Qual o padrão?, modelo: A1 ou A3? e ainda, e-CNPJ ou e-NFe?.

Muitos colegas já me fizeram essa pergunta; tendo em vista que existem diversos modelos de certificado digital disponíveis. Estava escrevendo essa matéria quando me perguntei “Isso já deve estar publicado em algum site”. Uma pesquisa rápida no Google e resolvido o problema.

O Blog da NF-e publicou um post bem resumido, ao mesmo tempo, completo, sobre esse assunto; segue abaixo, o link para acesso à essas informações:

FAQ Certificado Digital – Blog da NFe

Complemento apenas informação sobre o certificado tipo NFe (comercializado pela Certsign) Criado especialmente para emitir notas fiscais eletrônicas que garante maior segurança no uso do certificado digital da sua Empresa porque somente pode ser usado para essa finalidade.

Tags: ,

Primeiros passos para o projeto NF-e

Informação fevereiro 19th, 2009

Tenho recebido diversos e-mails de colegas que estão iniciando o processo de implementação da Nota Fiscal Eletrônica (NF-e) para seus sistemas. E, principais perguntas são: por onde começar e em seguida, que tecnologias utilizar.

Percebi, então, que muitos ainda estão completamente alheios à quantidade de informação envolvida nesse projeto e, portanto ainda não tiveram noção do tempo necessário para realizar as etapas; mesmo porque, as etapas não estão claras o suficiente.

O obejtivo desse artigo é auxiliar esses colegas, no processo da montagem de um cronograma de trabalho para o projeto da NF-e e, ao mesmo tempo indicar meios de realizar cada etapa necessária.

É importante salientar que as informações que irei disponibilizar abaixo são fruto da minha experiência pessoal durante a implementação do projeto NF-e para o sistema de minha Empresa e, portanto, não significa que é a melhor maneira ou a forma correta ou a melhor tecnologia, apenas posso dizer que, funcionou para mim.

Clique para continuar lendo “Primeiros passos para o projeto NF-e”

Tags:

Distribuição da NF-e autorizada para o Destinatário (Parte II)

Código-Fonte janeiro 26th, 2009

Vimos no artigo anterior como gerar o arquivo da NF-e compartilhada à partir do XML da NF-e assinada e do XML do protocolo de autorização da NF-e. Nesse artigo vamos demonstrar o uso do componente Indy do Delphi para enviar o arquivo da NF-e compartilhada via E-mail; complentando-se assim, o processo de compartilhamento da NF-e com o destinatário:

Vamos partir do código anterior e implementar os recursos de envio do e-mail para o destinatário. Nesse exemplo, fazemos uso do componente Indy também disponível nas distribuições do Delphi.

Adicione os seguintes componentes no seu programa: idSMTP e idMessage; em seguida escreva o código abaixo:

Código-fonte para comandar o envio do e-mail da NF-e compartilhada para o destinatário:

begin
    // configura servidor smtp
    idSMTP1.Host := 'smtp.empresaxyz.com.br';
    idSMTP1.Username := 'controlenfe@empresaxyz.com.br';
    idSMTP1.Password := 'xxxxxxxx';
 
    // configurando mensagem
    // e-mail da sua loja
    idmessage1.ContentType := 'text/html';
    idmessage1.from.address := 'controlenfe@empresazyz.com.br';
    // e-mail destinatario
    idmessage1.recipients.emailaddresses := 'contato@empresaxyz.com.br';
    // Assunto (titulo E-mail)
    idmessage1.subject := 'Empresa XYZ (Envio automático NF-e) '+DateTimeToStr(now);
 
    // Corpo da Mensagem (use aqui um HTML ou texto que deseja enviar
    // juntamente com a mensagem.
    idmessage1.body.Add(
    'Prezado Cliente,'+
    'Obrigado por comprar na Empresa XYZ. Estamos encaminhando esse e-mail contendo'+
    ' em anexo, o arquivo eletrônico da sua Nota Fiscal de Compra; de acordo com '+
    ' o "Manual de Integração do Contribuinte" da Nota Fiscal Eletrônica. '+
    'Sds,'+
    'A administração!'+
    '
'+
    'PS. Caso tenha alguma dúvida favor entrar em contato conosco '+
    'pelos fones: xx xxx xxxxx ou E-mail: xxxxxx@xxxxx.xx.x'+
    ';
'+
    '<strong>Favor não responder!</strong>. Esse e-mail foi enviado automáticamente pelo'+
    ' nosso servidor após registro da autorização de uso da NF-e para a vossa '+
    'Empresa.'
    );
    // ou carregue uma mensagem pré-definida em um arquivo
    //idmessage1.Body.LoadFromFile('mensageNFe_destinatario.html');
 
    // anexa o XML da NFe compartillhada no e-mail
    TIdAttachment.create(idmessage1.MessageParts,
    TFileName('c:\nfe_arquivos\compartilhadas\procNFE.xml'));
 
    // conecta com o servidor SMTP
    idSMTP1.connect;
    try
    // Envia o e-mail
    idSMTP1.send(idmessage1);
    finally
        idSMTP1.Disconnect;
    end;
end;

Com isso concluímos o artigo sobre a Nota Fiscal Eletrônica Compartilhada, na primeira parte (parte I) geramos o arquivo da NF-e compartilhada à partir dos arquivos XML da NF-e assinada e do XML do recibo de autorização da NF-e. Nesse ultimo artigo vimos como enviar esse arquivo via e-mail para o destinatário.

Espero que essas informações sejam úteis para vcs e que eliminem com isso, algumas horas de pesquisa e trabalho.

Tags: , , , ,

Distribuição da NF-e autorizada para o Destinatário (Parte I)

Código-Fonte janeiro 23rd, 2009

Atualmente, a SEFAZ não está verificando a distribuição das NF-e para o destinatário; mas com o decorrer do processo esse recurso (previsto no projeto) será exigido em breve (conforme “nota” no próprio manual). Em resumo, o arquivo eletrônico da NF-e, quando autorizada, deverá ser enviado pelo emitente para o destinatário de acordo com a cláusula décima do AJUSTE SINIEF 07/05.

Clique para continuar lendo “Distribuição da NF-e autorizada para o Destinatário (Parte I)”

Tags: , ,

Armazenando os dados do Certificado Digital Selecionado

Código-Fonte, Delphi dezembro 22nd, 2008

Sempre que necessário assinar ou enviar dados para o serviço da NF-e; é necessário informar o nome do certificado digital; é interessante, então, armazenar esses dados de forma que sempre que houver necessidade de usar o certificado vc possa informar os dados armazenados evitando assim que tenha que selecionar o mesmo à cada comando;

Como fazer isso então? A primeira coisa a fazer é inserir uma opção de seleção do certificado na sua aplicação e nela, um evento onde após a seleção do certificado onde vc. guarda em um arquivo esses dados; veja abaixo o código que permite armazenar os dados do certificado (usando recursos da NFe_UTIL.dll):

Ex.01: Salvando dados do Certificado Digital Selecionado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var Util:NFe_Util_Interface;
    i:integer;
    F: TextFile;
begin
  Util := CoUtil.Create;
  Try
  nomeCertificado := '';
  i:= Util.PegaNomeCertificado(nomeCertificado, msg);
 
  if i > 1 then
      MessageDlg( 'Ocorreu uma falha no acesso ao repositório de certificados digitais...'+#13+#13+msg, mtInformation, [mbOk], 0)
  else
      begin
        AssignFile(F, 'CertificadoDigital.res');
        Rewrite(F);
        Write(F,nomeCertificado);
        CloseFile(F);
      end;
  finally
     Util := nil;
  end;

Ex.02 Recuperando dados do certificado digital selecionado

1
2
3
4
5
6
7
8
9
10
11
var F: TextFile;
    nomecertificado: string;
begin
  if FileExists('CertificadoDigital.res') then
  begin
     AssignFile(F, 'CertificadoDigital.res');
     Reset(F);
     Readln(F,nomecertificado); // a variável nomecertificado vai receber os dados armazenados.
     CloseFile(F);
  end;
end;

Com isso, problema resolvido, após ler os dados do certificado na variável “nomecertificado” vc pode passar essa informação, por exemplo, para assinar o XML como abaixo (o exemplo usa uma função da NFE_UTIL.dll):

          i:= Util.Assinar(xmlNaoAssinado, 'infNFe', nomecertificado, 
               xmlAssinado, mensagem);
          // a variável "nomercertificado" já contendo os dados do certificado 
          // conforme obtido no exemplo 02.

Tags: ,

Dados Retorno Consulta Recibo e Status Serviço NF-e com TXMLDocument

Código-Fonte, Sem categoria dezembro 11th, 2008

Muitos ainda têm dúvida de como ler o XML usando o TXMLDocument; publiquei abaixo mais dois códigos exemplo, o primeiro para ler o arquivo de retorno da consulta de Status do Serviço da NF-e e o segundo para ler o arquivo de retorno da consulta do recibo de envio do lote da NF-e. Reparem que são poucas modificações em relação aos exemplos anteriores, usem esses exemplos também para entender melhor como usar o TXMLDocument e ganhe maior liberdade para trabalhar com qualquer arquivo XML.

Clique para continuar lendo “Dados Retorno Consulta Recibo e Status Serviço NF-e com TXMLDocument”

Tags: ,

Usando TXMLDocument para Ler o Recibo de Envio da NF-e

Código-Fonte dezembro 1st, 2008

No exemplo abaixo usamos o TXMLDocument do Delphi para ler os dados do XML retorno de retorno de envio do lote das NF-e:

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
var vXMLDoc: TXMLDocument;
    NodeRec: IXMLNode;
    recibo, datahora: WideString;
begin
  vXMLDoc := TXMLDocument.Create(self);
  vXMLDoc.LoadFromFile('0000000000234-rec.xml'); //Le Arquivo Recibo XML');
 
  // Campo memo para o exemplo
  Memo.lines.Add( '-------------------------------------------------');
  Memo.lines.Add( VXMLDoc.XML.Text +#13+#13 );
 
  // Prepara para ler os dados da tag "infRec"
  NodeRec := vXMLDoc.DocumentElement.ChildNodes.FindNode('infRec');
  // Lendo os campos da tag infRec
  recibo := NodeRec.ChildNodes['nRec'].text;     // posso ler assim
  datahora := NodeRec.ChildNodes['dhRecbto'].text;
 
  // adiciona os dados no Memo (apenas exemplo)
  if recibo <> '' then
      begin
      Memo.Lines.Add('-----------------------------------------------');
      Memo.Lines.Add( recibo+' ---- '+datahora );
      end;
 
end;

Tags: , ,

Dados x XML, como começar? (segunda parte)

Código-Fonte, Delphi outubro 17th, 2008

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
60
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;
</det></prod></det>

Tags: ,