ACBrNF-e: Componente OpenSource para Nota Fiscal Eletrônica
ACBrNFe: Componente OpenSource para Nota Fiscal Eletrônica
Componente OpenSource para Nota Fiscal Eletrônica
O componente ACBrNFe é um projeto para gerar, validar, transmitir, receber as respostas dos WebServices da Receita e imprimir o DANFe. Este componente faz parte do Projeto ACBr e também é gratuito.
O componente possui duas versões - ACBr_NFe_CAPICOM e ACBr_NFe_OpenSSL. As principais diferenças entre as versões são:
ACBr_NFe_CAPICOM: Usa as DLLs da Microsfot CAPICOM (conexão segura) e MSXML (Assinatura e validação do XML) - Apenas funciona no Delphi e Windows. Funciona com certificados do tipo A1 e A3.
ACBr_NFe_OpenSSL: Usa Projetos OpenSource: Synapse+OpenSSL (conexão segura) e LibXml2 + XmlSEC (Assinatura e validação do XML) - Atualmente compatível com Delphi, mas será compatível com Lazarus, Kylix e com Linux. Funciona apenas com certificados do tipo A1.
Obtendo o Componente
O melhor aplicativo a ser usado é o TortoiseSVN, pois ele se integra com o Windows Explorer.
Para sempre ter a última versão do componente, será necessário baixar o componente via SVN.
Baixe o TortoiseSVN:
Depois de Instalado, crie um diretório para o baixar o ACBr.
Usando o Windows Explorer, clique com o botao direto sobre o diretorio e escolha: SVN Checkout.
Em URL of repository digite: https://acbr.svn.sourceforge.net/svnroot/acbr/trunk
Basta clicar em OK e o Tortoise irá criar a Estrutura de diretótorios do ACBr atualizado exatamente como utilizado pelos desenvolvedores.
Se você já utilizava algum componente do ACBr, veja neste link as mudanças na estrutura das pastas do ACBr
Versão OpenSSL
Copie a DLL ACBr\ACBrNFe\DLLs\iconv.dll e as DLLs da pasta ACBr\ACBrNFe\DLLs\OpenSSL\ (libeay32.dll, libxml2.dll, libxmlsec.dll, libxmlsec-openssl.dll, libxslt.dll, ssleay32.dll e zlib1.dll) para a pasta Windows\System32.
Adicione ao Library Path do Delphi as pastas ACBr\ACBrNFe e ACBr\ACBrComum Na IDE do Delphi acione "Tools, Enviroment Options" selecione a guia "Library", clique no botão elíptico de "Library Path", clique no botão elíptico à frente da caixa de texto, localize a pasta ACBr\Source\ACBrNFe no diretório de instalação da Biblioteca, clique em "OK", e em "Add". Repita o mesmo processo com a pasta ACBr\ACBrComum.
Caso tenha o pacote ACBr_CLX ou ACBr_VCL já instalado no Delphi, verifique se na pasta ACBr\Source\Pascal existe alguma unit da synapse (blcksock.*, syn*.* ), e caso encontre apague estas units. Abra o pacote do ACBr (ACBr_CLX.dpk ou ACBr_VCL.dpk) e na IDE do Delphi clique em "Project, Build ACBr", Volte ao pacote e clique em compile.
Na IDE do Delphi, clique em "File - Close All"
Abra o arquivo ACBr_NFe_OpenSSL.dpk, clique em compile e ao ser solicitado para adicionar o pacote vACBr_CLX ou ACBr_VCL
clique em Cancel. Clique em Install e ao ser solicitado para adicionar o pacote ACBr_CLX ou ACBr_VCL clique em Cancel
Versão CAPICOM
Copie as DLLs da pasta ACBr\ACBrNFe\DLLs\Capicom (capicom.dll, msxml5.dll e msxml5r.dll) para a pasta Windows\System32.
Vá ao botão Iniciar do Windows - Executar e execute os seguinte comandos: regsvr32 capicom.dll/s e regsvr32 msxml5.dll/s.
Adicione ao Library Path do Delphi a pasta ACBr\ACBrNFe, ACBr\ACBrNFe\win32api e caso utilize o pacote ACBr_CLX ou ACBr_VCL adicione também a pasta ACBr\ACBrComum.
Na IDE do Delphi acione "Tools, Enviroment Options" selecione a guia "Library", clique no botão elíptico de "Library Path", clique no botão elíptico à frente da caixa de texto, localize a pasta ACBr\ACBrNFe no diretório de instalação da Biblioteca, clique em "OK", e em "Add". Repita o mesmo processo com a pasta caso utilize o ACBr_CLX ou ACBr_VCL ACBr\ACBrComum.
Click em "OK" para finalizar.
Abra o arquivo ACBr_NFe_CAPICOM.dpk, clique em compile e depois em Install
Diferença entre a versão CAPICOM e OpenSSL
A principal diferença entre as duas versões, é que a versão CAPICOM permite o uso de certificados do tipo A1 e A3, enquanto a versão OpenSLL permite apenas o uso de certificados A1. Saiba mais.
Com a versão CAPICOM, o certificado precisará estar instalado no Windows. No componente precisaremos configurar o número de série do certificado. Para descobrir o número de série do certificado usado na versão CAPICOM, abra o Internet Explorer, vá ao menu Ferramentas, Opções da Internet, clique na aba Conteúdo, Certificados, clique duas vezes sobre o certificado, clique na aba Detalhes e encontre o campo Número de Série (Thumbprint). Copie o valor para o bloco de notas, e tire todos os espaços e deixe todas as letras em maiúsculo. Este valor deverá ser informado na propriedade NumeroSerie do componente.
Com a versão OpenSSL, será usado um arquivo PFX como certificado. Quando o certificado é adquirido, em alguns casos ele é instalado no Windows e em outros é recebido um arquivo PFX. Caso o certificado tenha sido instalado no Windows, siga as instruções a seguir: Abra o Internet Explorer, vá ao menu Ferramentas, Opções da Internet, clique na aba Conteúdo, Certificados, escolha o certificado desejado – clique em exportar, avançar, selecione a opção "Sim, exportar a chave particular", clique em avançar até ser solicitada uma senha para o arquivo e defina uma senha.
Esta senha será usada para instalar em o certificado em outras máquinas e também no componente. Clique em avançar até a conclusão da exportação. O path deste arquivo PFX deverá ser informado na propriedade Certificado do componente, e a senha usada para criara o arquivo, na propriedade Senha. No versão OpenSSL, também deverá ser informado as configurações do proxy da rede, caso exista. Na versão Capicom, as configurações do proxy são puxadas do Internet Explorer.
Usando o componente ACBrNFe
Baixe o demo do componente e veja as principais funções do componente. Agora, irei detalhar as principais funções do ACBrNFe.
Após instalar o componente vamos conhecer os principais comandos do ACBrNFe.
ACBrNFe1.WebServices.StatusServico.Executar; - Este comando, retorna True quando o serviço está em operação. Após este comando, é possível acessar a propriedade ACBrNFe1.WebServices.StatusServico.Msg para ver a mensagem de retorno do WebService.
ShowMessage(ACBrNFe1.WebServices.StatusServico.Msg)
Identificacao.NaturezaOperacao  := 'VENDA PRODUCAO DO ESTAB.';
Identificacao.Codigo            := 1;
Identificacao.Numero          := 1;
Identificacao.Serie              := 1;
Identificacao.DataEmissao  := Date;
Identificacao.DataSaida       := Date;
Identificacao.Tipo                := tSaida;
Identificacao.FormaPagamento   := pgAVista;
Emitente.CNPJ                      := '00000000000000';
Emitente.IE                          := '123456789012';
Emitente.Nome.RazaoSocial  := 'Razao Social Emitente';
Emitente.Nome.Fantasia       := 'Nome Fantasia Emitente';
Emitente.Endereco.Fone       := '(15) 3259XXXX';
Emitente.Endereco.CEP         := '18270000';
Emitente.Endereco.Logradouro      := 'Rua Onze de Agosto';
Emitente.Endereco.Numero           := '3202';
Emitente.Endereco.Complemento  := '';
Emitente.Endereco.Bairro              := 'Centro';
Emitente.Endereco.Cidade.Codigo   := 3554003;
Emitente.Endereco.UF                  := 'SP';
Destinatario.CNPJCPF                   := '00000000000137';
Destinatario.Endereco.CEP           := '18270410';
Destinatario.Endereco.Logradouro      := 'Praça Anita Costa';
Destinatario.Endereco.Numero           := '0034';
Destinatario.Endereco.Complemento  := '';
Destinatario.Endereco.Bairro              := 'Centro';
Destinatario.Endereco.Cidade.Codigo  := 3554003;
Destinatario.Endereco.UF               := 'SP';
Destinatario.Endereco.Fone            := '1532599600';
Destinatario.IE                              := '000000000000';
Destinatario.NomeRazao                := 'D.J. COM. E LOCAÇÃO DE SOFTWARES LTDA - ME';
CFOP          := 5101;
Codigo        := '67';
Descricao     := 'ALHO 400 G';
Quantidade    := 100;
Unidade       := 'KG';
ValorTotal    := 100;
ICMS00.Aliquota  := 18;
ICMS00.Valor     := 180;
ValoresTotais.BaseICMS     := 1000;
ValoresTotais.ValorICMS    := 180;
ValoresTotais.ValorNota    := 1000;
Curso: Como manipular XML em Delphi
Com o comando acima, iremos salvar a primeira Nota Fiscal na pasta do programa, com o nome que começará pela chave da NFe e terminará com NFe.xml. Caso tenha adicionado mais de uma nota fiscal, repita o comando ACBrNFe1.NotasFiscais.Items[0].XML.SaveToFile mudando o número do item (Items[0], Items[1], Items[2], etc.)