Business - Automação Comercial

Comunicando com o ECF em C# - parte 2

No Artigo anterior tínhamos visto como declarar as funções do ECF (DLL BEMAFI32.DLL) nosso primeiro passo para estabelecer comunicação com o ECF.

por Claudenir Andrade



Artigo anterior tínhamos visto como declarar as funções do ECF (DLL BEMAFI32.DLL) nosso primeiro passo para estabelecer comunicação com o ECF.

Bem, agora vamos criar as classes que vão analisar o retorno da dll e o status de cada comando enviado para a dll (BemaFI32.dll).

Abra o ECFClass.cs e nele adicione uma classe para verificação do retorno da dll, conforme código em seguida:

Listagem 1: Função Analisa_Retorno_Dll

public static void  Analisa_Retorno_Dll(int RET)
{
if(RET!=1)
	{
		MessageBox.Show("Problemas Ao Enviar o Comando para o ECF",
	ECF.NET V1.0",MessageBoxButtons.OK);
	}	 
		
}

Note que aqui não declaramos a variável RET, mas sim a recebemos por valor para ser analisada. Esta função fará parte da Public Class ECF que declaramos no ECFClass.cs.

Agora vamos adicionar ao nosso projeto a função que vai decodificar o erro do ECF. Veja que aqui não estamos utilizando constantes, como fizemos no VB, mas teremos a mesma funcionalidade.

Inclua o seguinte trecho de código no ECFClass.cs para a análise do retorno do comando enviado para o ECF.

Listagem 2: Função Analisa_Retono_ECF

public static void Analisa_Retono_ECF()
{
ACK=ST1=ST2=0;
	Bematech_FI_RetornoImpressora(ref ACK, ref ST1, ref ST2);
if(ACK!=6)
{
MessageBox.Show("Problemas ao Enviar Comando","ECF.NET V1.0",
MessageBoxButtons.OK,MessageBoxIcon.Error);
 }
		
if  (ST1>=128)
{
MessageBox.Show("FIM E PAPEL - FAVOR TROCAR A BOBINA","ECF.NET V1.0",MessageBoxButtons.OK,MessageBoxIcon.Error);ST1-=128;
}
else if(ST1>=64)
{
MessageBox.Show("O PAPEL ESTÁ TERMINANDO - FAVOR VERIFICAR.","ECF.NET V1.0",MessageBoxButtons.OK,MessageBoxIcon.Error);ST1-=64;
}
else if(ST1>=32)
{
MessageBox.Show("ERRO NO RELOGIO INTERNO DO ECF - CHAMAR ASSISTENCIA TECNICA!!","ECF.NET V1.0",MessageBoxButtons.OK,MessageBoxIcon.Error);ST1-=32;
}
else if(ST1>=16)
{
MessageBox.Show("IMPRESSORA EM ERRO - DESLIGUE E LIGUE O ECF","ECF.NET V1.0", MessageBoxButtons.OK,MessageBoxIcon.Error);ST1-=16;
}
else if(ST1>=8)
{
MessageBox.Show("ERRO NO ENVIO DO COMANDO - FAVOR REPETIR A OPERACÃO","ECF.NET V1.0", MessageBoxButtons.OK,MessageBoxIcon.Error);ST1-=8;
}
else if(ST1>=4)
{
MessageBox.Show("COMANDO INEXISTENTE - FAVOR ABRIR CHAMADO SUPORTE","ECF.NET V1.0", MessageBoxButtons.OK,MessageBoxIcon.Error);ST1-=4;
}
else if(ST1>=2)
{
MessageBox.Show("CUPOM FISCAL ABERTO - CANCELE O CUPOM OU TERMINE A VENDA","ECF.NET V1.0", MessageBoxButtons.OK,MessageBoxIcon.Error);ST1-=2;
}
	else if (ST1>=1)
{
MessageBox.Show("PARAMETRO INVALIDO - FAVOR ABRIR CHAMADO SUPORTE","ECF.NET V1.0", MessageBoxButtons.OK,MessageBoxIcon.Error);ST1-=1;
}		
		
//Analise do st2
if  (ST2>=128)
{
MessageBox.Show("TIPO DE CMD INVALIDO - FAVOR ABRIR CHAMADO SUPORTE","ECF.NET V1.0", MessageBoxButtons.OK,MessageBoxIcon.Error);ST2-=128;
}
else if(ST2>=64)
{
MessageBox.Show("MEMORIA FISCAL CHEIA - CHAMAR ASSISTENCIA TECNICA!!","ECF.NET V1.0", MessageBoxButtons.OK,MessageBoxIcon.Error);ST2-=64;
}
else if(ST2>=32)
{
MessageBox.Show("ERRO DE CMOS DO ECF - CHAMAR ASSISTENCIA TECNICA!!","ECF.NET V1.0",MessageBoxButtons.OK,MessageBoxIcon.Error);ST2-=32;
}
else if(ST2>=16)
{
MessageBox.Show("ALIQUOTA NAO PROGRAMADA - FAVOR CANCELE O CUPOM E CADASTRE A ALIQUOTA","ECF.NET V1.0", MessageBoxButtons.OK,MessageBoxIcon.Error);ST2-=16;
}
else if(ST2>=8)
{
MessageBox.Show("CAPACIDADE ALIQUOTA LOTADA - FAVOR ABRIR CHAMADO SUPORTE","ECF.NET V1.0",MessageBoxButtons.OK,MessageBoxIcon.Error);ST2-=8;
}
else if(ST2>=4)
{
MessageBox.Show("CANCELAMENTO NAO PERMITIDO PELO ECF","ECF.NET V1.0",MessageBoxButtons.OK, MessageBoxIcon.Error);ST2-=4;
}
else if(ST2>=2)
{
MessageBox.Show("CGC/IE NAO PROGRAMDOS  - CHAMAR ASSISTENCIA TECNICA!!","ECF.NET V1.0", MessageBoxButtons.OK,MessageBoxIcon.Error);ST2-=2;
}
else if(ST2>=1)
{
MessageBox.Show("COMANDO NAO EXECUTADO - VERIFIQUE O STATUS DA IMPRESSORA","ECF.NET V1.0", MessageBoxButtons.OK,MessageBoxIcon.Error);ST2-=1;
}
}

Observe que utilizamos a função Bematech_FI_RetornoI,mpressora passamos por referência para esta função as variáveis ACK, ST1 e ST2, utilizando-se palavra reservada ref Bematech_FI_RetornoImpressora(ref ACK, ref ST1, ref ST2);

Muito bem!!! Já temos então codificada a estrutura necessária para a codificação das funções que interagem com o ECF.

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