Nota Fiscal Eletrônica - O Início

Como a partir de 01 de Abril a Nota Fiscal não será mais aquela de papel, começaram a algum tempo a emissão da eletrônica e consequentemente, nós programadores, ficamos responsáveis de realizar a integração dos diversos sistemas à esse novo tipo de implantação. Não diferente de você também fui obrigado a adentrar nesse mundo. Nunca li tanto de XML e sobre Certificado Digital na minha vida!

Por ventura já existiam alguns colegas que já realizaram grande parte do trabalho disponibilizando códigos e bibliotecas nas mais variadas linguagens que nos ajudaram a realizar esse feitio. Um deles que testei é o UniNFe. Muito boa a implementação, além de ser OpenSource com código em ASP.NET. Bem fácil de configurar e já faz tudo: assina seu XML, realiza o envio e obtém o retorno. Fica apenas o trabalho do usuário gerar o XML de envio e ler o de retorno.

Quando utilizei, pensei: "Pronto! Problemas resolvidos...". O que era bom, ficou para trás. O UniNFe serve para emissão de notas fiscais cujo o contribuinte possua Inscrição Estadual. Para empresas que não possuem IE, apenas a Inscrição Municipal (IM), devem atrelar-se à implementação da SEFAZ do município cuja implementação difere, na maioria dos aspectos, dessa implementação. Contudo, por ser OpenSource, pude aproveitar algumas classes dele para gerar as minhas. Constantemente estou em contato com a secretaria de NFS-e em Salvador para resolução de meus problemas (e problemas) e tentar terminar tal solução.

Nos próximos posts, logo que eu for resolvendo/terminando algumas funcionalidades, irei disponilizando trechos de classes/métodos para geração da NF-e. Abaixo segue uma relação de links que podem ajudá-los a adiantarem algum código:
  1. Nota Fiscal Eletrônica Nacional: http://nf-eletronica.com/blog/
  2. Linha de Código - Nota Fiscal Eletrônica - Geração, Assinatura e Transmissão: http://www.linhadecodigo.com.br/Artigo.aspx?id=1814
Mais materias e links são facilmente encontrados na net, dependendo do que for realmente fazer. Não se esqueça de, antes de começar a implementar, leia o Manual da Integração para onde deverá prestar conta: Muncípio ou Estado.

Inserindo Imagem em DLL

A alguns dias atrás, comecei a desenvolver um Framework para que eu pudesse incorporar em minhas aplicações e que pudesse reaproveitá-la constantemente. Nela contém classes de conexão, criação de objetos dinamicamente e imagens. Estava quase pronto quando me deparei com a parte das imagens. Eu queria que as imagens ficassem na DLL e quando eu fosse atualizar uma aplicação, eu só substituiria a DLL e não esquecesse dos arquivos.

Óbvio que comecei a ler alguns materiais na Internet para saber qual o melhor método para desenvolver. Por mais que eu lia, mais eu achava complicado. E outros, quanto eu mais fazia mais eu achava que estava errado. Até que então consegui...

Você pode utilizar de duas formas: chamando dentro da própria DLL ou através de uma página ASPX para, ao final, gerar uma imagem. Irei explicar como pois é praticamente a mesma coisa...

No Visual Studio, abra seu projeto (ele deve ser um Class Library). Clique com o direito sobre a Solução na aba do Solution Explorer e escolha a opção Properties. Irá abrir o conjunto de propriedades vigentes da DLL. Entre na aba Resources e notará a seguinte tela:


Nesse caso ele diz que não, por padrão, nenhum recurso. Clique sobre o link para adicionarmos um. Agora, vá em Add Resource, New Image e escolha um dos tipos de imagem suportado ou escolha Add Existing File... para selecionar uma imagem existente no disco.


Se escolhido a primeira opção terá que dar um nome que o identifique para que possamos invocá-lo posteriormente e terá que desenhar ou incorporar uma imagem no editor que irá abrir. Caso contrário, a segunda opção é a mais rápida pois iremos apenas selecionar uma imagem que ela já será incoporada.

Logo após incorporá-la nos recursos, verá, através do Solution Explorer, que foi criada uma pasta chamada Resources contendo a imagem desejada. Agora iremos permitir também que a imagem seja "chamada" ou, melhor dizendo, seja embedded. Para isso, clique com o direito sobre a imagem e entre em Properties. No Build Action, escolha a propriedade Embedded Resource.

Agora, vá na pasta Properties da solução e abra o arquivo AssemblyInfo.cs. Adicione o namespace:

using System.Web.UI;

E adicione a seguinte linha no final (pode ser depois de todas que tiverem):

[assembly: WebResource("Framework.Resources.Calendario.png", "image/png")]

Sendo que é constituído por:

  • Framework: é o namespace que compõe sua solução, no meu caso estava utilizando o namespace Framework;
  • Resources: indica o nome da pasta onde está o recurso;
  • Imagem

Assim a imagem já está incorporada à DLL e prontra para uso. Para invocarmos, conforme descrito anteriormente, pode ser de duas formas: de dentro da DLL e fora dela.

Por dentro, podemos gerar um objeto Image e adicionar seu atributo ImageUrl diretamente:

Image imagem = new Image();

imagem.ImageUrl = ClientScript.GetWebResourceUrl(this.GetType(), "Framework.Resources.Calendario.png");

Pode-se utilizar a mesma forma de invocação quando for chamar de fora da DLL pelo CodeBehind. Se for chamar direto na página ASPX basta utilizar as tags <%= %>colocando dentro o método de invocação do recurso.

Você pode utilizar essa forma de acoplamento de recursos para alguns outros tipos de objetos como JavaScript, por exemplo. Lembrando que não é bom ter uma DLL muito grande com diversos objetos. Caso for de extrema importância mantê-lo na DLL, fragmente-os em diversas outras DLLs.