Clique aqui para ler este artigo em pdf imagem_pdf.jpg

msdn03_capa.jpg

Clique aqui para ler todos os artigos desta edição

 

Uso da Plataforma.Net na Automação Comercial

por Claudenir C. Andrade

Em nossa profissão de desenvolvedores, em algum momento somos solicitados a desenhar uma solução em software que atenda a contas a pagar, receber, estoque, caixa, etc. Porém, ao desenvolvermos essas soluções usando as ferramentas existentes, chegamos à conclusão de que todos esses sistemas são alimentados com dados provenientes de vendas realizadas no caixa ou no que chamamos de Chek-Out. Então, geralmente resolvemos também oferecer um software que atenda à necessidade da Frente-de-Caixa, ou PDV (Ponto de Venda).

Antes de digitar os códigos, percebemos que – por força da legislação federal – o cliente precisará usar um ECF (Emissor de Cupom fiscal) e que, por sua vez, nosso software precisará “interfacear” com essa impressora de cupom fiscal.

Este artigo visa esclarecer de forma simples e prática como esses periféricos funcionam e como podemos “interfacear” com eles em C# aproveitando o potencial que a plataforma .Net nos oferece.

 

Comunicação Serial RS232-C

Eis o primeiro mistério. A impressora fiscal não tem a mesma comunicação que as impressoras normais (LX300, Epson, etc) nem são reconhecidas pelo Windows. Todas as impressoras fiscais possuem um protocolo de comunicação serial baseado na revisão C, por isso, a interface usada é o padrão RS232-C. Os periféricos fiscais possuem um set de comandos que responde a uma ação específica solicitada por seu software, ou seja, se plugarmos um ECF (Emissor de Cupom Fiscal) na COM2 e digitarmos “c:\Dir > COM2”, nada acontecerá, pois essa porta [r1] reage apenas aos comandos predefinidos em seu set de comandos. Conclusão: nosso software deverá efetuar uma comunicação serial com o micro e “falar” o protocolo da impressora que nosso cliente estiver usando no momento.

 

Drivers e DLLs – Middleware Facilitadores

Para nos ajudar a desenvolver o software para um ECF, os fabricantes de impressoras fiscais fornecem drivers, .sys, Dll e outras ferramentas de comunicação. Nesta seção, vamos mostrar como usar a DLL da Daruma.

Contudo, nossa lição de nada servirá se não conhecermos a lógica e as regras de funcionamento de uma impressora fiscal. A regra básica de funcionamento de todo e qualquer periférico fiscal é:

 

image001.gif

figura 1

 

Sendo assim, o software precisará estar preparado para assumir como função principal Abrir Cupom, Vender Item e Fechar Cupom. Além dessas operações, existem outros controles que deverão ser adicionados à aplicação que construiremos utilizando C#.

 

Comunicando com o ECF

 

O primeiro passo é declarar a dll, cujas especificações podem ser baixadas da página do fabricante ou montadas por você mesmo. Crie uma classe no C# e inclua como namespace a indicação de que estaremos interagindo com uma dll “UnManageCode”.

 

using System;

using System.IO;

using System.Windows.Forms;

using System.Runtime.InteropServices;

 

Em seguida, crie uma classe ECF para hospedar todas as funções disponibilizadas pelo fabricante da dll (neste exemplo, dll Daruma32.dll), Adicione o seguinte trecho de código à sua classe:

 

namespace ECF_CSHARP

{

  public class cEcf

  {

   [DllImport("Daruma32.dll")]

            public static extern int Daruma_FI_LeituraX();

   [DllImport("Daruma32.dll")]

            public static extern int Daruma_FI_AbreCupom( System.String CGC_CPF);

   [DllImport("Daruma32.dll")]

            public static extern int Daruma_FI_FechaCupomResumido(System.String FormaPagamento, System.String Mensagem);

   [DllImport("Daruma32.dll")]

public static extern int Daruma_FI_VendeItem(System.String Codigo, System.String Descricao,

    System.String Aliquota,System.String TipoQuantidade, System.String Quantidade,

    int CasasDecimais,System.String Vr_Unitario, System.String TipoDesconto, System.String Desconto);

  }

}

 

No formulário form1 você deverá incluir o seguinte namespace (ECF_CSHARP):

 

using System;

using System.Drawing;

using System.IO;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using ECF_CSHARP;

 

Inclua um botão e, no evento click, adicione as chamadas às funções de acesso ao ECF que acabamos de declarar. Insira os comandos, Abertura, Venda e Fechamento de Cupom. Veja o código a seguir e o resultado na Figura 1:

 

if(cEcf.Daruma_FI_VendeItem("1234567890123","Produto1", "FF", "I", "10", 2, "100", "$", "0")  != 1)

{

 System.Windows.Forms.MessageBox.Show("Erro na Execução da Função do ECF");

 return;

}

else

 System.Windows.Forms.MessageBox.Show("Comando Enviado com sucesso para o ECF");

 

 

if(cEcf.Daruma_FI_FechaCupomResumido("Cheque","Obrigado Volte Sempre!!")  != 1)

{

  System.Windows.Forms.MessageBox.Show("Erro na Execução da Função do ECF");

  return;

}

 

image003.jpg

Figura 2 - Resultado do aplicativo que consome a Daruma32.dll para se comunicar como ECF

 

Claro que aqui temos um exemplo simples de como acessar o ECF, porém, ele já nos permite tirar várias conclusões. Uma delas é a não-obrigatoriedade de chamar a função de Abertura de Cupom, pois a função VendeItem é inteligente o suficiente para abrir o cupom fiscal de forma automática. Se você tiver uma impressora fiscal conectada ao seu PC, observará que acabou de emitir um cupom fiscal e que, para isso, foram chamadas as funções de Venda de Item e de Fechamento de Cupom. Vamos analisar cada parâmetro:

Na Função de Venda de Item, passamos o Código ("1234567890123") que, neste caso, pode ter até 13 caracteres. Os parâmetros passados são: a descrição do produto e a alíquota. FF – FF, II e NN são alíquotas fiscais que já vêm predefinidas no ECF para produtos que possuem Substituição Tributária, Isenção ou Não-Incidência de ICMS. Porém, se o produto que estamos vendendo tiver uma alíquota específica, deveremos passar o valor dessa alíquota com quatro casas, exemplo: “1200” ou “1800”.

Em seguida, temos alguns outros parâmetros, onde o quarto parâmetro foi passado a letra “I”, que indica que vamos trabalhar com a quantidade Inteira, ou seja, vamos vender por unidade, e não por peso (fracionária).

O quinto parâmetro corresponde à quantidade do item que estamos vendendo, acompanhada do parâmetro do número de casas decimais que o produto possui, 2 (duas). Em seguida, o valor unitário do produto (neste caso, R$1,00). Observe que os valores devem ser passados sem formatação, mas mesmo que eles sejam passados com a vírgula, a dll os entenderá e obedecerá as casas de centavos impostas pela vírgula.

Os demais parâmetros são o desconto e o valor do desconto. O desconto de um produto pode ser especificado por valor ou por percentual, ou seja, podemos dar um desconto de 10,00 REAIS ou de 10,00 % (por cento), representados, respectivamente, pelos símbolos “$” e “%” (passados neste exemplo por valor). O último parâmetro indica o montante do desconto, o qual, se for por percentual, deverá ter até quatro casas.

Por fim, chamamos a função de Fechamento de Cupom Fiscal, em que um dos grandes facilitadores é a função de fechamento de cupom fiscal resumido na qual passamos como parâmetro a Forma de Pagamento apresentada por nosso cliente para saldar a compra. O último parâmetro é uma mensagem promocional, que neste exemplo foi a famosa “Obrigado Volte Sempre!!”.

Vale acrescentar que no C# e nas linguagens baseadas no .NET, possuímos as macros de tratamento de erros “Try..Catch...Finally”. Porém, na comunicação com o ECF essas macros não têm efeito. Por isso, como exemplo de tratamento de erro, ao final de cada função disponibilizamos ao usuário um MessageBox que indica que a função não foi executada como esperado. E onde podemos encontrar o retorno das funções, a documentação de cada retorno obtido na chamada da função e também todas as funções de acesso ao ECF? Bem, para isso você deve acessar o Help do fabricante, onde ele descreve passo a passo como é feito o acesso na plataforma .Net do seu produto. Veja o Help interativo da Daruma32.dll (Figura 2).

image005.jpg

Figura 3
– Help do fabricante

 

Conclusão

Acessar o ECF e entrar no mundo da automação comercial está mais fácil com a plataforma .Net, que oferece todos os recursos necessários para deixar o código-fonte legível, programar com OOP por meio de classes de acesso ao ECF e manipular de forma perfeita dlls UnManageCode.

 [r1]O correto aqui é a porta, pois vc pode plugar na serial qualquer equipo que responda ao comando dele, que não necessariamente será uma impressora.