none
comunicação com ecf's RRS feed

  • Pergunta

  • Oi, estou iniciando o desenvolvimento de uma aplicação ponto de venda e me surgiu uma dúvida: como configuro via código c# a porta de conexão? Para as impressoras, eu criei duas classes, uma para bema e outra para daruma, na hora de instanciar eu leio do banco de dados o nome da impressora. Mais ainda está faltando a porta com ou usb. como faço isso via c#?

     

    segunda-feira, 20 de junho de 2011 03:07

Respostas

  • Bom dia!

    Neste caso vc vai utilizar comunicação direta, certo?

    Então neste caso vc pode utilizar a classe SerialPort. Neste link (http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx) tem várias informações uteis.

    Geralmente as conexões via USB para ECF acabam emulando uma porta serial. Então se vc tratar tudo como porta serial não vai ter problemas.

    T+

    segunda-feira, 20 de junho de 2011 11:23

Todas as Respostas

  • Bom dia!

    Neste caso vc vai utilizar comunicação direta, certo?

    Então neste caso vc pode utilizar a classe SerialPort. Neste link (http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx) tem várias informações uteis.

    Geralmente as conexões via USB para ECF acabam emulando uma porta serial. Então se vc tratar tudo como porta serial não vai ter problemas.

    T+

    segunda-feira, 20 de junho de 2011 11:23
  • eu pretendia usar as dll dos fabricantes... com esta classe não poderia certo ?

     

    daniel, minha duvida permanece.

    terça-feira, 21 de junho de 2011 02:11
  • Bom dia!

    Se vc for utilizar a DLL do fabricante, não precisa se preocupar com a porta serial, pois a DLL já faz isto para vc.

    A única coisa que vc terá que fazer é configurar a porta serial e pedir pra DLL controlar a porta pra vc.

    Cada fabricante tem uma forma de configurar isto, basta pegar a documentação de cada fabricante e configurar.

    Por exemplo, na Daruma é no registro onde vc configura e Bematech em um arquivo BemaFI32.Ini

    T+

    terça-feira, 21 de junho de 2011 12:19
  • Boa noite.

    Nilza não sei se entendi bem sua dúvida. Por um acaso vc quer abrir a porta para comunicação e não sabe como faze-lo?

    As funções da API do WINDOS te CreateFile(), SetCommStatus, SetComTimeOuts etc... te dizem algo?


    MiguelCaf
    terça-feira, 20 de setembro de 2011 01:04
  • Nilza, bom dia!

    Temos um produto muito interessante para comunicação direto com várias ECFs, que pode lhe ajudar bastante em seu PDV, que é o projeto ACBrX (não é o ACBr em si).

    O projeto ACBr possui diversos componentes que ajudam demais os desenvolvedores, porém, seus objetos (POO) estavam ao alcance somente de programadores Delphi / Lazarus.

    Assim, com o uso de COM (Component Object Model, modelo padrão de componentes do Windows) via ActiveX, começamos a programar interfaces COM para objetos ACBr e o primeiro componente a estar acessível é o ACBrECF.

    Então, já temos uma DLL ActiveX que, após registrada no Windows, pode ser usada para instanciar um objeto ACBrECF diretamente em seus fontes, com tanto que sua linguagem de programação suporte COM, e são várias as que suportam, entre elas: VB6, VB.NET, C#, Access, Power Builder, xHarbour, Visual FoxPro (depende da versão), Visual DataFlex (depende da versão), entre outras. Basta verificar se sua linguagem de programação possui suporte a COM e como instanciar objetos COM.

    Já programamos inclusive o exemplo ECFTeste, em VB6, e os printscreens podem ser vistos pelos seguintes links:

    http://www.easysoftware.net.br/img/acbrx.acbrecf.01.png
    http://www.easysoftware.net.br/img/acbrx.acbrecf.02.png
    http://www.easysoftware.net.br/img/acbrx.acbrecf.03.png
    http://www.easysoftware.net.br/img/acbrx.acbrecf.04.png

    Quase todos os recursos estão disponíveis, desde eventos até listas de objetos, como por exemplo a propriedade ACBrECF.FormasPagamento. Inclusive, essas listas de objetos possuem suporte a for each, em linguagens como VB6 e C#

    O que não está disponível igual ao Delphi são métodos sobrecarregados e polimorfismo, já que COM não suporta sobrecarga de métodos e polimorfismo. Porém, métodos sobrecarregados como ACBrECF.LeituraMemoriaFiscal, fizemos ACBrX.ACBrECF.LeituraMemoriaFiscalPorData / ACBrX.ACBrECF.LeituraMemoriaFiscalPorReducao, etc. A propriedade ACBrX.ACBrECF.ECF possui apenas os métodos e propriedades da classe básica ACBrECFClass.

    Segue link para versão de avaliação do ACBrX:

    http://easysoftware.net.br/downloads/ACBrX.rar

    Esse arquivo possui o exemplo ECFTeste em VB6.

    Lembrando que a DLL deve ser registrada no Windows. O script "registrar componente.bat" já faz isso. No Windows Vista / 7, é necessário abrir um prompt de comando de administrador para então executar o script.

    Há também o pouco de documentação que fiz. Pretendo adicionar mais descrições aos métodos e eventos que eu conhecer.

    Segue código para instanciar o objeto ACBrX.ACBrECF em C#. O código é bem parecido para VB.NET. Após registrar a DLL no Windows, é necessário adicionar a referência COM ACBrX à solution. Outro detalhe importante é que o projeto deve ter Build para plataforma x86 (e não qualquer CPU).

     

    using ACBrX;
    using System.Runtime.InteropServices.ComTypes;
    
        public partial class Main : Form, IACBrECFEvents // reparar na implementação da interface IACBrECFEvents
    
            private ACBrX.ACBrECF ACBrECF;
            // variáveis para configuração de eventos
            private int cookie = -1;
            private IConnectionPoint icp = null;
    
            private void CarregarACBrX()
            {
                // instancia o objeto ACBrECF
                ACBrECF = new ACBrECF();
                // configuração de eventos
                // lembrando que é necessário implementar a interdace IACBrECFEvents junto ao form
                IConnectionPointContainer icpc = (IConnectionPointContainer)ACBrECF;
                Guid guid = typeof(IACBrECFEvents).GUID;
                icpc.FindConnectionPoint(ref guid, out icp);
                icp.Advise(this, out cookie);
            }
    
            private void Main_Load(object sender, EventArgs e)
            {
                CarregarACBrX();
            }
    
            private void Main_FormClosing(object sender, FormClosingEventArgs e)
            {
                icp.Unadvise(cookie);
                ACBrECF = null;
            }

     


    EasyTEF Team
    terça-feira, 20 de setembro de 2011 13:10