O que é uma DLL de Alto-Nível?
Muitas vezes somos levados a pensar que a tecnologia sempre esteve aí, mas na verdade tudo se desenvolve em ciclos contínuos e normalmente usam-se conhecimentos anteriores ou de áreas afins. A questão da DLL de Alto-Nível é um caso destes.
Para explicar esta DLL vou citar alguns acontecimentos remotos. Quando iniciei na Bematech em 1994, vinha de uma experiência de 12 anos na antiga S!D Informática. Neste tempo lá havia trabalhado com inúmeros projetos, entre eles o desenvolvimento de um sistema operacional de testes para a linha de supermicros da S!D em parceria com meu amigo Sérgio Zarath. Era um sistema bastante complexo, mas necessário para uso na fábrica e no campo pelos técnicos da empresa.
Esta experiência somada com o da construção de um sistema de testes para o Terminal Bancário Modular baseado em plataforma x86, obtive as informações necessárias para a construção do primeiro driver para o ECF Bematech. Este tempo me proporcionou um vasto conhecimento em desenvolvimento de aplicações em Assembly e C para processadores de 8, 16 e 32 bits com tecnologias CISC e RISC, com completo domínio dos sistemas CP/M, UNIX System V, DOS e Windows desde a versão 3.0.
Era o ano de 1996 e havíamos recém lançado o primeiro ECF da Bematech, a MP-20 FI I, e rapidamente notamos que as software-houses tinham muita dificuldade em utilizá-la. Percebemos pelos feedbacks que tinham dificuldade em implementar e tratar o protocolo de comunicação serial.
Baseado nisto desenvolvemos um driver residente em memória que interceptava a função do BIOS do PC responsável pelo manuseio da porta serial e ao recebermos os comandos montava o pacote de comunicação e fazia todo o handshake da porta serial.
O driver residente foi recebido com bastante entusiasmo pelas software-houses, que rapidamente pediram mais. Nesta época investimos muito dinheiro para gerarmos estas versões e suas melhorias. Foi algo inédito naquela época, pois muita empresa até hoje investe muito pouco neste assunto.
Usando o mesmo método criamos as DLLs de 16 e 32 bits ainda de baixo-nível, que funcionavam da mesma maneira que o driver residente. Ótimo! Agora todos os parceiros podiam desenvolver suas aplicações Windows com relativa facilidade.
As software-houses necessitavam de um apoio bastante grande para utilizar a DLL, pois os comandos eram mais ou menos assim (comando para realizar uma leitura X):
Para o DRIVER RESIDENTE (mp20drv.exe):
Fwrite (COM1, Chr(27) + chr(251) + “06|” + chr(27));
Para a DLL de 16/32 bits (mp20fi16.dll e mp20fi32.dll):
FormataTX (Chr(27) + “|06|” + chr(27));
Pouco tempo depois criamos o Driver de Rede, hoje chamado Bematech MONITOR, que utilizava estes mesmos comandos, permitindo utilizar um ECF numa aplicação cliente-servidor.
De qualquer forma, ainda era bastante complexa a utilização destes drivers/DLLs, pois o desenvolvedor precisava conhecer o set de comandos do ECF e um pouco de comunicação serial. Podemos dizer que demoravam em torno de aproximadamente 4 semanas para colocar o ECF em funcionamento na sua aplicação.
Por também ter desenvolvido software, sei que quanto mais simples for a interface, melhor para o programador, resultando em menos tempo. Enquanto no ambiente CP/M tínhamos comandos numerados, assim como no DOS, no ambiente UNIX tínhamos nomes de função para as APIs, e isto facilitava muito na hora de desenvolver uma aplicação. Entre o final de 1999 e começo de 2000 pensei em criar comandos que não levassem o número do comando do ECF, mas apenas frases em português com significado claro sobre o que o comando iria realizar. Esta idéia foi baseada no formato dos comandos da API do UNIX system V, adaptado para a linguagem C no ambiente PC, utilizando-se comprimento de variáveis que pudessem ser utilizados pela maioria das linguagens da época.
Parece uma idéia que todos apoiariam desde o início, não é mesmo? Pois não foi bem assim. Obtive resistência na própria equipe quanto a esta idéia, a ponto de que tive que eu mesmo escrever toda a documentação da definição da DLL, criando todos os comandos necessários, e ainda escrevi uma DLL para teste do conceito. Somente após isto é que o projeto deslanchou.
A idéia era de acrescentar à DLL já existente toda a inteligência de uso do ECF, pois como dizemos aqui dentro “Quem conhece melhor o produto da Bematech do que ela mesma?”. A idéia então eram comandos simples que desonerasse os desenvolvedores e estes pudessem entender sem conhecer muito do ECF, mas apesar disto utilizar toda a sua potencialidade facilmente.
Com funções de alto-nível o desenvolvedor não necessitava mais conhecer o set de comandos da impressora fiscal, pois todas as suas funções de acesso à impressora foram definidas e escritas com o objetivo de identificar a real operação da impressora, como por exemplo: para a abertura de um cupom fiscal, não era mais necessário utilizar-se de um comando (ESC 00), conforme a DLL anterior, e sim de uma função chamada Bematech_FI_AbreCupom(), portanto comandos simples. O mesmo comando demonstrado acima para realizar uma leitura X ficou assim:
DLL de Alto-Nível (bemafi32.dll):
Bematech_FI_LeituraX ();
Quer dizer, toda a parte de comunicação com o ECF e recebimento de status e demais situações do ECF não precisam mais ser tratados pela aplicação, mas sim pela Bemafi32.dll.
Por isto a chamamos de DLL de Alto-Nível, e a idéia é tão simples que hoje todo mundo usa este mesmo nome para designar sua DLL, e os seus comandos se tornaram padrão e uma referência de mercado. Fico muito feliz por ter contribuído desta maneira com a Automação Comercial brasileira, pois me deixa claro que devemos lutar persistentemente por uma boa idéia.
Hoje, quem não possui uma DLL deste tipo está fadado a não ser aceito pelos desenvolvedores, pois o tempo de desenvolvimento caiu daquelas 4 semanas para algo em torno de 1 dia para as funções básicas do ECF.
Neste momento você está pensando que não deve ser bem assim. Mas posso te dizer que realizamos em diversos eventos uma demonstração de uso desta DLL e criamos uma aplicação de abertura de cupom, venda de item e fechamento do cupom em Delphi em menos de 5 minutos!
Mas não paramos ai. Continuamos trabalhando e muitas melhorias foram incluídas na DLL, como SINTEGRA, TEF e muitos outros comandos úteis. A função Bematech_FI_RelatorioSintegraMFD gera o arquivo completo pronto para ser validado pelo validador do Sintegra e ser entregue à fiscalização. São gerados os registros tipo 10, 11, 60M (mestre), 60A (Analítico), 60D (Diário), 60R (Resumo Mensal), 60I (Item), 75 e 90.
Ao lançarmos o ECF-MFD incluímos seus comandos na Bemafi32.dll e agora recentemente todos os comandos necessários para a CAT-52. Quer dizer, quem usa a Bemafi32.dll não precisa se preocupar com a maioria das situações exigidas pelo Fisco e que dependam do ECF, pois a DLL faz isto com facilidade.
Bem, talvez você seja um purista e deseja usar o protocolo direto. Neste caso temos ampla documentação para isto, mas sinceramente eu desaconselharia, pois você precisa se concentrar no teu produto e não no da Bematech.
Em 2005 inovamos mais uma vez desenvolvendo o FLASHBUILDER, um framework em .NET que permite aos desenvolvedores que utilizam esta tecnologia explorar todos os recursos da plataforma, foi o primeiro Framework de verdade do mercado.
Mais uma vez o caminho não foi fácil, pois houve novamente resistência interna ao projeto, mas ainda bem que as pessoas que não são inovadoras saíram da empresa naquele período. Finalmente o FLASHBUILDER ficou pronto, e com ele desenvolver aplicações .NET para ECF ficou simples. Gerar o SINTEGRA nele é a coisa mais fácil que tem, basta usar a classe de gerenciamento de dados que armazena todos os dados das operações e com poucas linhas de código está pronto seu relatório. As rotinas de TEF foram simplificadas a ponto que todas as operações de criação e controle do arquivo intpos estão na ferramenta, permitindo ao desenvolvedor total controle sobre a operação, conforme exigido pelas certificadoras, com rapidez e segurança.
Criamos também relatórios administrativos de vendas por produto, vendas por período, comissão de vendedores, listagem de produtos, etc. Incluímos no FLASHBUILDER suporte a vários periféricos além do ECF, como leitor de código de barras, balança, impressora de cheque, teclado programável, display de cliente e impressora não fiscal. Com isso, você controla todos os periféricos da solução através de uma única ferramenta, o FLASHBUILDER. Criamos tudo isso pensando em você desenvolvedor, pensando em simplificar cada vez mais o desenvolvimento para o ECF, para que você possa se concentrar no desenvolvimento do seu produto.
Se tudo isto não bastasse, a Bematech lançou ainda emuladores para seus ECFs, de maneira que desenvolver aplicações para nossos ECFs seja simples, e você pode colocar sua atenção no que mais interessa - lucrar com sua solução de Automação Comercial.
Isto não é tudo a respeito de drivers e DLLs, estamos sempre trabalhando internamente para gerar mais e melhores ferramentas, aguardem!
5 comentarios

(98.33%)
Realmente, temos utilizado equipamentos de outros fabricantes e os produtos da Bematech estão mais estáveis e maduros, não só com relação aos ECF´s, mas toda sua linha.
Caro Luis
Parabéns pelas soluções desenvolvidos.
Sempre compartilhei do pensamento utilizado por vocês. E como cliente desde as primeiras versões de ECF BEMATECH acompanhei este processo a distância.
Desenvolvo soluções em software desde 1981… Também fui cliente SID (SID5000 Sofy 3.4 um pouco mais antigo), usei também o Unix System V.
Talvez a experiência e conhecimentos adquiridos tenha nos dado esta visão diferente dos novos programadores/analistas.
Continuem assim.
Forte abraço
Realmente funciona, compatível com vários ambientes e configuracoes, pois tenho clientes usando desde mp20 fi I ate mp 2100 e nao preciso alterar meu programa, que por sinal ainda esta em DOS.
Obrigado
É Luis,
Inovar é sempre sinônimo de resistir. Acreditar no que poderá dar certo é uma visão única de poucos empreendedores. Parabéns!
Trabalho com desenvolvimento desde 1996 e acompanhei de perto a evolução dos ECF’s, sobretudo da Bematech, e sei da incrível facilidade de se programar hoje graças à atitudes inovadoras, como a sua.
A DLL de alto-nível tornou tudo bem mais simples e rápido, acompanhando o dinamismo que um bom programador precisa ter, e as mudanças que o “fisco” vive a nos imprimir.
Grande abraço e, mais uma vez, parabéns!
Trabalhei durante alguns anos “Dourados” na Cobra Computadores e sei muito bem o que é criar algo para se conseguir chegar a um objetivo. Hoje, após longos anos, desenvolvo em Delphi e sempre que preciso tenho o auxilio dos Analistas da Bematech e seus colaboradores.
Espero que nunca deixem de melhorar pois afinal dependemos e muito de todos vocês.