Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 14 de Janeiro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
100 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Transmissão de Arquivos NF-e - Abordagem prática transmissaoNFe32dll
Publicado por ActiveDelphi : Quarta, Maio 21, 2008 - 12:00 GMT-3 (4903 leituras)
Comentários 4 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Victory Fernandes No último artigo da série abordamos e exemplificamos os aspectos envolvidos na assinatura de arquivos de Nota Fiscal Eletrônica (NF-e).
A NF-e é um documento emitido e armazenado eletronicamente, com validade jurídica garantida por processo de assinatura digital. O principal objetivo da implantação desta nova modalidade é o acompanhamento em tempo real das operações comercias pelo Fisco e a substituição do modelo atual de emissão de documentos fiscais em papel, de forma a simplificar uma série de obrigações do contribuinte.

Maiores informações podem ser obtidas através do portal nacional em www.nfe.fazenda.gov.br
Seguindo a linha de publicações voltadas às soluções para NF-e, damos continuidade a esta série, desta vez com foco no processo de transmissão via WebServices dos arquivos assinados digitalmente, de onde partimos para demonstrar de forma simples e prática como é possível transmitir, a partir da sua aplicação, os arquivos XML gerados e assinados. Para realizar o processo de transmissão utilizamos a assinaturaNFe32dll.dll.
 

Gerando uma NF-e para testes de assinatura
Para testar a assinatura digital em uma NF-e de teste, utilizamos o aplicativo disponibilizado no site http://www.igara.com.br/produto.php?cod_produto=114. O aplicativo mostrado da Figura 01 é um demo desenvolvido em Delphi, totalmente funcional que permite a geração de NF-e a partir de informações digitadas pelo usuário em campos de texto que seguem o layout específico vigente.
Após abrir o aplicativo, clicamos no botão “Nova NF-e” e depois no botão “Salvar NF-e”. Por fim selecionamos o diretório onde desejamos salvar o arquivo .XML gerado. O aplicativo sugere um nome para o arquivo gerado e este nome não deve ser alterado, pois segue padrão de nomenclatura específico exigido com base no conteúdo da NF-e em questão.
 

Figura 01: Aplicativo em Delphi para geração de NF-e


O arquivo gerado pode ser visualizado no Internet Explorer ou em qualquer outro browser de internet com suporte a XML, e o resultado é conforme mostrado na Figura 02.
Neste artigo não entraremos em detalhes sobre o processo de geração da NF-e, pois este será o tema de outros artigos que virão.
 

Figura 02: Arquivo .xml de NF-e visualizado no Internet Explorer


Até o momento, o arquivo gerado não tem valor jurídico, pois ainda não foi assinado de forma que o emissor possa certificar a validade das informações fornecidas, bem como não há nada que garanta que este documento não foi alterado por terceiros sem o conhecimento prévio do emitente.
Para tanto, é preciso assinar este documento. Em edições anteriores demonstramos como utilizar o aplicativo de assinatura de NF-e disponibilizado para download gratuito no portal oficial da NF-e em www.nfe.fazenda.gov.br. No entanto, neste artigo o objetivo é demonstrar como assinar digitalmente os arquivos a partir da sua própria aplicação, e para isso utilizaremos a assinaturaNFe32dll.dll.

WebService
WebService é uma tecnologia utilizada para facilitar a comunicação e integração de sistemas distintos, tornando-os compatíveis. O que o WebService propõe é uma integração compreensível, reutilizável e padronizada. Para tanto, utiliza-se, como base de construção, o padrão XML e, para encapsulamento, o protocolo SOAP (Simple Object Access Protocol). Seu transporte normalmente é feito via protocolo HTTP.
O WebService possibilita que dois aplicativos, independente de suas linguagens, utilizem uma padronização para enviar e receber dados de forma transparente.
No projeto em questão, realizamos o envio de arquivos do padrão da NF-e para o sistema servidor da Secretaria da Fazenda que está preparado para responder ao receber um arquivo XML de requisição, formatado num padrão específico, detalhado na documentação disponível no site oficial do Governo.
 

Transmissão de NFe com uso da transmissaoNFe32dll.dll
Para demonstrar como é fácil transmitir uma NFe, utilizaremos a transmissaoNFe32dll.dll e o aplicativo demo que acompanha a, que mesma pode ser obtido a partir do site http://www.igara.com.br/produto.php?cod_produto=114.
Após o download, executamos o aplicativo e clicamos no botão “1. Selecione o arquivo XML a ser transmitido”. Um componente da classe TOpenDialog é utilizado para apresentar ao usuário uma caixa de seleção de arquivos, onde o mesmo indicará o arquivo .XML a ser transmitido. O código do evento OnClick do botão é conforme mostrado a seguir.
 

  procedure TForm1.Button12Click(Sender: TObject);
  begin
    //Diretório inicial será o diretório onde a aplicação está executando
    opendialog1.InitialDir := ExtractFileDir(application.ExeName);
 
    //Abre caixa de seleção de arquivos
    if OpenDialog1.Execute then
    begin
      xml_filename := OpenDialog1.FileName;

      //Apresenta XML escolhido em modo browser
      WebBrowser1.Navigate(xml_filename);

      //Apresenta XML escolhido em modo texto
      memo1.Lines.LoadFromFile(xml_filename);
    end;
  end;

 

A Figura 03 apresenta o resultado da execução de tal procedimento, onde após a seleção do arquivo .XML, o mesmo é carregado em componentes da classe TMemo e TWebBrowser, conforme mostrado no lado esquerdo da Figura 03.

 

Figura 03: Aplicativo demo de transmissão de NF-e. Seleção da NF-e a ser transmitida.


Uma vez carregado o arquivo desejado, selecione o tipo de transação que será executada com o servidor. Para cada tipo de transação disponível existe uma opção no componente da classe TRadioGroup. Os Portais das Secretarias de Fazenda Estaduais disponibilizam os seguintes serviços:

    • Recepção de NF-e;
        o Recepção de Lote;
        o Consulta Processamento de Lote;
    • Cancelamento de NF-e;
    • Inutilização de numeração de NF-e;
    • Consulta da situação atual da NF-e;
    • Consulta do status do serviço.

Os serviços disponibilizados seguem a seguinte sistemática, conforme descrito na documentação oficial de NF-e:
    • Para cada serviço oferecido existe um WebService específico. O fluxo de comunicação é sempre iniciado pelo aplicativo do contribuinte através do envio de uma mensagem ao WebService com a solicitação do serviço desejado.
    • O WebService sempre devolve uma mensagem de resposta confirmando o recebimento da solicitação de serviço ao aplicativo do contribuinte na mesma conexão.
    • A solicitação de serviço poderá ser atendida na mesma conexão ou ser armazenada em filas de processamento nos serviços mais críticos para um melhor aproveitamento dos recursos de comunicação e de processamento das Secretarias de Fazenda Estaduais.
    • Os serviços podem ser síncronos ou assíncronos em função da forma de processamento da solicitação de serviços:
        o Serviços síncronos – o processamento da solicitação de serviço é concluído na mesma conexão, com a devolução de uma mensagem com o resultado do processamento do serviço solicitado;
        o Serviços assíncronos – o processamento da solicitação de serviço não é concluído na mesma conexão, havendo a devolução de uma mensagem de resposta com um recibo que apenas confirma o recebimento da solicitação de serviço. O aplicativo do contribuinte deverá realizar uma nova conexão para consultar o resultado do processamento do serviço solicitado anteriormente.

Após selecionar o serviço desejado, basta selecionar a UF para onde o arquivo será enviado e clicar no botão “5. Transmitir XML” para dar início ao processo de transmissão. O código executado no evento OnClick do botão é conforme segue.

O procedimento executa uma chamada a uma das funções de transmissão contidas na dll, passando como parâmetro do tipo PChar o conteúdo do arquivo .XML carregado anteriormente. O resultado da chamada da função, contendo o retorno da transmissão, é atribuído a um segundo componente da classe TMemo.
 

  procedure TForm1.Button1Click(Sender: TObject);
  var
    MyiUF, MyiTipo: Integer;
    MysXML: PChar;
  begin
    try
      //Atribue valores das variáveis q serão passadas como parâmetro durante a transmissão
      MyiUF := combobox1.ItemIndex;
      MyiTipo := combobox2.ItemIndex;
      MysXML := PChar(memo1.Lines.Text);

      //Realiza a chamada da função da dll de acordo com o tipo de transação escolhida
      case radiogroup1.ItemIndex of
        0: memo2.Lines.Text := fncNfeRecepcao (MysXML, MyiUF, MyiTipo);
        1: memo2.Lines.Text := fncCadConsultaCadastro(MysXML, MyiUF, MyiTipo);
        2: memo2.Lines.Text := fncNfeCancelamento (MysXML, MyiUF, MyiTipo);
        3: memo2.Lines.Text := fncNfeConsulta (MysXML, MyiUF, MyiTipo);
        4: memo2.Lines.Text := fncNfeInutilizacao (MysXML, MyiUF, MyiTipo);
        5: memo2.Lines.Text := fncNfeRetRecepcao (MysXML, MyiUF, MyiTipo);
        6: memo2.Lines.Text := fncNfeStatusServico (MysXML, MyiUF, MyiTipo);
      end;
    except
      showmessage('ATENÇAO: Erro durante a transmissão');
      exit;
    end;

    MysXML := '';

    showmessage('XML transmitido com sucesso. Verifique o retorno para informações de   retorno');
  end;

 

No momento da execução do código apresentado, surgirá uma tela para seleção do certificado digital a ser utilizado no processo de assinatura, conforme mostrado na Figura 04. Importante ressaltar que nesta tela é possível verificar as informações contidas no certificado, de forma a diferenciar os certificados entre si, para os casos de mais um certificado disponível em uma mesma máquina.

 

Figura 04: Seleção de certificado a ser utilizado no processo de assinatura.


Após selecionar o certificado desejado, clique no botão “Ok”. Surgirá então a tela apresentada na Figura 05 a seguir. Neste momento, para finalizar o processo e efetivamente assinar o documento é preciso fornecer a senha de registro do certificado digital selecionado. Conforme abordado em artigo anterior, no momento da aquisição do token, uma senha de acesso deve ser fornecida, sendo pessoal e intransferível, onde somente através dela é possível se utilizar das funcionalidades do certificado.
 

Figura 05: Confirmação de senha para uso do certificado.


Após preencher a senha e clicar no botão “Ok”, o arquivo .XML selecionado anteriormente será transmitido e o retorno do WebService para a transmissão do XML será apresentado conforme demonstrado na Figura 06 a seguir.
 

Figura 06: Aplicativo demo de transmissão de NF-e. Retorno da transmissão da NF-e.


Agora basta clicar no botão “7. Salvar XML de Retorno” para que o procedimento de OnClick do botão execute a chamada a um componente da classe TSaveDialog, utilizado para apresentar ao usuário uma caixa de seleção de arquivos, onde o mesmo indicará o local em que arquivo .XML de retorno deve ser salvo. O código do evento OnClick do botão é conforme mostrado a seguir:
 

  procedure TForm1.Button2Click(Sender: TObject);
  begin
    try
      //Diretório inicial será o diretório onde a aplicação está executando
      savedialog1.InitialDir := ExtractFileDir(application.ExeName);
 
      //Concatena nome para arquivo de retorno
      SaveDialog1.FileName := 'retorno_' + combobox1.Text + '_' + ExtractFileName(xml_filename);

      //Salva arquivo de retorno
      if savedialog1.Execute then
      begin
        memo2.Lines.SaveToFile(savedialog1.filename);
      end;
    except
      showmessage('ATENÇAO: Erro durante o salvamento do retorno');
    exit;
    end;

    showmessage('Arquivo de retorno salvo com sucesso');
  end;

 

Qual o código necessário para chamar as funções de transmissão da dll e executar esta aplicação? Primeiramente é preciso fazer a declaração das funções da dll conforme mostrado a seguir

 

  var
    Form1: TForm1;
    nfe_filename: String;

  implementation

  {$R *.dfm}
  //Declaração de Funções disponiveis na dll
  Function fncNfeRecepcao(sXML: PChar; iUF: Integer; iTipo: integer): PChar; StdCall; external 'transmissaoNFe32dll.dll';
  Function fncCadConsultaCadastro(sXML: PChar; iUF: Integer; iTipo: integer): PChar; StdCall; external 'transmissaoNFe32dll.dll';
  Function fncNfeCancelamento(sXML: PChar; iUF: Integer; iTipo: integer): PChar; StdCall; external 'transmissaoNFe32dll.dll';
  Function fncNfeConsulta(sXML : PChar; iUF: Integer; iTipo: integer): PChar; StdCall; external 'transmissaoNFe32dll.dll';
  Function fncNfeInutilizacao(sXML: PChar; iUF: Integer; iTipo: integer): PChar; StdCall; external 'transmissaoNFe32dll.dll';
  Function fncNfeRetRecepcao(sXML: PChar; iUF: Integer; iTipo: integer): PChar; StdCall; external 'transmissaoNFe32dll.dll';
  Function fncNfeStatusServico(sXML: PChar; iUF: Integer; iTipo: integer): PChar; StdCall; external 'transmissaoNFe32dll.dll';

 

Uma vez feita a declaração, é preciso realizar uma única chamada à função de transmissão do serviço desejado. O retorno da função conterá a resposta do WebService para o arquivo transmitido. Para o caso de transmissão de um arquivo de Lote de Nota Fiscal Eletrônica, o código a seguir demonstra da simplicidade da chamada realizada pelo aplicativo.

 

  memo2.Lines.Text := fncNfeRecepcao(MysXML, MyiUF, MyiTipo);

 

Note que não foi preciso ter nenhum conhecimento aprofundado sobre como se dá o processo de transmissão, e dessa forma abstrai-se completamente a camada relativa às funções necessárias e tecnologias utilizadas. Com a chamada de uma única função, o arquivo desejado já está transmitido!
 

Sobre a transmissaoNFe32dll.dll
A transmissaoNFe32dll.dll é um produto desenvolvido para facilitar e agilizar o processo de transmissão de arquivos de Nota Fiscal Eletrônica. O objetivo é disponibilizar uma solução simples e acessível a todos os desenvolvedores onde, através da chamada de uma única função para cada serviço, seja possível indicar o conteúdo a ser transmitido, abstraindo a complexidade desta camada, que envolve conhecimentos aprofundados acerca de funções e tecnologias de comunicação via WebService.
Sendo assim a dll contém uma função para cada serviço que recebe como parâmetro uma variável PChar com o conteúdo a ser transmitido e retorna a resposta do WebService. Mais simples que isso, impossível!
O uso da dll permite ao desenvolvedor abstrair completamente a camada de transmissão do arquivo magnético, dispensando o estudo e aprofundamento teórico relativo às ferramentas e funções complexas aplicadas no processo.

O produto é uma solução pioneira no mercado e dá ao desenvolvedor total flexibilidade para implementar recursos de Nota Fiscal Eletrônica em suas aplicações, adequando seus sistemas às obrigações exigidas pelo Fisco.
 

Maiores informações, bem como o download do demo de uso do produto e da versão de avaliação 100% funcional da transmissaoNFe32dll.dll podem ser feitos pelo site http://www.igara.com.br/produto.php?cod_produto=114

Conclusão
Com este artigo abordamos conceitos gerais sobre transmissão de arquivos de NF-e, e vimos como é fácil emitir e transmitir tais documentos. A NF-e já é uma realidade, e muito em breve todos serão obrigados a adotar este novo formato. Mesmo as empresas não obrigadas, estão interessadas em ter seus sistemas atualizados para trabalhar nesta nova modalidade de emissão de documentos fiscais.
Demos continuidade à nossa série de artigos sobre NFe, e desta vez, demonstramos como realizar de forma simples e prática a transmissão a partir da sua aplicação, com o uso da transmissaoNFe32dll.dll. De agora em diante, transmitir uma Nota Fiscal Eletrônica é questão apenas de chamar uma função e indicar o conteúdo a ser transmitido, simples assim!

Victory Fernandes é Professor do Departamento de Engenharia da UNIFACS, Engenheiro Mestrando em Redes de Computadores, e desenvolvedor sócio da TKS Software - Soluções de Automação e Softwares Dedicados. Pode ser contatado em victory@igara.com.br, ou através dos sites www.igara.com.br  – www.igara.com.br/victory



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: unabomber (progman@terra.com.br) : Set 25, 2009 - 11:09
(Informações sobre o membro | Enviar uma mensagem)
O artigo é até bom, mas basicamente é propaganda do seu produto...


por: thiagocandido1910@hotmaio (suporte03@fbainformatica.com.br) : Mar 11, 2010 - 02:25
(Informações sobre o membro | Enviar uma mensagem) http://
Boa Tarde.

gostaria de saber onde encontrar um tutorial (fácil, pois sou iniciante em delphi)com os procedimentos para cancelar uma NFe

Alguem pode me ajudar...
obrigado.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados