Business - Automação Comercial

Comunicando com o ECF em C# - parte 1

Para acessar a impressora fiscal por meio de sua dll de comunicação, é necessário declarar as funções da dll que contemplam os comandos de acesso. Para isso vamos criar um CodeFile e a ele adicionar os namespaces e as classes de acesso.

por Claudenir Andrade



Para acessar a impressora fiscal por meio de sua dll de comunicação, é necessário declarar as funções da dll que contemplam os comandos de acesso. Para isso vamos criar um CodeFile e a ele adicionar os namespaces e as classes de acesso.

Selecione o Menu Project opção AddNewItem e selecione o ícone de CodeFile, conforme figura 1,15.

Adicionando nova clase

Figura 1: Adicionando nova clase

Nomeie este codefile como ECFClass e pressione o botão OK.

Clique duas vezes no ECFClass.cs que está no Solution Explorer e adicione a este arquivo em branco a seguinte estrutura:

Listagem 1: Código da classe recém criada

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Reflection.Emit;
using System.Runtime.InteropServices;
using System.Data.OleDb;

namespace Geral 
{
	Public Class ECF
	{

	}	
}

Agora já temos área disponível e "enxergável" por todo nosso projeto para declarar e trabalhar com as variáveis e cria as classes necessárias para a aplicação.

Observe que adicionamos alguns namespaces a mais, prevendo seu uso, como, por exemplo: System.Runtime.InteropServices. Este namespace permite declarar e interpretar com funções externas como a DLL de comunicação, por isso a necessidade desse namespace declarado no ECFClass.

Observe também que criamos nosso próprio namespace, o Geral. Quando necessitarmos acessar alguma variável, classe ou função que estiver dentro desse namespace e estejamos fora do ecfclass.cs, devemos sempre referenciar por meio do Geral.(Ponto), assim o Intellisense ajudará a identificar qual função ou variável estamos desejando acessar, passando pela classe pública o ECF.

Vamos agora declara as funções que utilizaremos para a comunicação com o ECF. São elas:

Listagem 2: Classe ECF com chamadas às funções da DLL BemaFi32

using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Reflection.Emit;
using System.Runtime.InteropServices;
using System.Data.OleDb;

namespace Geral 
{
/*************************************************************	 
* Classe ECF para Manipular as Funções de Comunicação
* para manipular as funções de retorno e status do ECF
	 * Claudenir C. Andade
	 * 09/02/2002
*********************************************************/
public class ECF
	{
	/********************************************************
	 * Declaração das DLL da Impressora Fiscal
	*********************************************************/	
	
	[DllImport("BemaFi32.dll")]
	public static extern int Bematech_FI_LeituraX();
	
[DllImport("BemaFi32.dll")]
public static extern int Bematech_FI_RetornoImpressora(ref int Ack, ref int St1, ref int St2 );
	
[DllImport("BemaFi32.dll")]
public static extern int Bematech_FI_Suprimento(System.String Valor, System.String FormPagamento );
	
[DllImport("BemaFi32.dll")]
public static extern int Bematech_FI_Sangria(System.String Valor);
	
[DllImport("BemaFi32.dll")]
public static extern int Bematech_FI_ReducaoZ(System.String Data, System.String Hora);
	
[DllImport("BemaFi32.dll")]
public static extern int Bematech_FI_AbreCupom( System.String CGC_CPF);
	
[DllImport("BemaFi32.dll")]
public static extern int Bematech_FI_VendeItem(System.String Código, 
	System.String Descrição, System.String Aliquota, System.String TipoQuantidade,
	 System.String Quantidade, int CasasDecimais, System.String Vr_Unitario, 
	 System.String TipoDesconto, System.String Desconto);
	[DllImport("BemaFi32.dll")]
public static extern int Bematech_FI_FechaCupomResumido (System.String FormaPagamento, System.String Mensagem);
}
}
Observe que antes de cada declaração da função acrescentados a palavra reservada DllImport:
[DllImport("BemaFi32.dll")]

Com ela conseguiremos acessar a dl sem maiores problemas. Observe também que algumas funções como a Retorno impressora contêm em seu parâmetro a palavra reservado ref: Bematech_FI_RetornoImpressora(ref int Ack, ref int St1, ref int St2 ). Isso e indica que estamos trabalhando com essas variáveis por referência, e as variáveis passadas deverão ter seu conteúdo modificado diretamente no endereço de memória em que se encontram.

Bem, já que temos declaradas as funções do ECF que iremos utilizar, vamos então preparar o form para receber os controles e, por sua vez efetuar a venda pelo cupom fiscal.

Claudenir Andrade

Claudenir Andrade - Formado pela Academia de Sistemas Informáticos de Madrid, trabalha com automação comercial há nove anos, foi responsável pela Homologação e aprovação de ECFs brasileiros em países como Equador e Venezuela, gerencia a equipe de desenvolvimento da Daruma Automação. Autor do primeiro livro de automação comercial no Brasil - "Automação Comercial com VB.Net e C#", é também MVP da Microsoft e está criando e definindo o Modelo XML para Automação Comercial, escreve artigos também para o site MSDN e pode ser contatado pelo e-mail - claudenir@daruma.com.br