Business - Automação Comercial

Bematech Flash Builder - Desenvolvendo o primeiro Cupom Fiscal

Neste artigo, iremos desenvolver o nosso primeiro Cupom Fiscal, aproveitando todas as facilidades e agilidades que esta ferramenta nos oferece.

por André Luiz R. Munhoz



No artigo anterior, referenciamos os assemblies Bematech.dll e Bematech.Fiscal.dll ao projeto, e instanciamos seus métodos para o objeto BematechFiscal - objeto que estaremos utilizando durante todo o desenvolvimento.

Neste artigo, iremos desenvolver o nosso primeiro Cupom Fiscal, aproveitando todas as facilidades e agilidades que esta ferramenta nos oferece.

Não esqueça que estaremos visualizando todas as rotinas em C# e Visual Basic .NET.

E, "mão na massa"!

Criando o Cupom Fiscal

No form principal, vamos criar 3 botões de comando, onde iremos abrir, vender e fechar o cupom fiscal.

• em C# 

// Botão Abre Cupom
private void cmdAbreCupom_Click(object sender, System.EventArgs e)
{
  try
  {
    // Método para a abertura do Cupom Fiscal sem passagem de parâmetro.
    BematechFiscal.Cupom.Abrir();

    // Método para o retorno do número do cupom (COO), armazenando 
    // na variável cNumeroCupom 
    string cNumeroCupom = BematechFiscal.Cupom.Numero.ToString();
  }
  catch ( FiscalException MensagemErro )
  {
    MessageBox.Show( "Mensagem Erro: " + MensagemErro.Message );
  }
}

// Botão Vender Item
private void cmdItem_Click(object sender, System.EventArgs e)
{
  // Criado o objeto ItemVendido para representar o item a ser vendido.
  Item ItemVendido = new Item(); 
  ItemVendido.Codigo = "1234567890123"; 
  ItemVendido.Descricao = "Item de Teste"; 
  ItemVendido.Aliquota = "FF"; 
  ItemVendido.Quantidade = 1; 
  ItemVendido.ValorUnitario = 1.00M; 

  try 
  { 
    // Método para a venda do item passando como parâmetro o objeto ItemVendido.
    BematechFiscal.Cupom.Vender( ItemVendido ); 
  } 
  catch ( FiscalException MensagemErro ) 
  { 
    MessageBox.Show( "Mensagem Erro: " + MensagemErro.Message ); 
  } 
} 

// Botão Fecha Cupom
private void cmdFechaCupom_Click(object sender, System.EventArgs e) 
{ 
  try 
  { 
    // Método para o fechamento do cupom passando como parâmetro a forma de
    // pagamento e a mensagem promocional.
    BematechFiscal.Cupom.Fechar( "Dinheiro", "Obrigado, volte sempre!" ); 
  } 
  catch ( FiscalException MensagemErro ) 
  { 
    MessageBox.Show( "Mensagem Erro: " + MensagemErro.Message ); 
  } 
}
 

• em VB.NET

" Botão Abre Cupom 
Private Sub cmdAbreCupomFiscal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 
cmdAbreCupomFiscal.Click 
  Try 
    " Método para a abertura do Cupom Fiscal sem passagem de parâmetro. 
    BematechFiscal.Cupom.Abrir() 

    " Método para o retorno do número do cupom (COO), armazenando 
    " na variável cNumeroCupom
    Dim cNumeroCupom As String = BematechFiscal.Cupom.Numero.ToString() 

  Catch MensagemErro As FiscalException 
    MsgBox("Mensagem Erro: " + MensagemErro.Message) 
  End Try 
End Sub

" Botão Vender Item 
Private Sub cmdVendaItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 
cmdVendaItem.Click 
  Try
    " Criado o objeto ItemVendido para representar o item a ser vendido. 
    Dim ItemVendido As Item = New Item 
        ItemVendido.Codigo = "1234567890123" 
        ItemVendido.Descricao = "Item de Teste" 
        ItemVendido.Aliquota = "FF" 
        ItemVendido.Quantidade = 1 
        ItemVendido.ValorUnitario = 1.0 

    " Método para a venda do item passando como parâmetro o objeto ItemVendido.     
BematechFiscal.Cupom.Vender(ItemVendido) 
  Catch MensagemErro As FiscalException 
    MsgBox("Mensagem Erro: " + MensagemErro.Message) 
  End Try 
End Sub

" Botão Fecha Cupom 
Private Sub cmdFechaCupom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 
cmdFechaCupom.Click 
  Try 
    " Método para o fechamento do cupom passando como parâmetro a forma de
    " pagamento e a mensagem promocional.
    BematechFiscal.Cupom.Fechar("Dinheiro", "Obrigado, volte sempre!") 
  Catch MensagemErro As FiscalException 
    MsgBox("Mensagem Erro: " + MensagemErro.Message) 
  End Try 
End Sub 

Repare que as chamadas aos métodos foram feitas dentro de um "Try/Catch". Desta forma, podemos tratar o status da impressora durante a execução. Este tratamento é controlado pela exceção FiscalException instanciada ao objeto MensagemErro, onde através da propriedade Message é exibida a mensagem.

Ao entrar com o objeto BematechFiscal no código e pressionar o "." (ponto), os principais métodos dos namespaces adicionados aparecem, facilitando a pesquisa e agilizando o desenvolvimento.

Overloads

Overloads são sobrecargas de parâmetros, exibidos durante o uso dos métodos da ferramenta.

Quando abrimos o "(" (parênteses) para a passagem de parâmetro, os métodos exibem uma caixa contendo formas diferentes de usá-lo. Na figura abaixo, o método "Abrir" exibe o 4º overload dos 7 que possui, permitindo a entrada dos parâmetros CPF, Nome e Endereço do cliente, que serão impressos na abertura do cupom fiscal.

Para a escolha do overload, basta pressionar a seta para cima ou para baixo. Você pode optar pelo mais simples ao mais completo, a própria ferramenta se encarrega de identificar qual impressora está em uso e enviar os parâmetros correspondentes, e isso ocorre com todos os métodos que possuem overloads. Fantástico!

Sempre será exibido o conjunto de overloads, quando o método permitir.

No form load, vamos criar o seguinte tratamento:

- Quando a aplicação for inciada, iremos verificar se existe algum cupom fiscal aberto e se este possue itens vendidos. Se o cupom fiscal estiver aberto e não houver itens vendidos, iremos cancelá-lo, caso contrário iremos recuperar todos os itens que foram vendidos e exibir em um TextBox (chamado txtProduto) com a propriedade Multiline setada para True.

Imagine uma situação de queda de energia no meio de uma operação de venda, onde vários itens já foram vendidos.

Quando a aplicação é iniciada, todos estes itens são recuperados facilmente, ou seja, o cupom fiscal volta ao seu estado atual, sem a necessidade de realizamos este controle externamente. Veja como é simples!

• em C# 

private void frmPrincipal_Load(object sender, System.EventArgs e)
{ 
  try 
  { 
    // Método para verificar se o cupom está aberto. 
    if ( BematechFiscal.Cupom.Status.Aberto ) 
    { 
      // Método que retorna a quantidade de itens vendidos. 
      if ( BematechFiscal.Cupom.ItensVendidos.Count != 0 ) 
      { 
        // A classe Item armazena todos os itens vendidos no cupom fiscal. 
        foreach ( Item ItensVendidos in BematechFiscal.Cupom.ItensVendidos ) 
          txtProduto.Text += ItensVendidos.Codigo + " " + 
             ItensVendidos.Descricao + " " + 
             ItensVendidos.Quantidade.ToString("0") + " " + 
             ItensVendidos.ValorUnitario.ToString( "C" ) + "\r\n"; 
      } 
      else 
      { 
        // Método que retorna o modelo da impressora fiscal. 
        string cModeloImpressora = BematechFiscal.Modelo.ToString(); 

        // Métodos que retorna a versão do firmware da impressora fiscal. 
        string cVersaoFirmware = BematechFiscal.Informacao.VersaoFirmware; 

        if ( cModeloImpressora == "MP20FI" && cVersaoFirmware != "032600" ) 
        {
          // Método para vender um item para o cancelamento do cupom fiscal. 
          BematechFiscal.Cupom.Vender( "1", "Item para cancelamento", "II", 1, 
            0.01M ); 

          // Método para cancelar o cupom fiscal. 
          BematechFiscal.Cupom.Cancelar(); 
        } 
        else 
          // Método para cancelar o cupom fiscal. 
          BematechFiscal.Cupom.Cancelar(); 
      } 
    } 
  } 
  catch ( FiscalException MensagemErro ) 
  { 
    MessageBox.Show( "Mensagem Erro: " + MensagemErro.Message ); 
  } 
} 
 

• em VB.NET 

Private Sub frmPrincipal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
  Try 
    " Método para verificar se o cupom está aberto. 
    If (BematechFiscal.Cupom.Status.Aberto) Then 
      " Método que retorna a quantidade de itens vendidos. 
      If (BematechFiscal.Cupom.ItensVendidos.Count <> 0) Then 
        " A classe Item armazena todos os itens vendidos no cupom fiscal. 
        For Each ItensVendidos As Item In BematechFiscal.Cupom.ItensVendidos 
          txtProduto.Text += ItensVendidos.Codigo + " " + _ 
          ItensVendidos.Descricao + " " + _ 
          ItensVendidos.Quantidade.ToString("0") + " " + _
          ItensVendidos.ValorUnitario.ToString("C") + vbCrLf 
        Next 
      Else 
        " Método que retorna o modelo da impressora fiscal. 
        Dim cModeloImpressora As String = BematechFiscal.Modelo.ToString() 
        " Métodos que retorna a versão do firmware da impressora fiscal. 
        Dim cVersaoFirmware As String = BematechFiscal.Informacao.VersaoFirmware 
        If (cModeloImpressora = "MP20FI" And cVersaoFirmware <> "032600") Then 
          " Método para vender um item para o cancelamento do cupom fiscal. 
          BematechFiscal.Cupom.Vender("1", "Item para cancelamento", "II", 1, _
            0.01D) 
          " Método para cancelar o cupom fiscal. 
          BematechFiscal.Cupom.Cancelar() 
        Else 
          " Método para cancelar o cupom fiscal. 
          BematechFiscal.Cupom.Cancelar() 
        End If 
      End If 
    End If 
  Catch MensagemErro As FiscalException 
    MessageBox.Show("Mensagem Erro: " + MensagemErro.Message) 
  End Try 
End Sub

Chamamos este processo de Serialização. A ferramenta faz um backup de todos os dados que estão em memória, salvando o estado atual da operação no momento em que ela é realizada, permitindo sua recuperada. As serializações são realizadas nas operações de cupom fiscal, cupom não fiscal, Sintegra e TEF.

Não perca o próximo artigo!

Iremos conhecer alguns métodos que retornam informações da impressora e realizar operações com cupom não fiscal vinculado e cupom de recebimento.

Até a próxima e boas implementações!

André Luiz R. Munhoz

André Luiz R. Munhoz - Bematech: DSP - Desenvolvimento de Software e Parcerias.
Visite o site: http://www.bematech.com.br.