<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>BEMACAST - FLASH TIP</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/" />
    <link rel="self" type="application/atom+xml" href="http://partners.bematech.com.br/flashtip/atom.xml" />
   <id>tag:partners.bematech.com.br,2008:/flashtip//2</id>
    <link rel="service.post" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2" title="BEMACAST - FLASH TIP" />
    <updated>2008-01-15T18:41:45Z</updated>
    <subtitle>O melhor conteúdo técnico para o Desenvolvedor de Automação Comercial</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.2</generator>
 
<entry>
    <title>Bematech FlashTip - 26a. Edição - Como gerar o arquivo da CAT-52 / Ato Cotepe 17/04 nas impressoras fiscais Bematech</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2008/01/bematech_flashtip_26a_edicao_c.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=160" title="Bematech FlashTip - 26a. Edição - Como gerar o arquivo da CAT-52 / Ato Cotepe 17/04 nas impressoras fiscais Bematech" />
    <id>tag:partners.bematech.com.br,2008:/flashtip//2.160</id>
    
    <published>2008-01-15T12:50:00Z</published>
    <updated>2008-01-15T18:41:45Z</updated>
    
    <summary><![CDATA[Caro parceiro, Ainda h&aacute; algumas d&uacute;vidas em rela&ccedil;&atilde;o &agrave; gera&ccedil;&atilde;o do arquivo da portaria CAT-52 e Ato Cotepe 17/04 para o estado de S&atilde;o Paulo. Nesta edi&ccedil;&atilde;o de nosso Flash-tip, estaremos detalhando todos os procedimentos de gera&ccedil;&atilde;o deste arquivo, atrav&eacute;s...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Dicas" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<p><font face="Verdana" size="1">Caro parceiro,</font></p>
<p><font face="Verdana" size="1">Ainda h&aacute; algumas d&uacute;vidas em rela&ccedil;&atilde;o &agrave; gera&ccedil;&atilde;o do arquivo da portaria CAT-52 e Ato Cotepe 17/04 para o estado de S&atilde;o Paulo.</font></p>
<p><font face="Verdana" size="1">Nesta edi&ccedil;&atilde;o de nosso Flash-tip, estaremos detalhando todos os procedimentos de gera&ccedil;&atilde;o deste arquivo, atrav&eacute;s de nossas ferramentas de comunica&ccedil;&atilde;o.</font></p>
<p><font face="Verdana" size="1"></font>&nbsp;</p>]]>
        <![CDATA[<p><font face="Verdana" size="2"><strong><em>DLL BEMAFI32 (ambiente Windows)</em></strong></font></p>
<p><font face="Verdana" size="1">A Bematech implementou em sua dll de alto-n&iacute;vel BemaFI32.dll, o controle e gera&ccedil;&atilde;o do arquivo da portaria CAT-52 (layout para as impressoras fiscais matriciais) e Ato Cotepe 17/04 (layout para as impressoras fiscais t&eacute;rmicas com MFD) automaticamente. A &uacute;ltima vers&atilde;o dispon&iacute;vel em nosso site &eacute; <a href="http://www.bematech.com.br/suporte/downloads/fisc_win/BEMAFI32.zip">5.8.0.0</a>.</font></p>
<p><font face="Verdana" size="1">Basta atualizar a BemaFI32.dll juntamente com as dlls BemaMFD.dll, BemaMFD2.dll e o arquivo de configura&ccedil;&atilde;o BemaFI32.ini, no diret&oacute;rio de sistema de seu Windows (C:\Windows\System32, por exemplo).</font></p>
<p><font face="Verdana" size="1">As chaves das se&ccedil;&otilde;es [SoftwareHouse] e [ECF], no arquivo BemaFI32.ini, devem ser configuradas da seguinte forma:</font></p>
<p><font face="Verdana" size="1"></font></p>
<p align="justify"><font face="Verdana" size="1"></font></p>
<p><font face="Verdana" size="1"></font></p>
<table width="100%" border="0">
    <tbody>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" colspan="2"><font color="#000099" size="1"><strong>[SoftwareHouse]</strong></font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">COO=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave o &uacute;ltimo COO da impressora, antes da atualiza&ccedil;&atilde;o da nova dll, com o tamanho de 6 bytes. Ex: imprima uma Leitura X e coloque o COO desta Leitura X nesta chave.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">NumeroAplicativo=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave um Id para sua aplica&ccedil;&atilde;o, com o tamanho de 2 bytes. Ex: 01</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">CNPJ=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave o CNPJ/CPF da Software House ou desenvolvedor aut&ocirc;nomo, com at&eacute; 14 bytes. Sem m&aacute;scara.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">IE=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave a Inscri&ccedil;&atilde;o Estadual da Software House, com at&eacute; 14 bytes. Caso n&atilde;o possua pode deixar em branco. Sem m&aacute;scara.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">IM=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave a Inscri&ccedil;&atilde;o Municipal da Software House, com at&eacute; 14 bytes. Caso n&atilde;o possua pode deixar em branco. Sem m&aacute;scara.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">RazaoSocial=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave a Raz&atilde;o Social da Software House, com at&eacute; 40 bytes.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">NomeAplicativo=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave o nome do aplicativo de automa&ccedil;&atilde;o comercial, com at&eacute; 40 bytes.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">Versao=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave a vers&atilde;o do aplicativo de automa&ccedil;&atilde;o comercial, com at&eacute; 10 bytes. Ex: 01.00.05</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">Linha1=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave coment&aacute;rios do programa aplicativo, com at&eacute; 42 bytes. Caso n&atilde;o possua pode deixar em branco.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">Linha2=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave coment&aacute;rios do programa aplicativo, com at&eacute; 42 bytes. Caso n&atilde;o possua pode deixar em branco.</font></td>
        </tr>
    </tbody>
</table>
<p><font face="Verdana" size="1"></font></p>
<table width="100%" border="0">
    <tbody>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" colspan="2"><font color="#000099" size="1"><strong>[ECF]</strong></font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">IM=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave a Inscri&ccedil;&atilde;o Municipal do estabelecimento que possui a ECF, com at&eacute; 20 bytes. Sem m&aacute;scara.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font color="#000099" size="1">UF=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font size="1">Informe nesta chave a Unidade da Federa&ccedil;&atilde;o do estabelecimento que possui a ECF, com at&eacute; 2 posi&ccedil;&otilde;es. Esta chave deve possuir o valor SP (UF=SP) obrigatoriamente para que a dll possa gerar o arquivo. Sem m&aacute;scara.</font></td>
        </tr>
    </tbody>
</table>
<p><font face="Verdana" size="1">Exemplo:</font></p>
<p><font face="Verdana" color="#993300" size="1">[SoftwareHouse]<br />COO=003351<br />NumeroAplicativo=01<br />CNPJ=11111111111111<br />IE=22222222222222<br />IM=33333333333333<br />RazaoSocial=EMPRESA DE SOFTWARE TESTE<br />NomeAplicativo=APLICATIVO TESTE<br />Versao=1.0<br />Linha1=LINHA1 TESTE<br />Linha2=LINHA2 TESTE</font></p>
<p><font face="Verdana" color="#993300" size="1">[ECF]<br />IM=44444444444444<br />UF=SP</font></p>
<p><font face="Verdana" size="1"><strong>Obs:</strong> Se a impressora fiscal utilizada for MP-20 FI II ou MP-40 FI II, a chave Impressora na se&ccedil;&atilde;o [MFD] deve possuir o valor 0 (Impressora=0), caso contr&aacute;rio esta chave deve possuir o valor 1 (Impressora=1).</font></p>
<p><font face="Verdana" size="1">Configurando estas chaves, a dll estar&aacute; controlando os dados para a gera&ccedil;&atilde;o da CAT-52 ou Ato Cotepe 17/04.</font></p>
<p><font face="Verdana" size="1"><strong>Quando &eacute; gerado o arquivo final pronto para ser validado?</strong></font></p>
<p><font face="Verdana" size="1">Existem 3 situa&ccedil;&otilde;es:</font></p>
<p><font face="Verdana" size="1">1) Quando for executada a Redu&ccedil;&atilde;o Z pela aplica&ccedil;&atilde;o de automa&ccedil;&atilde;o comercial;<br />2) Quando a impressora emitir automaticamente a Redu&ccedil;&atilde;o Z &agrave;s 02:00 horas da manh&atilde; e, posteriormente, for aberto o cupom fiscal e;<br />3) Quando a impressora emitir automaticamente a Redu&ccedil;&atilde;o Z quando for ligada no dia seguinte e, posteriormente, for aberto o primeiro cupom fiscal do dia.</font></p>
<p><font face="Verdana" size="1">Nas impressoras fiscais matriciais, a dll ir&aacute; criar e manter um arquivo de extens&atilde;o .RFD durante o movimento do dia (este arquivo corresponde ao Registro de Fita-Detalhe e seu conte&uacute;do &eacute; criptografado).</font></p>
<p><font face="Verdana" size="1">Quando ocorrer uma das 3 situa&ccedil;&otilde;es acima, a dll ir&aacute; converter este arquivo em um novo arquivo (sem extens&atilde;o .RFD) no formato e layout da portaria CAT-52, pronto para ser validado no site da SEFAZ/SP.</font></p>
<p><font face="Verdana" size="1">Nas impressoras fiscais t&eacute;rmicas, a dll ir&aacute; gerar o arquivo final diretamente da MFD (Mem&oacute;ria de Fita-Detalhe) da impressora, quando ocorrer uma das 3 situa&ccedil;&otilde;es acima, ou seja, a dll far&aacute; o download da MFD do dia do movimento, e criar&aacute; o arquivo no formato e layout do Ato Cotepe 17/04.</font></p>
<p><font face="Verdana" size="1"><strong>Onde &eacute; gerado o arquivo final?</strong></font></p>
<p><font face="Verdana" size="1">O arquivo da portaria CAT-52 ou Ato Cotepe 17/04 &eacute; gerado no caminho configurado na chave Path do arquivo BemaFI32.ini. Al&eacute;m do arquivo final, o arquivo .RFD ou .MFD tamb&eacute;m &eacute; gerado neste caminho.</font></p>
<p><font face="Verdana" size="2"><strong><em>Bematech Monitor (ambiente Windows e DOS)</em></strong></font></p>
<p><font face="Verdana" size="1">O driver <a href="http://www.bematech.com.br/suporte/downloads/fisc_win/bematechmonitor.zip">Bematech Monitor</a> para acesso remoto &agrave;s impressoras fiscais Bematech tamb&eacute;m est&aacute; preparado para a portaria CAT-52 e Ato Cotepe 17/04, pois ele interage com a dll BemaFI32. Ent&atilde;o, basta configurar as chaves citadas acima no arquivo BemaFI32.ini da esta&ccedil;&atilde;o.</font></p>
<p><font face="Verdana" size="1">Aplica&ccedil;&otilde;es em ambiente DOS (janela DOS) tamb&eacute;m podem gerar o arquivo da CAT-52 e Ato Cotepe 17/04, comunicando com as impressoras fiscais Bematech, atrav&eacute;s do Bematech Monitor. </font></p>
<p><font face="Verdana" size="1">O Bematech Monitor foi criado para acessar &agrave;s impressoras fiscais Bematech remotamente, por&eacute;m seu &quot;mecanismo&quot; de comunica&ccedil;&atilde;o &eacute; &quot;troca de arquivos&quot;, ou seja, a dll cria um arquivo com um c&oacute;digo e o Bematech Monitor transforma este c&oacute;digo na fun&ccedil;&atilde;o correspondente da dll. Portanto, sua aplica&ccedil;&atilde;o em DOS pode criar este arquivo (BemaFI32.cmd) com o c&oacute;digo da fun&ccedil;&atilde;o correspondente ao processo que deseja executar na impressora e envia-o para o Bematech Monitor, este por sua vez l&ecirc; o arquivo e realiza todo o processo de envio &agrave; impressora, controlando os dados para a gera&ccedil;&atilde;o da CAT-52 e Ato Cotepe 17/04 (veja no arquivo de ajuda BemaFI32.chm, t&oacute;pico &quot;Utilizando a DLL em aplica&ccedil;&otilde;es 16 Bits&quot;, mais informa&ccedil;&otilde;es sobre seu uso).</font></p>
<p><font face="Verdana" size="1">Al&eacute;m disso, se sua aplica&ccedil;&atilde;o DOS faz acesso &agrave;s impressoras fiscais Bematech atrav&eacute;s do Bemafi.exe, voc&ecirc; tamb&eacute;m poder&aacute; usar o Bematech Monitor.</font></p>
<p><font face="Verdana" size="1">O Bematech Monitor reconhece a sintaxe e nomenclatura do arquivo Bemafi.cmd. Ent&atilde;o, basta retirar a chamada ao Bemafi.exe e criar o arquivo Bemafi.cmd normalmente, gravando-o na pasta de monitoramento do Bematech Monitor. Se o arquivo BemaFI32.ini estiver configurado para gerar a CAT-52 e Ato Cotepe 17/04, o arquivo final ser&aacute; gerado.</font></p>
<p><font face="Verdana" size="2"><strong><em>Gera&ccedil;&atilde;o do arquivo CAT-52 / Ato Cotepe 17/04 retroativo</em></strong></font></p>
<p><font face="Verdana" size="1">&Eacute; poss&iacute;vel gerar o arquivo da portaria CAT-52 e Ato Cotepe 17/04 retroativo, de duas maneiras:</font></p>
<p><font face="Verdana" size="1"><strong>- pela BemaFI32.dll</strong></font></p>
<p><font face="Verdana" size="1">Implementamos na dll a fun&ccedil;&atilde;o Bematech_FI_GeraRegistrosCAT52MFD que permite gerar o arquivo final, a partir de informa&ccedil;&otilde;es contidas na MFD das impressoras fiscais t&eacute;rmicas ou a partir do arquivo .RFD ou .MFD gerados anteriormente.</font></p>
<p><font face="Verdana" size="1">A fun&ccedil;&atilde;o Bematech_FI_GeraRegistrosCAT52MFD possui os seguintes par&acirc;metros:</font></p>
<p><font face="Verdana" size="1">Arquivo: STRING com o nome do arquivo .MFD ou .RFD de onde os registros ser&atilde;o gerados. Informar o caminho completo.</font></p>
<p><font face="Verdana" size="1">DataGeracao: STRING com a data que os registros ser&atilde;o gerados, no formato ddmmaa, dd/mm/aa, ddmmaaaa ou dd/mm/aaaa.</font></p>
<p><font face="Verdana" size="1">E, funciona da seguinte maneira:</font></p>
<p><font face="Verdana" size="1">- Para os modelos de impressoras fiscais matriciais &eacute; obrigat&oacute;rio informar o arquivo .RFD como par&acirc;metro. O par&acirc;metro que corresponde a data n&atilde;o &eacute; obrigat&oacute;rio e ser&aacute; ignorado caso seja informado. O arquivo da CAT-52 ser&aacute; gerado com as informa&ccedil;&otilde;es contidas no arquivo .RFD informado. </font></p>
<p><font face="Verdana" size="1">- Para os modelos de impressoras fiscais t&eacute;rmicas com MFD temos as seguintes possibilidades: </font></p>
<p><font face="Verdana" size="1">a) se n&atilde;o forem informados o arquivo .MFD e a data como par&acirc;metros, a fun&ccedil;&atilde;o far&aacute; o download da MFD da data atual e far&aacute; a gera&ccedil;&atilde;o do arquivo do Ato Cotepe 17/04. </font></p>
<p><font face="Verdana" size="1">b) se for informado o arquivo .MFD e n&atilde;o for informada a data, a fun&ccedil;&atilde;o retornar&aacute; erro. </font></p>
<p><font face="Verdana" size="1">c) se for informada apenas a data, a fun&ccedil;&atilde;o far&aacute; o download da MFD com base na data informada e far&aacute; a gera&ccedil;&atilde;o do arquivo do Ato Cotepe 17/04. </font></p>
<p><font face="Verdana" size="1">d) se forem informados o arquivo .MFD e a data, a fun&ccedil;&atilde;o far&aacute; a gera&ccedil;&atilde;o do arquivo do Ato Cotepe 17/04 com as informa&ccedil;&otilde;es contidas no arquivo .MFD na data informada. </font></p>
<p><font face="Verdana" size="1">- Para o emulador da impressora fiscal a fun&ccedil;&atilde;o ter&aacute; efeito, se a comunica&ccedil;&atilde;o com ele for realizada atrav&eacute;s de seu cabo serial fisicamente conectado ao micro (COM1 &lt;-&gt; COM2, por exemplo), pois &eacute; realizado o download da MFD para a gera&ccedil;&atilde;o do arquivo. A pinagem deste cabo est&aacute; descrito no arquivo de ajuda do emulador.</font></p>
<p><font face="Verdana" size="1"><em>Exemplo em Visual Basic:</em></font></p>
<p><font face="Verdana" color="#993300" size="1">iRetorno = Bematech_FI_GeraRegistrosCAT52MFD(&quot;C:\download.mfd&quot;, &quot;30/07/2007&quot;) </font></p>
<p><font face="Verdana" size="1">ou </font></p>
<p><font face="Verdana" color="#993300" size="1">iRetorno = Bematech_FI_GeraRegistrosCAT52MFD(&quot;C:\BEB00007.M57.rfd&quot;, &quot;30/07/2007&quot;) </font></p>
<p><font face="Verdana" size="1"><em>Exemplo em Delphi:</em></font></p>
<p><font face="Verdana" color="#993300" size="1">Arquivo := 'C:\download.mfd'; <br />Data := '30/07/2007'; <br /><br /></font><font face="Verdana" color="#993300" size="1">iRetorno := Bematech_FI_GeraRegistrosCAT52MFD( pchar( Arquivo ), pchar( Data ) );</font></p>
<p><font face="Verdana" size="1">ou </font></p>
<p><font face="Verdana" color="#993300" size="1">Arquivo := 'C:\BEB00007.M57.rfd'; <br />Data := '30/07/2007';<br /><br /></font><font face="Verdana" size="1"><font color="#993300">iRetorno := Bematech_FI_GeraRegistrosCAT52MFD( pchar( Arquivo ), pchar( Data ) );</font> </font></p>
<p><font face="Verdana" size="1"><strong>- pelo WinMFD2</strong></font></p>
<p><font face="Verdana" size="1">A Bematech disponibiliza em seu site um aplicativo chamado <a href="http://www.bematech.com.br/suporte/downloads/fisc_win/WINMFD2.zip">WinMFD2</a> que possibilita a gera&ccedil;&atilde;o do arquivo da portaria CAT-52 e Ato Cotepe 17/04 retroativo, nas impressoras fiscais matriciais e t&eacute;rmicas.</font></p>
<p><font face="Verdana" size="1">A utiliza&ccedil;&atilde;o deste aplicativo se d&aacute; da seguinte maneira:</font></p>
<p><font face="Verdana" size="1">1) para impressoras fiscais t&eacute;rmicas com MFD</font></p>
<p><font face="Verdana" size="1">- No menu &quot;Comunica&ccedil;&atilde;o&quot;, selecione a porta de comunica&ccedil;&atilde;o (fig. 1) onde a impressora est&aacute; conectada e neste mesmo menu selecione o modelo da impressora (fig. 2).</font></p>
<table width="100%" border="0">
    <tbody>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif">
            <div align="center"><a href="http://www.bematech.com.br/marketing/emkt/images/flashtip/winmfd_conf_porta.jpg"><img height="163" alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/winmfd_conf_porta.jpg" width="297" /></a><br />fig. 1</div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif">
            <div align="center"><a href="http://www.bematech.com.br/marketing/emkt/images/flashtip/winmfd_conf_modelo.jpg"><img height="180" alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/winmfd_conf_modelo.jpg" width="327" /></a><br />fig. 2</div>
            </td>
        </tr>
    </tbody>
</table>
<p><font face="Verdana" size="1">- No menu &quot;Arquivo&quot;, selecione a op&ccedil;&atilde;o CAT-52 (fig. 3).</font>&nbsp;</p>
<p align="center"><a href="http://www.bematech.com.br/marketing/emkt/images/flashtip/winmfd_arq_cat52.jpg"><img height="234" alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/winmfd_arq_cat52.jpg" width="182" /></a><br /><font face="Verdana" size="1">fig. 3</font></p>
<p><font face="Verdana" size="1">- Na janela que surgir, selecione as op&ccedil;&otilde;es desejadas e clique no bot&atilde;o &quot;Gerar Registros&quot;.</font></p>
<p align="center"><a href="http://www.bematech.com.br/marketing/emkt/images/flashtip/winmfd_tela_cat52.jpg"><img height="447" alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/winmfd_tela_cat52.jpg" width="408" /></a></p>
<p><font face="Verdana" size="1"></font></p>
<p><font face="Verdana" size="1">A gera&ccedil;&atilde;o do Ato Cotepe 17/04, diretamente da impressora, leva aproximadamente 30 segundos para um dia de movimento fiscal com 350 cupons fiscais emitidos.</font></p>
<p><font face="Verdana" size="1"><strong>- pelo micro-terminal SB-2010/SB-2011/SB-3010</strong></font></p>
<p><font face="Verdana" size="1">A gera&ccedil;&atilde;o do arquivo para os micro-terminais fiscais Bematech ocorrer&aacute; somente se a impressora fiscal utilizada por eles for t&eacute;rmicas (MFD). Desta forma, a impressora dever&aacute; ser conectada a um computador com o aplicativo WinMFD2 instalado, e proceder conforme orienta&ccedil;&otilde;es acima (t&oacute;pico &quot;pelo WinMFD2&quot; ).</font></p>
<p><font face="Verdana" size="1">Obs: para os micro-terminais que usam impressoras fiscais matriciais a gera&ccedil;&atilde;o do arquivo para a portaria CAT-52 n&atilde;o ser&aacute; poss&iacute;vel, pois ambos os equipamentos n&atilde;o possuem mem&oacute;ria para armazenamento e emiss&atilde;o dos registros da portaria.</font></p>
<p><font face="Verdana" size="2"><strong><em>Nomenclatura do arquivo</em></strong></font></p>
<p><font face="Verdana" size="1">O arquivo gerado para a portaria CAT-52 e Ato Cotepe 17/04 possui um conte&uacute;do de texto, vis&iacute;vel pelo &quot;Bloco de Notas (notepad)&quot; do Windows (por exemplo). Entretanto, sua nomenclatura &eacute; definida da seguinte forma:</font></p>
<p><font face="Verdana" size="1">- Nome do arquivo no formato <em>FFM12345.DMA</em>, sendo:</font>&nbsp;</p>
<table style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="100%" border="0">
    <tbody>
        <tr>
            <td width="10%"><em><font size="1">FF</font></em></td>
            <td width="90%"><font size="1">&eacute; a identifica&ccedil;&atilde;o do fabricante da impressora fiscal.</font></td>
        </tr>
        <tr>
            <td width="10%"><em><font size="1">M</font></em></td>
            <td width="90%"><font size="1">&eacute; a identifica&ccedil;&atilde;o do modelo da impressora fiscal.</font></td>
        </tr>
        <tr>
            <td width="10%"><em><font size="1">12345</font></em></td>
            <td width="90%"><font size="1">s&atilde;o os cinco &uacute;ltimos d&iacute;gitos do n&uacute;mero de s&eacute;rie da impressora fiscal.</font></td>
        </tr>
        <tr>
            <td valign="top" width="10%"><em><font size="1">DMA</font></em></td>
            <td width="90%"><font size="1">s&atilde;o a identifica&ccedil;&atilde;o do dia, m&ecirc;s e ano do movimento, codificados com n&uacute;meros de 1 a 9 para os dias compreendidos entre 01 e 09, e letras de A a Z compreendendo os dias acima de 09, sendo que o dia 10 corresponde a letra A, dia 11 a letra B, dia 12 a letra C e, assim, sucessivamente. Isso tamb&eacute;m se aplica para o m&ecirc;s e ano.</font></td>
        </tr>
    </tbody>
</table>
<p><font face="Verdana" size="1">Exemplo:</font></p>
<p><font face="Verdana" size="1"><strong><font size="2"><em>BEE28347.1C7</em></font></strong>, sendo:</font></p>
<p><font face="Verdana" size="1"></font></p>
<p>&nbsp;</p>
<table style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="100%" border="0">
    <tbody>
        <tr>
            <td valign="top" width="8%"><em><strong><font size="1">BE</font></strong></em></td>
            <td colspan="2"><font size="1">identifica Bematech.</font></td>
        </tr>
        <tr>
            <td valign="top" width="8%" rowspan="11"><em><strong><font size="1">E</font></strong></em></td>
            <td colspan="2"><font size="1">identifica o modelo MP-2100 TH FI, onde:</font></td>
        </tr>
        <tr>
            <td width="17%">
            <div align="left"><em><strong><font size="1">Modelo ECF</font></strong></em></div>
            </td>
            <td width="75%"><em><strong><font size="1">Valor</font></strong></em></td>
        </tr>
        <tr>
            <td width="17%">
            <div align="left"><font size="1">MP 20 FI II</font></div>
            </td>
            <td width="75%"><font size="1">&nbsp;&nbsp;6</font></td>
        </tr>
        <tr>
            <td width="17%">
            <div align="left"><font size="1">MP 40 FI II</font></div>
            </td>
            <td width="75%"><font size="1">&nbsp;&nbsp;8</font></td>
        </tr>
        <tr>
            <td width="17%">
            <div align="left"><font size="1">MP 25 FI</font></div>
            </td>
            <td width="75%"><font size="1">&nbsp;&nbsp;B</font></td>
        </tr>
        <tr>
            <td width="17%">
            <div align="left"><font size="1">MP 50 FI</font></div>
            </td>
            <td width="75%"><font size="1">&nbsp;&nbsp;C</font></td>
        </tr>
        <tr>
            <td width="17%">
            <div align="left"><font size="1">MP 2000 TH FI</font></div>
            </td>
            <td width="75%"><font size="1">&nbsp;&nbsp;D</font></td>
        </tr>
        <tr>
            <td width="17%">
            <div align="left"><font size="1">MP 2100 TH FI</font></div>
            </td>
            <td width="75%"><font size="1">&nbsp;&nbsp;E</font></td>
        </tr>
        <tr>
            <td width="17%">
            <div align="left"><font size="1">MP 3000 TH FI</font></div>
            </td>
            <td width="75%"><font size="1">&nbsp;&nbsp;F</font></td>
        </tr>
        <tr>
            <td width="17%">
            <div align="left"><font size="1">MP 6000 TH FI</font></div>
            </td>
            <td width="75%"><font size="1">&nbsp;&nbsp;G</font></td>
        </tr>
        <tr>
            <td valign="top" width="17%">
            <div align="left"><font size="1">MP 6100 TH FI</font></div>
            </td>
            <td width="75%"><font size="1">&nbsp;&nbsp;H</font></td>
        </tr>
        <tr>
            <td valign="top" width="8%"><em><strong><font size="1">28347</font></strong></em></td>
            <td colspan="2"><font size="1">cinco &uacute;ltimos d&iacute;gitos do n&uacute;mero de s&eacute;rie da impressora fiscal.</font></td>
        </tr>
        <tr>
            <td valign="top" width="8%"><em><strong><font size="1">1C7</font></strong></em></td>
            <td colspan="2"><font size="1">identifica o dia 01 de dezembro de 2007.</font></td>
        </tr>
    </tbody>
</table>
<p><font face="Verdana" size="1"></font></p>]]>
    </content>
</entry>
<entry>
    <title>Bematech FlashTip - 25a. Edição - Utilizando o micro-terminal SB-2030E remotamente</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2007/08/bematech_flashtip_25a_edicao_u.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=150" title="Bematech FlashTip - 25a. Edição - Utilizando o micro-terminal SB-2030E remotamente" />
    <id>tag:partners.bematech.com.br,2007:/flashtip//2.150</id>
    
    <published>2007-08-30T12:52:13Z</published>
    <updated>2007-08-30T13:31:25Z</updated>
    
    <summary><![CDATA[Caro parceiro, Muitos desenvolvedores nos perguntam se &eacute; poss&iacute;vel utilizar nosso micro-terminal SB-2030E em modo remoto, onde a aplica&ccedil;&atilde;o comercial pudesse control&aacute;-lo remotamente na rede, enviando e lendo informa&ccedil;&otilde;es. A resposta &eacute; &quot;Sim&quot;!&Eacute; poss&iacute;vel colocarmos o micro-terminal SB-2030E &quot;escravo&quot; de...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Dicas" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<p><font face="Verdana" size="1">Caro parceiro, <br /><br /></font><font face="Verdana" size="1">Muitos desenvolvedores nos perguntam se &eacute; poss&iacute;vel utilizar nosso micro-terminal SB-2030E em modo remoto, onde a aplica&ccedil;&atilde;o comercial pudesse control&aacute;-lo remotamente na rede, enviando e lendo informa&ccedil;&otilde;es. A resposta &eacute; &quot;Sim&quot;!<br /><br /></font><font face="Verdana" size="1">&Eacute; poss&iacute;vel colocarmos o micro-terminal SB-2030E &quot;escravo&quot; de nossa aplica&ccedil;&atilde;o, permitindo que toda a regra de neg&oacute;cio fique na aplica&ccedil;&atilde;o que roda no PC, possibilitando que os comandos possam ser enviados diretamente para ele. Comandos de acesso ao display, teclado, portas serias, banco de dados, etc podem ser enviados da aplica&ccedil;&atilde;o direto para o micro-terminal.<br /><br /></font></p>]]>
        <![CDATA[<p><font face="Verdana" size="1">Observe que a linguagem de programa&ccedil;&atilde;o utilizada para programar o SB-2030E &eacute; &quot;C/C++&quot;, mas atrav&eacute;s do modo remoto a linguagem que utilizamos &eacute; a pr&oacute;pria linguagem de nossa aplica&ccedil;&atilde;o (Delphi, VB ou C#, por exemplo), pois quem comanda o micro-terminal neste modo &eacute; a pr&oacute;pria aplica&ccedil;&atilde;o. Portanto, n&atilde;o precisamos conhecer da linguagem &quot;C/C++&quot; para utiliz&aacute;-lo.<br /><br /></font><font face="Verdana" size="1">Nesta edi&ccedil;&atilde;o de nosso Flash-tip, estaremos conhecendo e trabalhando com este recurso dispon&iacute;vel em nosso micro-terminal.<br /><br /></font><font face="Verdana" size="1">Ent&atilde;o... vamos l&aacute;!<br /><br /><br /></font><font face="Verdana" size="1"><strong>- Conhecendo a fun&ccedil;&atilde;o &quot;modoremoto()&quot;<br /><br /></strong></font><font face="Verdana" size="1">No kit de desenvolvimento do micro-terminal SB-2030E (SDK), existe uma fun&ccedil;&atilde;o chamada &quot;modoremoto&quot; que tem por finalidade colocar o micro-terminal em modo &quot;escravo&quot;, dependente da aplica&ccedil;&atilde;o que ir&aacute; comand&aacute;-lo.<br /><br /></font><font face="Verdana" size="1">A implementa&ccedil;&atilde;o desta fun&ccedil;&atilde;o no micro-terminal &eacute; muito simples, basta abrir um novo projeto no ambiente VisualSDK Builder (conforme j&aacute; visto em edi&ccedil;&otilde;es passadas) e inserir o pequeno c&oacute;digo abaixo:<br /><br /></font><font face="Courier New" color="#993300" size="1">#include &lt;dos.h&gt;<br />#include &lt;mem.h&gt;<br />#include &quot;..\include\define.h&quot;<br /><br /></font><font face="Verdana" size="1"><font face="Courier New" color="#993300">void far main()<br />{<br />modoremoto();<br />}</font><br /><br /></font><font face="Verdana" size="1">Ap&oacute;s transferir este c&oacute;digo para o SB-2030E, aparecer&aacute; em seu display as seguintes informa&ccedil;&otilde;es:<br /><br /></font><font face="Verdana" size="1"><font face="Courier New" color="#993300">MODO REMOTO&nbsp;Num.&nbsp;Terminal=1<br />Velocidade Comunicacao=57600<br /></font><br /></font><font face="Verdana" size="1">Estas informa&ccedil;&otilde;es indicam que o SB-2030E est&aacute; pronto para receber as instru&ccedil;&otilde;es da aplica&ccedil;&atilde;o via rede.<br /><br /></font><font face="Verdana" size="1"><strong><br />- Usando a BemaSB32.dll no envio de comandos para o SB-2030E remoto<br /></strong><br /></font><font face="Verdana" size="1">Neste exemplo, usaremos as fun&ccedil;&otilde;es da dll BemaSB32 respons&aacute;veis pela comunica&ccedil;&atilde;o com o micro-terminal em modo remoto. Vamos primeiro conhecer cada fun&ccedil;&atilde;o para depois criarmos o c&oacute;digo. Usaremos a linguagem Delphi para edit&aacute;-lo.</font></p>
<table style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="100%" border="0" dwcopytype="CopyTableRow">
    <tbody>
        <tr>
            <td valign="top" width="43%">
            <p><font size="1">- Bematech_SB_SelecionaInterface</font></p>
            </td>
            <td width="57%"><font size="1">: fun&ccedil;&atilde;o que seleciona a interface de comunica&ccedil;&atilde;o do SB-<br />&nbsp; 2030E.</font></td>
        </tr>
        <tr>
            <td width="43%">
            <p><font size="1">- Bematech_SB_AdicionaIp</font></p>
            </td>
            <td width="57%"><font size="1">: fun&ccedil;&atilde;o que adiciona o IP do SB-2030E na aplica&ccedil;&atilde;o.</font></td>
        </tr>
        <tr>
            <td width="43%"><font size="1">- Bematech_SB_RS485_EnviaCmdTamanho</font></td>
            <td width="57%"><font size="1">: fun&ccedil;&atilde;o que envia comandos SB-2030E.</font></td>
        </tr>
    </tbody>
</table>
<p><font face="Verdana" size="1">Basicamente, s&atilde;o estas 3 fun&ccedil;&otilde;es que usaremos na implementa&ccedil;&atilde;o e comunica&ccedil;&atilde;o com o SB-2030E.<br /><br /></font><font face="Verdana" size="1">Obs: A dll BemaSB32 &eacute; disponibilizada junto com a instala&ccedil;&atilde;o do VisualSDK Builder.<br /><br /><br /></font><font face="Verdana" size="1"><strong>- Declarando as fun&ccedil;&otilde;es da BemaSB32.dll<br /><br /></strong></font><font face="Verdana" size="1">Abra um projeto novo e inclua estas linhas em seu in&iacute;cio (se preferir, pode adicion&aacute;-las em seu m&oacute;dulo de declara&ccedil;&otilde;es):<br /><br /></font><font face="Courier New" color="#993300" size="1">function Bematech_SB_SelecionaInterface( TipoInterface: Integer ): integer; StdCall; External 'BEMASB32.DLL';<br /><br /></font><font face="Courier New" color="#993300" size="1">function Bematech_SB_AdicionaIp( NumeroTerminal: Integer; NumeroIP : String): Integer; StdCall; far; External 'BEMASB32.DLL';<br /><br /></font><font face="Courier New" color="#993300" size="1">function Bematech_SB_RS485_EnviaCmdTamanho( Comando: String; IDterminal: String; nProcesso: String; Confirmacao: String; Dados: String; StRetorno: String; DataRetorno: String; TemRetorno: String; Tamanho: String ): Integer; StdCall; External 'BEMASB32.DLL';<br /></font><font face="Verdana"><br /><font size="1">Adicione um bot&atilde;o ao formul&aacute;rio chamado &quot;Adiciona IP&quot;, que far&aacute; a associa&ccedil;&atilde;o do IP ao n&uacute;mero do terminal. O c&oacute;digo para este bot&atilde;o ficar&aacute; assim:<br /><br /></font></font><font face="Courier New" color="#993300" size="1">procedure TForm1.Button1Click(Sender: TObject);<br />var<br />&nbsp;&nbsp;&nbsp;iRetorno&nbsp;: integer;<br />&nbsp;&nbsp;&nbsp;cIP&nbsp;: string;<br />begin<br />&nbsp;&nbsp;&nbsp;cIP := '10.10.100.100';<br />&nbsp;&nbsp;&nbsp;iRetorno := Bematech_SB_SelecionaInterface( 2 );<br />&nbsp;&nbsp;&nbsp;if ( iRetorno &lt;&gt; 1 ) then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox( 'Erro ao selecionar interface!', 'Aten&ccedil;&atilde;o', MB_IconError + MB_OK )<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iRetorno := Bematech_SB_AdicionaIp( 1, pchar( cIP ) );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( iRetorno &lt;&gt; 1 ) then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox( 'Erro ao adicionar IP!', 'Aten&ccedil;&atilde;o', MB_IconError + MB_OK );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br />end;<br /><br /></font><font face="Verdana" size="1">Repare que neste c&oacute;digo j&aacute; estamos definindo, atrav&eacute;s da fun&ccedil;&atilde;o Bematech_FI_SelecionaInterface, a interface de comunica&ccedil;&atilde;o que ser&aacute; usada: TCP/IP (par&acirc;metro da fun&ccedil;&atilde;o igual a 2). Estamos associando o IP 10.10.100.100 do SB-2030E ao terminal de n&uacute;mero 1. Isso dever&aacute; ser feito, respectivamente, para cada SB-2030E dispon&iacute;vel na rede. <br /><br /></font><font face="Verdana" size="1">Obs: Nas edi&ccedil;&otilde;es anteriores do Flash-tip, vimos como procurar o SB-2030E na rede, retornando seu IP.<br /><br /></font><font face="Verdana" size="1">Todos os comandos dispon&iacute;veis no modo remoto est&atilde;o relacionados &agrave;s fun&ccedil;&otilde;es do SDK. Por exemplo: para limpar o display do SB-2030E, usamos a fun&ccedil;&atilde;o clrscrU() no modo program&aacute;vel e para o modo remoto usaremos o comando &quot;111&quot; com a sigla &quot;U&quot; - a sigla indica que &eacute; display do usu&aacute;rio.<br /><br /></font><font face="Verdana" size="1">Iremos utilizar alguns comandos b&aacute;sicos para conhecer esta funcionalidade do SB-2030E. Os demais comandos podem ser vistos no help do VisualSDK Builder, t&oacute;pico &quot;Trabalhando com o SB2000 remotamente&quot;. Baixe a vers&atilde;o atualizada aqui!<br /><br /><br /></font><font face="Verdana" size="1"><strong>- Limpando o Display do Usu&aacute;rio<br /><br /></strong></font><font face="Verdana" size="1">Adicione um bot&atilde;o ao formul&aacute;rio chamado &quot;Limpa Display&quot; e insira o seguinte c&oacute;digo:<br /><br /></font><font face="Verdana"><font size="1"><font color="#993300"><font face="Courier New">procedure TForm1.Button2Click(Sender: TObject);<br />var</font><br /></font></font><font face="Courier New" color="#993300" size="1">&nbsp;&nbsp;&nbsp;cStatusSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferRetornoSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferEnviado : string;<br />&nbsp;&nbsp;&nbsp;cComando : string;<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal : string;<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso : string;<br />&nbsp;&nbsp;&nbsp;cEnviaStatus : string;<br />&nbsp;&nbsp;&nbsp;cTemRetorno : string;<br />&nbsp;&nbsp;&nbsp;cTamDados&nbsp;: string;<br /><br /></font></font><font face="Courier New" color="#993300" size="1">&nbsp;&nbsp;&nbsp;iConta : integer;<br />&nbsp;&nbsp;&nbsp;iRetorno : integer;<br />begin<br />&nbsp;&nbsp;&nbsp;{ Limpa o Display do Usu&aacute;rio.<br />&nbsp;&nbsp;&nbsp;Fun&ccedil;&atilde;o clrscrU do SDK. }<br /><br /></font><font face="Courier New" color="#993300" size="1">&nbsp;&nbsp;&nbsp;for iConta := 1 to 2 do cStatusSB2000 := cStatusSB2000 + ' ';<br />&nbsp;&nbsp;&nbsp;for iConta := 1 to 256 do cBufferRetornoSB2000 := cBufferRetornoSB2000 + ' ';<br /><br /></font><font face="Courier New" color="#993300" size="1">&nbsp;&nbsp;&nbsp;cComando := '111';<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal := '1';<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso := '0001';<br />&nbsp;&nbsp;&nbsp;cEnviaStatus := '1';<br />&nbsp;&nbsp;&nbsp;cTemRetorno := '0';<br />&nbsp;&nbsp;&nbsp;cBufferEnviado := 'U';<br />&nbsp;&nbsp;&nbsp;cTamDados := inttostr( length( cBufferEnviado ) );<br /><br /></font><font face="Courier New" color="#993300" size="1">&nbsp;&nbsp;&nbsp;iRetorno := Bematech_SB_RS485_EnviaCmdTamanho( cComando, cNumeroTerminal, cNumeroProcesso, cEnviaStatus, cBufferEnviado, cStatusSB2000, cBufferRetornoSB2000, cTemRetorno, cTamDados );<br />end;<br /><br /></font><font face="Verdana" size="1">A fun&ccedil;&atilde;o Bematech_SB_RS485_EnviaCmdTamanho tem por finalidade enviar o comando para o micro-terminal. Esta &eacute; a fun&ccedil;&atilde;o mais utilizada na comunica&ccedil;&atilde;o, ent&atilde;o vamos entender seus par&acirc;metros:</font></p>
<table style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="101%" border="0" dwcopytype="CopyTableRow">
    <tbody>
        <tr>
            <td width="23%"><font size="1">cComando</font></td>
            <td width="77%"><font size="1">: STRING num&eacute;rica de 3 caracteres com o identificador do comando.</font></td>
        </tr>
        <tr>
            <td width="23%"><font size="1">cNumeroTerminal</font></td>
            <td width="77%"><font size="1">: STRING num&eacute;rica de at&eacute; 3 caracteres com o n&uacute;mero do SB-2030E.</font></td>
        </tr>
        <tr>
            <td valign="top" width="23%"><font size="1">cNumeroProcesso</font></td>
            <td width="77%"><font size="1">: STRING num&eacute;rica de 4 caracteres com o identificador do processo. Este<br />&nbsp;&nbsp;identificador pode ser fixo.</font></td>
        </tr>
        <tr>
            <td valign="top" width="23%"><font size="1">cEnviaStatus</font></td>
            <td width="77%"><font size="1">: STRING num&eacute;rica de 1 caractere com a confirma&ccedil;&atilde;o de envio de status<br />&nbsp; (ACK/NACK), onde: <br />&nbsp;&nbsp;&quot;0&quot;: para n&atilde;o retornar o Status <br />&nbsp;&nbsp;&quot;1&quot;: para retornar o Status.</font></td>
        </tr>
        <tr>
            <td valign="top" width="23%"><font size="1">cBufferEnviado</font></td>
            <td width="77%"><font size="1">: STRING alfanum&eacute;rica de tamanho livre, onde ser&atilde;o passados os par&acirc;metros que<br />&nbsp; o comando possuir.</font></td>
        </tr>
        <tr>
            <td valign="top" width="23%"><font size="1">cStatusSB2000</font></td>
            <td width="77%">
            <p><font size="1">: STRING de 2 bytes, passada por refer&ecirc;ncia, para armazenagem do retorno de<br />&nbsp; erro.</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="23%"><font size="1">cBufferRetornoSB2000</font></td>
            <td width="77%"><font size="1">: STRING de 256 bytes, passada por refer&ecirc;ncia, para armazenagem do retorno de<br />&nbsp; dados.</font></td>
        </tr>
        <tr>
            <td valign="top" width="23%"><font size="1">cTemRetorno</font></td>
            <td width="77%"><font size="1">: STRING num&eacute;rica de 1 caractere que indica se o comando possui ou n&atilde;o retorno <br />&nbsp; de dados, onde: <br />&nbsp;&nbsp;&quot;0&quot;: para n&atilde;o retornar dados. <br />&nbsp;&nbsp;&quot;1&quot;: para retornar dados.</font></td>
        </tr>
        <tr>
            <td width="23%"><font size="1">cTamDados</font></td>
            <td width="77%"><font size="1">: STRING com o valor de tamanho do par&acirc;metro cBufferEnviado.</font></td>
        </tr>
    </tbody>
</table>
<p><font face="Verdana" size="1">Obs: mesmo possuindo o termo &quot;RS485&quot; (criado quando os modelos do SB-2030 eram de rede serial RS-485), a fun&ccedil;&atilde;o tamb&eacute;m &eacute; compat&iacute;vel para o modelo SB-2030E (TCP/IP).<br /><br /><br /></font><font face="Verdana" size="1"><strong>- Escrevendo uma Mensagem no Display do Usu&aacute;rio<br /><br /></strong></font><font face="Verdana" size="1">Adicione um novo bot&atilde;o chamado &quot;Imprime Mensagem&quot; e insira o seguinte c&oacute;digo:<br /><br /></font><font face="Courier New" color="#993300" size="1">procedure TForm1.Button3Click(Sender: TObject);<br />var<br />&nbsp;&nbsp;&nbsp;cStatusSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferRetornoSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferEnviado : string;<br />&nbsp;&nbsp;&nbsp;cComando : string;<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal : string;<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso : string;<br />&nbsp;&nbsp;&nbsp;cEnviaStatus : string;<br />&nbsp;&nbsp;&nbsp;cTemRetorno : string;<br />&nbsp;&nbsp;&nbsp;cTamDados&nbsp;: string;<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">iConta : integer;<br />&nbsp;&nbsp;&nbsp;iRetorno : integer;<br />begin<br />&nbsp;&nbsp;&nbsp;{ Imprime uma mensagem no Display do Usu&aacute;rio.<br />&nbsp;&nbsp;&nbsp;Fun&ccedil;&atilde;o printfU do SDK. }<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">for iConta := 1 to 2 do cStatusSB2000 := cStatusSB2000 + ' ';<br />&nbsp;&nbsp;&nbsp;for iConta := 1 to 256 do cBufferRetornoSB2000 := cBufferRetornoSB2000 + ' ';<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">cComando := '117';<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal := '1';<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso := '0001';<br />&nbsp;&nbsp;&nbsp;cEnviaStatus := '1';<br />&nbsp;&nbsp;&nbsp;cTemRetorno := '0';<br />&nbsp;&nbsp;&nbsp;cBufferEnviado := 'U,TESTE DE MENSAGEM NO DISPLAY !!!';<br />&nbsp;&nbsp;&nbsp;cTamDados := inttostr( length( cBufferEnviado ) );<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" size="1"><font color="#993300">iRetorno := Bematech_SB_RS485_EnviaCmdTamanho( cComando, cNumeroTerminal, cNumeroProcesso, cEnviaStatus, cBufferEnviado, cStatusSB2000, cBufferRetornoSB2000, cTemRetorno, cTamDados );<br />end;</font><br /><br /><br /></font><font face="Verdana" size="1"><strong>- Ligando o Cursor no Display do Usu&aacute;rio<br /><br /></strong></font><font face="Verdana" size="1">Adicione um novo bot&atilde;o chamado &quot;Liga Cursor&quot; e insira o seguinte c&oacute;digo:<br /><br /></font><font face="Courier New" color="#993300" size="1">procedure TForm1.Button4Click(Sender: TObject);<br />var<br />&nbsp;&nbsp;&nbsp;cStatusSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferRetornoSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferEnviado : string;<br />&nbsp;&nbsp;&nbsp;cComando : string;<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal : string;<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso : string;<br />&nbsp;&nbsp;&nbsp;cEnviaStatus : string;<br />&nbsp;&nbsp;&nbsp;cTemRetorno : string;<br />&nbsp;&nbsp;&nbsp;cTamDados&nbsp;: string;<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">iConta : integer;<br />&nbsp;&nbsp;&nbsp;iRetorno : integer;<br />begin<br />&nbsp;&nbsp;&nbsp;{ Liga o cursor no Display do Usu&aacute;rio.<br />&nbsp;&nbsp;&nbsp;Fun&ccedil;&atilde;o setcursorU( ON ) do SDK. }<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">for iConta := 1 to 2 do cStatusSB2000 := cStatusSB2000 + ' ';<br />&nbsp;&nbsp;&nbsp;for iConta := 1 to 256 do cBufferRetornoSB2000 := cBufferRetornoSB2000 + ' ';<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">cComando := '115';<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal := '1';<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso := '0001';<br />&nbsp;&nbsp;&nbsp;cEnviaStatus := '1';<br />&nbsp;&nbsp;&nbsp;cTemRetorno := '0';<br />&nbsp;&nbsp;&nbsp;cBufferEnviado := 'U,3';<br />&nbsp;&nbsp;&nbsp;cTamDados := inttostr( length( cBufferEnviado ) );<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" size="1"><font color="#993300">iRetorno := Bematech_SB_RS485_EnviaCmdTamanho( cComando, cNumeroTerminal, cNumeroProcesso, cEnviaStatus, cBufferEnviado, cStatusSB2000, cBufferRetornoSB2000, cTemRetorno, cTamDados );<br />end;</font><br /><br /><br /></font><font face="Verdana" size="1"><strong>- Solicitando uma String do Teclado<br /><br /></strong></font><font face="Verdana" size="1">Adicione um novo bot&atilde;o chamado &quot;Pede String&quot; e insira o seguinte c&oacute;digo:<br /><br /></font><font face="Courier New" color="#993300" size="1">procedure TForm1.Button5Click(Sender: TObject);<br />var<br />&nbsp;&nbsp;&nbsp;cStatusSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferRetornoSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferEnviado : string;<br />&nbsp;&nbsp;&nbsp;cComando : string;<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal : string;<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso : string;<br />&nbsp;&nbsp;&nbsp;cEnviaStatus : string;<br />&nbsp;&nbsp;&nbsp;cTemRetorno : string;<br />&nbsp;&nbsp;&nbsp;cTamDados&nbsp;: string;<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">iConta : integer;<br />&nbsp;&nbsp;&nbsp;iRetorno : integer;<br />begin<br />&nbsp;&nbsp;&nbsp;{ Habilita uma entrada de STRING via teclado.<br />&nbsp;&nbsp;&nbsp;Fun&ccedil;&atilde;o getstring do SDK. }<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">for iConta := 1 to 2 do cStatusSB2000 := cStatusSB2000 + ' ';<br />&nbsp;&nbsp;&nbsp;for iConta := 1 to 256 do cBufferRetornoSB2000 := cBufferRetornoSB2000 + ' ';<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">cComando := '130';<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal := '1';<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso := '0001';<br />&nbsp;&nbsp;&nbsp;cEnviaStatus := '1';<br />&nbsp;&nbsp;&nbsp;cTemRetorno := '0';<br />&nbsp;&nbsp;&nbsp;cBufferEnviado := '20,8,NULL,NULL';<br />&nbsp;&nbsp;&nbsp;cTamDados := inttostr( length( cBufferEnviado ) );<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" size="1"><font color="#993300">iRetorno := Bematech_SB_RS485_EnviaCmdTamanho( cComando, cNumeroTerminal, cNumeroProcesso, cEnviaStatus, cBufferEnviado, cStatusSB2000, cBufferRetornoSB2000, cTemRetorno, cTamDados );<br />end;</font><br /><br /><br /></font><font face="Verdana" size="1"><strong>- Recebendo uma String do Teclado<br /><br /></strong></font><font face="Verdana" size="1">Adicione um novo bot&atilde;o chamado &quot;Recebe String&quot; e insira o seguinte c&oacute;digo: <br /><br /></font><font face="Courier New" color="#993300" size="1">procedure TForm1.Button6Click(Sender: TObject);<br />var<br />&nbsp;&nbsp;&nbsp;cStatusSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferRetornoSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferEnviado : string;<br />&nbsp;&nbsp;&nbsp;cComando : string;<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal : string;<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso : string;<br />&nbsp;&nbsp;&nbsp;cEnviaStatus : string;<br />&nbsp;&nbsp;&nbsp;cTemRetorno : string;<br />&nbsp;&nbsp;&nbsp;cTamDados&nbsp;: string;<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">iConta : integer;<br />&nbsp;&nbsp;&nbsp;iRetorno : integer;<br />begin<br />&nbsp;&nbsp;&nbsp;{ Recebe uma String do Teclado. }<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">for iConta := 1 to 2 do cStatusSB2000 := cStatusSB2000 + ' ';<br />&nbsp;&nbsp;&nbsp;for iConta := 1 to 256 do cBufferRetornoSB2000 := cBufferRetornoSB2000 + ' ';<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">cComando&nbsp;:= '101';<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal := '1';<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso := '0001';<br />&nbsp;&nbsp;&nbsp;cEnviaStatus := '1';<br />&nbsp;&nbsp;&nbsp;cTemRetorno := '1';<br />&nbsp;&nbsp;&nbsp;cBufferEnviado := '0001';<br />&nbsp;&nbsp;&nbsp;cTamDados := inttostr( length( cBufferEnviado ) );<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">iRetorno := Bematech_SB_RS485_EnviaCmdTamanho( cComando, cNumeroTerminal, cNumeroProcesso, cEnviaStatus, cBufferEnviado, cStatusSB2000, cBufferRetornoSB2000, cTemRetorno, cTamDados );<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">if ( copy( cStatusSB2000, 1, 1 ) = '1' ) and&nbsp;( copy( cBufferRetornoSb2000, 1, 1 ) &lt;&gt; '2' ) then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox( pchar( copy( cBufferRetornoSb2000, 3, length( cBufferRetornoSb2000 ) - 2 ) ), 'Informa&ccedil;&atilde;o', MB_ICONINFORMATION + MB_OK )<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox( 'N&atilde;o h&aacute; dados !', 'Informa&ccedil;&atilde;o', MB_ICONINFORMATION + MB_OK );<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" size="1"><font color="#993300">if copy( cBufferRetornoSb2000, 1, 1 ) = '2' then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox( 'Erro no retorno do Processo !', 'Erro', <br />MB_ICONERROR + MB_OK )<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox( 'N&uacute;mero do Processo OK !', 'Informa&ccedil;&atilde;o', MB_ICONINFORMATION + MB_OK );<br />end;</font><br /><br /><br /></font><font face="Verdana" size="1"><strong>- Verificando qual tecla foi pressionada<br /><br /></strong></font><font face="Verdana" size="1">Adicione um novo bot&atilde;o chamado &quot;Verifica Tecla Pressionada&quot; e insira o seguinte c&oacute;digo: <br /><br /></font><font face="Courier New" color="#993300" size="1">procedure TForm1.Button7Click(Sender: TObject);<br />var<br />&nbsp;&nbsp;&nbsp;cStatusSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferRetornoSB2000 : string;<br />&nbsp;&nbsp;&nbsp;cBufferEnviado : string;<br />&nbsp;&nbsp;&nbsp;cComando : string;<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal : string;<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso : string;<br />&nbsp;&nbsp;&nbsp;cEnviaStatus : string;<br />&nbsp;&nbsp;&nbsp;cTemRetorno : string;<br />&nbsp;&nbsp;&nbsp;cTamDados&nbsp;: string;<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">iConta : integer;<br />&nbsp;&nbsp;&nbsp;iRetorno : integer;<br />begin<br />&nbsp;&nbsp;&nbsp;{ Verifica qual tecla foi pressionada no SB-2030E.<br />&nbsp;&nbsp;&nbsp;Fun&ccedil;&atilde;o waitkey do SDK. }<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">for iConta := 1 to 2 do cStatusSB2000 := cStatusSB2000 + ' ';<br />&nbsp;&nbsp;&nbsp;for iConta := 1 to 256 do cBufferRetornoSB2000 := cBufferRetornoSB2000 + ' ';<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">cComando := '134';<br />&nbsp;&nbsp;&nbsp;cNumeroTerminal := '1';<br />&nbsp;&nbsp;&nbsp;cNumeroProcesso := '0001';<br />&nbsp;&nbsp;&nbsp;cEnviaStatus := '1';<br />&nbsp;&nbsp;&nbsp;cTemRetorno := '1';<br />&nbsp;&nbsp;&nbsp;cBufferEnviado := '0001';<br />&nbsp;&nbsp;&nbsp;cTamDados := inttostr( length( cBufferEnviado ) );<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#993300" size="1">iRetorno := Bematech_SB_RS485_EnviaCmdTamanho( cComando, cNumeroTerminal, cNumeroProcesso, cEnviaStatus, cBufferEnviado, cStatusSB2000, cBufferRetornoSB2000, cTemRetorno, cTamDados );<br /><br />&nbsp;&nbsp;&nbsp;</font><font face="Courier New" size="1"><font color="#993300">if ( copy( cStatusSB2000, 1, 1 ) = '1' ) and ( trim( cBufferRetornoSb2000 ) &lt;&gt; '' ) then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox( pchar( copy( cBufferRetornoSb2000, 1, length( cBufferRetornoSb2000 ) ) ), 'Informa&ccedil;&atilde;o', MB_ICONINFORMATION + MB_OK )<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox( 'N&atilde;o h&aacute; dados !', 'Informa&ccedil;&atilde;o', MB_ICONINFORMATION + MB_OK );<br />end;</font><br /><br /></font><font face="Verdana" size="1">Assim, j&aacute; temos o &quot;caminho das pedras&quot; para implementar outros comando e controlar o micro-terminal SB-2030E remotamente pela aplica&ccedil;&atilde;o.</font></p>]]>
    </content>
</entry>
<entry>
    <title>Bematech FlashTip - 24a. Edição - Informações sobre o RFD (Registro de Fita-Detalhe)</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2007/06/bematech_flashtip_24a_edicao_i.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=142" title="Bematech FlashTip - 24a. Edição - Informações sobre o RFD (Registro de Fita-Detalhe)" />
    <id>tag:partners.bematech.com.br,2007:/flashtip//2.142</id>
    
    <published>2007-06-25T14:12:21Z</published>
    <updated>2007-06-25T14:26:34Z</updated>
    
    <summary><![CDATA[Caro parceiro, Nesta edi&ccedil;&atilde;o de nosso Flash-tip, estaremos divulgando algumas informa&ccedil;&otilde;es sobre RFD (Registro de Fita-Detalhe), pertinentes &agrave; automa&ccedil;&atilde;o, que entrar&aacute; em vigor a partir de 01 de julho de 2007 no estado de S&atilde;o Paulo....]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Dicas" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<p><font face="Verdana" size="1">Caro parceiro, <br /><br />Nesta edi&ccedil;&atilde;o de nosso Flash-tip, estaremos divulgando algumas informa&ccedil;&otilde;es sobre RFD (Registro de Fita-Detalhe), pertinentes &agrave; automa&ccedil;&atilde;o, que entrar&aacute; em vigor a partir de 01 de julho de 2007 no estado de S&atilde;o Paulo.<br /><br /></font></p>]]>
        <![CDATA[<p><font face="Verdana" size="1">O RFD surgiu atrav&eacute;s da Portaria CAT-52 de 06 de junho de 2007 e corresponde a um arquivo digital, armazenado no disco r&iacute;gido do computador, que cont&eacute;m dados de todos os documentos emitidos pelo ECF, a identifica&ccedil;&atilde;o do equipamento e de seu usu&aacute;rio.<br /><br /></font><font face="Verdana" size="1">Estamos implementando na nova vers&atilde;o de nossa BemaFI32.dll, a gera&ccedil;&atilde;o dos registros exigidos no RFD. <br /><br /></font><font face="Verdana" size="1">Estes registros ser&atilde;o gerados automaticamente pela dll no momento que a redu&ccedil;&atilde;o Z for executada, atrav&eacute;s da fun&ccedil;&atilde;o Bematech_FI_ReducaoZ.<br /><br /></font><font face="Verdana" size="1">Voc&ecirc; n&atilde;o precisar&aacute; modificar sua aplica&ccedil;&atilde;o, basta substituir a dll e incluir as se&ccedil;&otilde;es &quot;SofwareHouse&quot; e &quot;ECF&quot; no arquivo BemaFI32.ini. A se&ccedil;&atilde;o &quot;SoftwareHouse&quot; ser&aacute; respons&aacute;vel por guardar as informa&ccedil;&otilde;es da Software House pertinentes ao Registro Tipo E00, que corresponder&atilde;o aos campos 8, 9, 16 e 17 deste registro, e a se&ccedil;&atilde;o &quot;ECF&quot; ser&aacute; respons&aacute;vel por guardar algumas informa&ccedil;&otilde;es do estabelecimento.<br /><br /></font><font face="Verdana" size="1">Estas chaves podem ser inclu&iacute;das antes da chave [MFD]. Exemplo:<br /><br /></font><font face="Courier New" color="#0000ff" size="1">.<br />.<br />.<br />[SoftwareHouse]<br />CNPJ=<br />IE=<br />IM=<br />RazaoSocial= <br />NomeAplicativo= <br />Versao=<br />COO= <br />NumeroAplicativo= <br />Linha1=<br />Linha2= <br /><br /></font><font face="Courier New" color="#0000ff" size="1">[ECF]<br />IM=<br />UF= <br /><br /></font><font size="1"><font face="Verdana"><font face="Courier New" color="#0000ff">[MFD] <br />.<br />.<br />.</font> <br /><br /></font><font face="Verdana">Onde:<br /><br /></font></font></p>
<p>&nbsp;</p>
<table width="100%" border="0">
    <tbody>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif">
            <p><font face="Courier New, Courier, mono" color="#000099">[SoftwareHouse]</font></p>
            </td>
        </tr>
    </tbody>
</table>
<table width="100%" border="0">
    <tbody>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">CNPJ=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se ao CNPJ/CPF da Software House ou desenvolvedor aut&ocirc;nomo, com at&eacute; 14 posi&ccedil;&otilde;es.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">IE=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se a Inscri&ccedil;&atilde;o Estadual da Software House, com at&eacute; 14 posi&ccedil;&otilde;es.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">IM=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se a Inscri&ccedil;&atilde;o Municipal da Software House, com at&eacute; 14 posi&ccedil;&otilde;es.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">RazaoSocial=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se ao nome comercial (raz&atilde;o social/denomina&ccedil;&atilde;o) da Software House, com at&eacute; 40 posi&ccedil;&otilde;es.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">NomeAplicativo=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se ao nome do aplicativo, com at&eacute; 40 posi&ccedil;&otilde;es.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">Versao=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se a vers&atilde;o do aplicativo, com at&eacute; 10 posi&ccedil;&otilde;es.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">COO=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se ao Contador de Ordem de Opera&ccedil;&atilde;o relativo &agrave; troca de aplicativo, com at&eacute; 6 posi&ccedil;&otilde;es.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">NumeroAplicativo=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se ao n&uacute;mero de ordem do aplicativo, com at&eacute; 2 posi&ccedil;&otilde;es.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">Linha1=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se aos dados do programa aplicativo, com at&eacute; 42 posi&ccedil;&otilde;es.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">Linha2=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se aos dados do programa aplicativo, com at&eacute; 42 posi&ccedil;&otilde;es.</font></td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<table width="100%" border="0">
    <tbody>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif">
            <p><font face="Courier New, Courier, mono" color="#000099">[ECF]</font></p>
            </td>
        </tr>
    </tbody>
</table>
<table width="100%" border="0">
    <tbody>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">IM=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se a Inscri&ccedil;&atilde;o Municipal do estabelecimento que possui a ECF, com at&eacute; 20 posi&ccedil;&otilde;es.</font></td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="22%"><font face="Courier New, Courier, mono" color="#000099">UF=</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="78%"><font face="Courier New, Courier, mono">refere-se a Unidade da Federa&ccedil;&atilde;o do estabelecimento que possui a ECF, com at&eacute; 2 posi&ccedil;&otilde;es.</font></td>
        </tr>
    </tbody>
</table>
<p><font face="Verdana" size="1">Estaremos informando quando a nova vers&atilde;o da BemaFI32.dll estiver dispon&iacute;vel em nosso site para download.<br /><br /></font><font face="Verdana" size="1">Caso voc&ecirc; esteja utilizando outra interface de comunica&ccedil;&atilde;o, segue abaixo algumas dicas que lhe ajudar&atilde;o a entender um pouco mais sobre o RFD.<br /><br /><br /><br /></font><font face="Verdana" size="1">O nome do arquivo dever&aacute; ter o formato FFM12345.DMA, sendo:</font></p>
<ul>
    <li><font face="Verdana" size="1">FF - dentifica&ccedil;&atilde;o do fabricante do ECF;</font></li>
    <li><font face="Verdana" size="1">M - identifica&ccedil;&atilde;o do modelo do ECF;</font></li>
    <li><font face="Verdana" size="1">12345 - cinco &uacute;ltimos caracteres do n&uacute;mero de fabrica&ccedil;&atilde;o do ECF;</font></li>
    <li><font face="Verdana" size="1">DMA - identifica&ccedil;&atilde;o do dia, m&ecirc;s e ano do movimento, codificados com n&uacute;meros de 1 a 9 e letras de A a Z, sendo que a letra A corresponde ao n&uacute;mero 10;</font></li>
</ul>
<p><font face="Verdana" size="1">E, dever&aacute;:</font></p>
<ul>
    <li><font face="Verdana" size="1">ser criado para cada dia de movimento do ECF;</font></li>
    <li><font face="Verdana" size="1">ser validado por meio de c&oacute;digo gerado por fun&ccedil;&atilde;o unidirecional MD5 (Message Digest n&ordm; 5), de conhecimento exclusivo do desenvolvedor do RFD, em todos os registros do arquivo (com exce&ccedil;&atilde;o do registro EAD) para gerar c&oacute;digo que garanta integridade do arquivo. Este c&oacute;digo dever&aacute; ser assinado digitalmente utilizando o algoritmo RSA de chave p&uacute;blica de 128 bits e informado no registro EAD.</font></li>
    <li><font face="Verdana" size="1">conter o caracter &ldquo;#&rdquo; (sustenido) na primeira posi&ccedil;&atilde;o da descri&ccedil;&atilde;o do item, para fins de controle de item manufaturado pelo pr&oacute;prio contribuinte emitente;</font></li>
    <li><font face="Verdana" size="1">ser gerado no momento de execu&ccedil;&atilde;o da Redu&ccedil;&atilde;o Z;</font></li>
    <li><font face="Verdana" size="1">constar os registros E00, E01, E02, E12, E13, E14, E15, E16, E21 e EAD, sendo: </font></li>
    <ul>
        <li><font face="Verdana" size="1">registro tipo E00 - Identifica&ccedil;&atilde;o da Software House.</font></li>
        <li><font face="Verdana" size="1">registro tipo E01 - Identifica&ccedil;&atilde;o do ECF.</font></li>
        <li><font face="Verdana" size="1">registro tipo E02 - Identifica&ccedil;&atilde;o do atual contribuinte usu&aacute;rio do ECF.</font></li>
        <li><font face="Verdana" size="1">registro tipo E12 - Rela&ccedil;&atilde;o de redu&ccedil;&otilde;es Z.</font></li>
        <li><font face="Verdana" size="1">registro tipo E13 - Detalhe da Redu&ccedil;&atilde;o Z.</font></li>
        <li><font face="Verdana" size="1">registro tipo E14 - Cupom Fiscal, Nota Fiscal de Venda a Consumidor ou Bilhete de Passagem.</font></li>
        <li><font face="Verdana" size="1">registro tipo E15 - Detalhe do Cupom Fiscal, da Nota Fiscal de Venda a Consumidor ou do Bilhete de Passagem.</font></li>
        <li><font face="Verdana" size="1">registro tipo E16 - Demais documentos emitidos pelo ECF.</font></li>
        <li><font face="Verdana" size="1">registro tipo E21 - Detalhe do Cupom Fiscal e Documento N&atilde;o Fiscal - Meio de Pagamento<br />registro EAD - Assinatura digital.</font></li>
    </ul>
</ul>
<p><font face="Verdana" size="1">Layout dos registros:</font></p>
<ul>
    <li><font face="Verdana" size="1">Tipo: texto n&atilde;o delimitado.</font></li>
    <li><font face="Verdana" size="1">Tamanho: vari&aacute;vel, acrescidos de CR/LF (Carriage Return/Line feed) ao final de cada registro.</font></li>
    <li><font face="Verdana" size="1">Organiza&ccedil;&atilde;o: seq&uuml;encial.</font></li>
    <li><font face="Verdana" size="1">Codifica&ccedil;&atilde;o: ASCII.</font></li>
</ul>
<p><font face="Verdana" size="1">Formato dos Campos:</font></p>
<ul>
    <li><font face="Verdana" size="1">Num&eacute;rico (N): sem sinal, n&atilde;o compactado, alinhado &agrave; direita, suprimidos a v&iacute;rgula e os pontos decimais, com as posi&ccedil;&otilde;es n&atilde;o significativas zeradas.</font></li>
    <li><font face="Verdana" size="1">Alfanum&eacute;rico (X): alinhado &agrave; esquerda, com as posi&ccedil;&otilde;es n&atilde;o significativas em branco.</font></li>
    <li><font face="Verdana" size="1">Data (D): somente os algarismos da data, no formato (AAAAMMDD).</font></li>
    <li><font face="Verdana" size="1">Hora (H): somente os algarismos da hora, no formato (HHMMSS).</font></li>
</ul>
<p><font face="Verdana" size="1">Preencimento dos Campos:</font></p>
<ul>
    <li><font face="Verdana" size="1">Num&eacute;rico: na aus&ecirc;ncia de informa&ccedil;&atilde;o, os campos dever&atilde;o ser preenchidos com zeros.</font></li>
    <li><font face="Verdana" size="1">Alfanum&eacute;rico: na aus&ecirc;ncia de informa&ccedil;&atilde;o, os campos dever&atilde;o ser preenchidos com brancos.</font></li>
    <li><font face="Verdana" size="1">Origem do dado: Mem&oacute;ria Fiscal (MF), Mem&oacute;ria de Fita-detalhe (MFD), Mem&oacute;ria de Trabalho (MT), Redu&ccedil;&atilde;o Z (imagem de dados codificados, impressa de acordo com o disposto na al&iacute;nea &quot;d&quot; do inciso II da cl&aacute;usula terceira do Conv&ecirc;nio ICMS 85/01 de 28 de setembro de 2001).</font></li>
    <li><font face="Verdana" size="1">Data: na aus&ecirc;ncia de informa&ccedil;&atilde;o, os campos dever&atilde;o ser preenchidos com brancos.</font></li>
    <li><font face="Verdana" size="1">Hora: na aus&ecirc;ncia de informa&ccedil;&atilde;o, os campos dever&atilde;o ser preenchidos com brancos.</font></li>
</ul>
<p><font face="Verdana" size="1">Voc&ecirc; poder&aacute; consultar o site da SEFAZ/SP para obter maiores informa&ccedil;&otilde;es a respeito, ou atrav&eacute;s do link direto:</font></p>
<p><a href="http://info.fazenda.sp.gov.br/NXT/gateway.dll/legislacao_tributaria/portaria_cat/pcat522007.htm"><font face="Verdana" size="1">http://info.fazenda.sp.gov.br/NXT/gateway.dll/legislacao_tributaria/portaria_cat/pcat522007.htm</font></a></p>
<p><font face="Verdana" size="1">Listamos aqui, algumas d&uacute;vidas que poder&atilde;o surgir durante o desenvolvimento do RFD:</font></p>
<ul>
    <li><font face="Verdana" size="1">Registro Tipo E00 / Campo 03 (MF Adicional): </font></li>
</ul>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="Verdana" size="1">Essa informa&ccedil;&atilde;o &eacute; retirada do *n&uacute;mero de s&eacute;rie da impressora. Se o &uacute;ltimo caracter do n&uacute;mero de s&eacute;rie for uma letra, essa letra deve ser inclu&iacute;da nesse campo. Se for um n&uacute;mero ou qualquer outro valor esse campo deve ser preenchido com espa&ccedil;o em branco.<br /><br /></font><font face="Verdana" size="1">*O n&uacute;mero de s&eacute;rie da impressora &eacute; obtido atrav&eacute;s do comando ESC 35 00 (para os modelos MP-20 FI II ou MP-40 FI II, que retornam 15 bytes) ou ESC 35 40 (para os modelos MP-25 FI, MP-50 FI, MP-2000 TH FI, MP-2100 TH FI, MP-3000 TH FI ou MP-6000 TH FI, que retornam 20 bytes).</font></p>
</blockquote>
<ul>
    <li><font face="Verdana" size="1">Registro Tipo E00 / Campo 04 (N&uacute;mero do Usu&aacute;rio): </font></li>
</ul>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="Verdana" size="1">Este campo corresponde ao n&uacute;mero de substitui&ccedil;&atilde;o do propriet&aacute;rio, que pode ser obtido atrav&eacute;s do comando ESC 35 11.</font></p>
</blockquote>
<ul>
    <li><font face="Verdana" size="1">Registro Tipo E00 / Campo 05 (Tipo de ECF):</font></li>
</ul>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="Verdana" size="1">Esse campo pode ser preenchido com o valor fixo &quot;ECF-IF&quot; porque todas as impressoras fiscais da Bematech s&atilde;o desse tipo. Caso voc&ecirc; preferir, a informa&ccedil;&atilde;o pode ser lida atrav&eacute;s do comando ESC 35 60 (exceto nos equipamentos MP-20 FI II e MP-40 FI II que n&atilde;o possuem esse comando). O comando retorna marca, modelo e tipo de ECF.</font></p>
</blockquote>
<ul>
    <li><font face="Verdana" size="1">Registro Tipo E01 / Campos 12 (Casas decimais da quantidade) e 13 (Casas decimais de valor unit&aacute;rio): </font></li>
</ul>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="Verdana" size="1">Para as impressoras MP-20 FI II, MP-40 FI II, MP-25 FI, MP-50 FI, MP-2000 TH FI e MP-6000 TH FI o n&uacute;mero de casas decimais &eacute; fixo em 3 casas.</font></p>
<p><font face="Verdana" size="1">Para as impressoras MP-2100 TH FI e MP-3000 TH FI essa informa&ccedil;&atilde;o &eacute; configur&aacute;vel, e s&oacute; &eacute; realizada no momento da inicializa&ccedil;&atilde;o da impressora (programa&ccedil;&atilde;o do usu&aacute;rio). Entretanto, n&atilde;o ha nenhum comando que retorne essa informa&ccedil;&atilde;o. </font></p>
<p><font face="Verdana" size="1">Voc&ecirc; dever&aacute; realizar essa configura&ccedil;&atilde;o no software, por exemplo: no momento em que o software for instalado, voc&ecirc; executa uma Leitura da Mem&oacute;ria Fiscal (comando ESC 08) e verifica como a impressora est&aacute; programada, se duas ou 3 casas decimais. Uma outra alternativa para verificar essa configura&ccedil;&atilde;o &eacute; tentar realizar uma venda utilizando 3 casas decimais, se o comando for realizado a impressora est&aacute; programada com 3 casas decimais, caso contr&aacute;rio o comando n&atilde;o ser&aacute; executado.</font></p>
</blockquote>
<ul>
    <li><font face="Verdana" size="1">Registro Tipo E01 / Campos 15 (CRZ inicial) e 16 (CRZ final): </font></li>
</ul>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="Verdana" size="1">Contador de redu&ccedil;&atilde;o Z poder&aacute; ser obtido pelo comando ESC 35 09. Para as impressoras MP-25 FI, MP-50 FI, MP-2000 TH FI, MP-2100 TH FI, MP-3000 TH FI e MP-6000 TH FI este retorno tamb&eacute;m poder&aacute; ser obtido pelo comando: ESC 88 (Leitura dos dados da &uacute;ltima Redu&ccedil;&atilde;o completo).</font></p>
</blockquote>
<ul>
    <li><font face="Verdana" size="1">Registro Tipo E01 / Campos 19 (Vers&atilde;o da Biblioteca): </font></li>
</ul>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="Verdana" size="1">Caso esteja utilizando a BemaFI32.dll, atrav&eacute;s da fun&ccedil;&atilde;o Bematech_FI_VersaoDll &eacute; poss&iacute;vel recuperar esta informa&ccedil;&atilde;o. Caso esteja utilizando outra interface, esse campo pode ser preenchido com o valor 00.00.00.</font></p>
</blockquote>
<ul>
    <li><font face="Verdana" size="1">Registro Tipo E02 / Campos 11 (CRO - Contador de Rein&iacute;cio de Opera&ccedil;&atilde;o): </font></li>
</ul>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="Verdana" size="1">Informa&ccedil;&otilde;es do registro tipo E02 s&atilde;o informa&ccedil;&otilde;es referente ao atual usu&aacute;rio cadastrado na impressora. O CRO que deve ser inclu&iacute;do neste campo &eacute; o CRO que estava na impressora no momento que o atual usu&aacute;rio foi cadastrado e n&atilde;o o CRO atual da impressora.</font></p>
<p><font face="Verdana" size="1">Como conseguir essa informa&ccedil;&atilde;o?<br /><br /></font><font face="Verdana" size="1">Voc&ecirc; ter&aacute; que realizar uma leitura da mem&oacute;ria fiscal pela serial e procurar essa informa&ccedil;&atilde;o no texto retornado. N&atilde;o somente o campo CRO, mas tamb&eacute;m os campos Data do cadastro e Hora do cadastro do usu&aacute;rio (Campos 8 e 9 do Registro Tipo E02).<br /><br /></font><font face="Verdana" size="1">Veja um exemplo da Leitura da Mem&oacute;ria Fiscal:<br /><br /></font><font face="Courier New"><font color="#0000ff"><font size="1">IMPRESS&Atilde;O FITA DETALHE <br />CFD DATA HORA COOi COOf<br />CNPJ:<br />000001 13/06/2007 10:25:29 002323 002325<br />CNPJ: 11111111111111111111<br />000002 13/06/2007 10:26:33 002326 002328<br />CNPJ: 11111111111111111111<br />USU&Aacute;RIOS <br />Usu&aacute;rio:0001 CRO:001 15/01/2007 16:24:01V<br />CNPJ: 11111111111111111111<br />IE: 22222222222222222222<br />IM: 33333333333333333333<br />GT: 19.287,79<br />.<br />.<br />.</font> </font></font></p>
</blockquote>]]>
    </content>
</entry>
<entry>
    <title>Bematech FlashTip - 23a. Edição - Trabalhando com Banco de Dados no SB-2030E</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2007/05/bematech_flashtip_22a_edicao_t.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=130" title="Bematech FlashTip - 23a. Edição - Trabalhando com Banco de Dados no SB-2030E" />
    <id>tag:partners.bematech.com.br,2007:/flashtip//2.130</id>
    
    <published>2007-05-14T19:37:27Z</published>
    <updated>2007-05-14T19:46:28Z</updated>
    
    <summary><![CDATA[Caro parceiro, Na &uacute;ltima edi&ccedil;&atilde;o de nosso Flash-tip, vimos duas maneiras de criar menus de intera&ccedil;&atilde;o no SB-2030E (menu fixo e de rolagem) e algumas fun&ccedil;&otilde;es de entrada de dados via teclado, como getch(), gets(), getstring() e getstringvirgula().Nesta edi&ccedil;&atilde;o, iremos...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Mini Cursos" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<font face="Verdana" size="1">Caro parceiro, <br /><br />Na &uacute;ltima edi&ccedil;&atilde;o de nosso Flash-tip, vimos duas maneiras de criar menus de intera&ccedil;&atilde;o no SB-2030E (menu fixo e de rolagem) e algumas fun&ccedil;&otilde;es de entrada de dados via teclado, como <em>getch()</em>, <em>gets()</em>, <em>getstring()</em> e <em>getstringvirgula()</em>.<br /><br />Nesta edi&ccedil;&atilde;o, iremos trabalhar com um dos recursos mais importantes do micro-terminal SB-2030E - o Banco de Dados.<br /><br /><em>Lembrete: Caso voc&ecirc; ainda n&atilde;o baixou o VisualSDK Builder, acesse:</em><br /></font><a href="http://www.bematech.com.br/suporte/downloads/cpus_win/SDKbuilder.zip"><font face="Verdana" size="1">http://www.bematech.com.br/suporte/downloads/cpus_win/SDKbuilder.zip</font></a><font face="Verdana" size="1"> (+/- 20MB)<br /><br /></font>]]>
        <![CDATA[<font face="Verdana"><font size="1"><strong>- Conceito<br /><br /></strong>O SB-2030E possui uma &aacute;rea de mem&oacute;ria n&atilde;o vol&aacute;til e protegida, usada exclusivamente para armazenamento de dados. Esta &aacute;rea pode possuir o tamanho de 512KB (modelo SB-2030E) at&eacute; 2MB (modelo SB-2030EP).<br /><br />O conceito de banco de dados no SB-2030E &eacute; o mesmo conceito que j&aacute; conhecemos <em>(Campos -&gt; Registros -&gt; Tabelas)</em>, com alguns detalhes que veremos a seguir:<br /><br />a) ao criarmos uma tabela no SB-2030E, devemos determinar inicialmente o tamanho m&aacute;ximo de registros que esta tabela comportar&aacute;;<br /><br />b) a tabela depois de criada ou em uso, n&atilde;o poder&aacute; ser removida ou ter seu tamanho modificado e;<br /><br />c) &eacute; poss&iacute;vel criar at&eacute; 128 tabelas no SB-2030E.</font></font>
<p><font face="Verdana" size="1">Usaremos estruturas para a cria&ccedil;&atilde;o de tabelas dentro do SB-2030E. Veja um exemplo:<br /><br /></font><font face="Courier New, Courier, mono" color="#000099"><font size="1"><em>/*<br />A estrutura Produto receber&aacute; registros formados pelos campos:<br /><br />&nbsp;&nbsp;&nbsp;Codigo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tipo char com 14 posi&ccedil;&otilde;es;<br />&nbsp;&nbsp;&nbsp;Descricao&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tipo char com 30 posi&ccedil;&otilde;es;<br />&nbsp;&nbsp;&nbsp;Aliquota&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tipo char com 3 posi&ccedil;&otilde;es e; <br />&nbsp;&nbsp;&nbsp;VlrUnitario &nbsp;&nbsp;tipo long.<br /><br />que ser&atilde;o armazenados na tabela TblPro.<br />*/</em><br /><br />struct Produto<br />{ <br />&nbsp;&nbsp;&nbsp;char Codigo &nbsp;&nbsp;&nbsp;[ 14 ]; <br />&nbsp;&nbsp;&nbsp;char Descricao [ 30 ];<br />&nbsp;&nbsp;&nbsp;char Aliquota&nbsp;&nbsp;[&nbsp;&nbsp;3 ];<br />&nbsp;&nbsp;&nbsp;long VlrUnitario;<br />}; <br />.<br />.<br />.</font> <br /></font><br /><font face="Verdana" size="1">Para que possamos definir o tipo <em>(char, int, long e etc)</em> e o tamanho de cada campo que a tabela conter&aacute;, precisamos usar uma formata&ccedil;&atilde;o pr&oacute;pria, da seguinte forma:<br /><br /></font><font size="1"><font face="Verdana"><strong><em>&quot;XyXy&quot; <br /><br /></em></strong>onde:<br /><br /><em><strong>&quot;X&quot;</strong></em> corresponde a primeira letra do tipo do campo (vari&aacute;vel) em mai&uacute;scula (<em><strong>C</strong></em>har, <em><strong>I</strong></em>nt, <em><strong>L</strong></em>ong e etc) e; <br /><em><strong>&quot;y&quot;</strong></em> corresponde ao tamanho da &aacute;rea desejada.<br /><br />Para entendermos melhor esta defini&ccedil;&atilde;o, vamos tomar como exemplo a estrutura <em>Produto</em> acima citada, onde temos 4 campos (vari&aacute;veis), 3 s&atilde;o do tipo <em>char</em> e 1 do tipo <em>long</em>.<br /><br />O formato de nossa tabela seria assim:<br /></font><br /><font face="Courier New, Courier, mono" color="#000099">&quot;C14C30C3L&quot;, 1000</font><br /><br /><font face="Verdana">onde:<br /><br />C14 = char de 14 posi&ccedil;&otilde;es, usado para representar o primeiro campo <em>&quot;Codigo&quot;</em>;<br />C30 = char de 30 posi&ccedil;&otilde;es, usado para representar o segundo campo <em>&quot;Descricao&quot;</em>;<br />C3 = char de 3 posi&ccedil;&otilde;es, usado para representar o terceiro campo <em>&quot;Aliquota&quot;</em>;<br />L= long, usado para representar o quarto campo <em>&quot;VlrUnitario&quot;</em> e;<br /><br />1000 = quantidade de registros que a tabela armazenar&aacute;.<br /><br />Obs: Vari&aacute;veis do tipo <em>char</em> s&atilde;o as &uacute;nicas que usam defini&ccedil;&atilde;o de tamanho.<br /><br />Vamos conhecer agora, as principais fun&ccedil;&otilde;es de acesso ao banco de dados que iremos usar em nosso exemplo.</font></font></p>
<p><font size="1"><font face="Verdana"><strong>- fun&ccedil;&atilde;o formataSDK</strong><br /><br />A fun&ccedil;&atilde;o formataSDK formata a mem&oacute;ria n&atilde;o vol&aacute;til destinada ao armazenamento dos dados, preparando-a para receber as tabelas e seus registros. Ao executarmos esta fun&ccedil;&atilde;o, todas as tabelas existentes e seus registros ser&atilde;o apagados. Ent&atilde;o, teremos que preparar uma rotina que verifique se a mem&oacute;ria j&aacute; est&aacute; formatada, para que este processo n&atilde;o seja realizado toda vez que iniciar o sistema.</font></font></p>
<p><font size="1"><font face="Verdana"><strong>- fun&ccedil;&atilde;o criatabelaSDK</strong><br /><br />A fun&ccedil;&atilde;o criatabelaSDK cria uma tabela na mem&oacute;ria n&atilde;o vol&aacute;til, com um tamanho m&aacute;ximo que especificamos. Se a cria&ccedil;&atilde;o for bem sucedida, a tabela iniciar&aacute; com 0 (zero) byte gravado. Caso a tabela j&aacute; exista, receberemos um c&oacute;digo de erro como retorno que poderemos tratar. Para que possamos criar as tabelas, a formata&ccedil;&atilde;o da mem&oacute;ria deve ter sido feita anteriormente.</font></font></p>
<p><font size="1"><font face="Verdana"><strong>- fun&ccedil;&atilde;o addregistroSDK</strong><br /><br />A fun&ccedil;&atilde;o addregistroSDK adiciona um novo registro ao final da tabela. Esta inclus&atilde;o sempre ser&aacute; feita ap&oacute;s o &uacute;ltimo registro existente na tabela. Caso for desejado, podemos exigir que o ponteiro da tabela fique posicionado sobre o novo registro inclu&iacute;do. Isso &eacute; configurado via par&acirc;metro na fun&ccedil;&atilde;o.</font></font></p>
<p><font size="1"><font face="Verdana"><strong>- fun&ccedil;&atilde;o seekregistroSDK</strong><br /><br />A fun&ccedil;&atilde;o seekregistroSDK posiciona o ponteiro da tabela sobre um determinado registro, utilizando um campo e uma condi&ccedil;&atilde;o definida, para localiz&aacute;-lo. Se a pesquisa for bem sucedida, os campos contidos no registro localizado ser&atilde;o colocados na estrutura (struct) criada para a tabela. O campo usado para a pesquisa, poder&aacute; possuir um valor num&eacute;rico (int) ou um texto (char). O in&iacute;cio da pesquisa ser&aacute; determinado por um dos par&acirc;metros da fun&ccedil;&atilde;o e poder&aacute; ser realizada a partir do primeiro registro da tabela (ap&oacute;s o BOF) ou a partir da posi&ccedil;&atilde;o atual. Para ambos os casos, a pesquisa s&oacute; termina ap&oacute;s encontrar o primeiro registro que satisfa&ccedil;a a condi&ccedil;&atilde;o imposta ou at&eacute; atingir o fim da tabela (EOF). Ao localizar o registro, a tabela ser&aacute; posicionada, caso contr&aacute;rio o posicionamento atual n&atilde;o ser&aacute; afetado.</font></font></p>
<p><font size="1"><font face="Verdana"><strong>- fun&ccedil;&atilde;o deleteregistroSDK</strong><br /><br />A fun&ccedil;&atilde;o deleteregistroSDK apaga somente um determinado registro da tabela. Para isso, devemos primeiro posicionar o ponteiro da tabela sobre o registro que ser&aacute; exclu&iacute;do. Caso o ponteiro da tabela esteja posicionado sobre o &lt;BOF&gt; ou &lt;EOF&gt;, um c&oacute;digo de retorno ser&aacute; enviado &agrave; fun&ccedil;&atilde;o. Ap&oacute;s a exclus&atilde;o do registro, o ponteiro da tabela fica posicionado sobre o pr&oacute;ximo registro, e se o registro deletado for o &uacute;ltimo, o ponteiro fica posicionado sobre o &lt;EOF&gt;.</font></font></p>
<p><font size="1"><font face="Verdana"><strong>- fun&ccedil;&atilde;o positionregistroSDK</strong><br /><br />A fun&ccedil;&atilde;o positionregistroSDK posiciona o ponteiro da tabela sobre um registro desejado. O ponteiro pode ser posicionado sobre qualquer registro compreendido entre &lt;BOF&gt; e &lt;EOF&gt;, mesmo que o registro esteja deletado. Esta fun&ccedil;&atilde;o posiciona o ponteiro da tabela no registro para poder executar opera&ccedil;&otilde;es de escrita, consulta e exclus&atilde;o. Se o n&uacute;mero do registro a ser posicionado for maior que a quantidade total de registros da tabela, o ponteiro ser&aacute; posicionado sobre o &lt;EOF&gt;.</font></font></p>
<p><font size="1"><font face="Verdana"><strong>- fun&ccedil;&atilde;o readregistroSDK</strong><br /><br />A fun&ccedil;&atilde;o readregistroSDK l&ecirc; um registro da tabela e coloca na estrutura (struct) criada para a tabela ou em uma nova estrutura, desde que possua os mesmos campos. Se o ponteiro da tabela estiver posicionado sobre o &lt;BOF&gt; ou &lt;EOF&gt; um c&oacute;digo de retorno ser&aacute; enviado &agrave; fun&ccedil;&atilde;o.</font></font></p>
<p><font size="1"><font face="Verdana"><strong>- fun&ccedil;&atilde;o writeregistroSDK</strong><br /><br />A fun&ccedil;&atilde;o writeregistroSDK escreve sobre um determinado registro eliminando o conte&uacute;do anterior. Se o ponteiro da tabela estiver posicionado sobre o &lt;BOF&gt; ou &lt;EOF&gt;, um c&oacute;digo de retorno ser&aacute; enviado &agrave; fun&ccedil;&atilde;o.</font></font></p>
<p><font size="1"><font face="Verdana"><strong>- fun&ccedil;&atilde;o zeratabelaSDK</strong><br /><br />A fun&ccedil;&atilde;o zeratabelaSDK apaga todo o conte&uacute;do da tabela especificada.</font></font></p>
<p><font size="1"><font face="Verdana"><strong>- fun&ccedil;&atilde;o lestatustabelaSDK</strong><br /><br />A fun&ccedil;&atilde;o lestatustabelaSDK retorna informa&ccedil;&otilde;es da tabela especificada, como: <br /><br />Quantidade total de registros da tabela;<br />Quantidade de registros gravados na tabela;<br />Tamanho em bytes do registro e etc.</font></font></p>
<p><font size="1"><font face="Verdana"><strong>- Criando um projeto com banco de dados</strong><br /><br />Vamos iniciar um novo projeto no VisualSDK Builder (menu &quot;File&quot; - op&ccedil;&atilde;o &quot;New Project&quot;) para praticar as fun&ccedil;&otilde;es relacionadas ao banco de dados.<br /><br />Obs: N&atilde;o esque&ccedil;a de configurar o ambiente para o modelo SB-2030E antes de compilar o projeto, e localizar o micro-terminal na rede antes de transferir a aplica&ccedil;&atilde;o (menu &quot;Project&quot; - op&ccedil;&atilde;o &quot;Options&quot; ).<br /><br />O primeiro passo &eacute; criarmos a estrutura que estar&aacute; recebendo os dados para posteriormente serem armazenados no banco. Para isso, abaixo das linhas de <em>#include</em>, insira a <em>struct</em> Produto da seguinte forma:<br /></font><br /></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">struct Produto<br />{<br />&nbsp;&nbsp;&nbsp;char Codigo [ 14 ];<br />&nbsp;&nbsp;&nbsp;char Descricao [ 30 ];<br />&nbsp;&nbsp;&nbsp;char Aliquota [ 3 ];<br />&nbsp;&nbsp;&nbsp;long VlrUnitario;<br />};</font> <br /><br /><font face="Verdana">Ela ser&aacute; global e guardar&aacute; informa&ccedil;&otilde;es sobre o c&oacute;digo, descri&ccedil;&atilde;o, al&iacute;quota e valor unit&aacute;rio de nosso produto.<br /><br />Dentro do <em>main()</em>, vamos criar algumas vari&aacute;veis que ser&atilde;o usadas no c&oacute;digo e referenciar a struct.<br /></font><br /></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">void far main()<br />{<br />&nbsp;&nbsp;&nbsp;int iOpcao,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iResp,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iRet;<br /><br />&nbsp;&nbsp;&nbsp;char cTempVlrUnitario[ 9 ];<br /><br />&nbsp;&nbsp;&nbsp;struct Produto CampoProduto;<br />.<br />.<br />.</font><br /><br /><font face="Verdana">Criamos um menu de rolagem para executar as fun&ccedil;&otilde;es separadamente, assim poderemos entender melhor o funcionamento de cada uma e us&aacute;-las em nossos projetos futuros.<br /><br />As op&ccedil;&otilde;es de nosso menu de rolagem s&atilde;o: &quot;Formata Memoria BD&quot;, &quot;Cria Tabela&quot;, &quot;Insere Registro&quot;, &quot;Pesquisa Registro&quot;, &quot;Apaga Registro&quot; e &quot;Status Tabela&quot;.<br /><br />O c&oacute;digo para a cria&ccedil;&atilde;o deste menu fica assim:<br /><br /></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">.<br />.<br />. <br />&nbsp;&nbsp;&nbsp;clrscrU();<br />&nbsp;&nbsp;&nbsp;getopcao( &amp;iOpcao, 0, &quot;&lt;- Formata Memoria BD -&gt;,&lt;- Cria Tabela -&gt;,&lt;- Insere Registro -&gt;,&lt;- Pesquisa Registro -&gt;,&lt;- Apaga Registro -&gt;,&lt;- Status Tabela -&gt;&quot; );<br />.<br />.<br />.</font> <br /><br /><font face="Verdana">Iremos tratar a escolha das op&ccedil;&otilde;es dentro de um <em>&quot;switch/case&quot;</em>, sendo que o <em>&quot;case 0&quot;</em> corresponde &agrave; op&ccedil;&atilde;o &quot;Formata Memoria BD&quot;, conforme abaixo:<br /></font><br /></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">.<br />.<br />. <br />&nbsp;&nbsp;&nbsp;switch( iOpcao )<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printfU( &quot;AVISO: Os dados serao apagados.\n&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printfU( &quot;Deseja continuar ?: &quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getopcao( &amp;iResp, 0, &quot;&lt;- NAO -&gt;,&lt;- SIM -&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( iResp == 1 )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; Formatando, aguarde... &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 1000 );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( ( formatSDK( 524288 ) ) != 0 )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; PROBLEMAS NA FORMATACAO &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 2, &quot;Pressione algo, p/ continuar...&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; FORMATACAO CONCLUIDA COM SUCESSO &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 2, &quot;Pressione algo, p/ continuar...&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getch();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />.<br />.<br />.</font> <br /><br /><font face="Verdana">Repare que neste c&oacute;digo, fazemos uma pergunta ao operador antes de iniciar a formata&ccedil;&atilde;o da mem&oacute;ria reservada ao banco de dados e testamos o retorno da fun&ccedil;&atilde;o &quot;formataSDK&quot;. Caso o retorno seja 0 (zero) significa que a formata&ccedil;&atilde;o foi bem sucedida e exibimos uma mensagem de OK, caso contr&aacute;rio exibimos uma outra mensagem para o operador. O tamanho da mem&oacute;ria neste exemplo, &eacute; de 512KB representados em bytes (524288 bytes). Caso o micro-terminal seja o modelo SB-2030EP, temos um pente de expans&atilde;o de 2MB para o banco de dados, ent&atilde;o este dever&aacute; ser formatado no tamanho de 2097152 bytes.<br /><br />O <em>&quot;case 1&quot;</em> corresponde &agrave; fun&ccedil;&atilde;o &quot;Cria Tabela&quot;:<br /><br /></font></font><font face="Courier New, Courier, mono" color="#000099" size="1">.<br />.<br />.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iRet = criatabelaSDK( &quot;TblPro&quot;, &quot;C14C30C3L&quot;, 1000 );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrscrU();<br /></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch( iRet )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; TABELA JA EXISTE ! &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; NOME TABELA ACIMA DE 6 CARACTERES ! &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 3:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; QTDE MAX DE TABELAS ATINGIDA ! &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 4:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; ERRO NA DECLARACAO DA STRUCT ! &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 5:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; STRUCT ACIMA DE 100 CARACTERES ! &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 6:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; QTDE REGISTROS ACIMA DA ESPECIFICADA ! &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 7:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; MEMORIA NAO FORMATADA ! &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; TABELA CRIADA COM SUCESSO ! &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />.<br />.<br />.</font> <br /><br /><font face="Verdana">Na fun&ccedil;&atilde;o <em>criatabelaSDK</em> estamos passando como par&acirc;metros: o nome da tabela <em>(TblPro)</em>, seu formato <em>(C14C30C3I)</em> e seu tamanho total de registros <em>(1000)</em>. Estamos tamb&eacute;m analisando o retorno desta fun&ccedil;&atilde;o, exibindo uma mensagem para cada situa&ccedil;&atilde;o ao operador.<br /><br />No <em>&quot;case 2&quot;</em> adicionamos um registro &agrave; tabela <em>&quot;TblProd&quot;</em>:<br /></font></font><font face="Courier New, Courier, mono"><br /><font size="1"><font color="#000099">.<br />.<br />.<br /></font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font size="1"><font color="#000099">case 2:<br /></font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font color="#000099">memset( CampoProduto.Codigo, NULL, sizeof( CampoProduto.Codigo ) );<br /></font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font color="#000099">memset( CampoProduto.Descricao, NULL, sizeof( CampoProduto.Descricao ) );<br /></font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font color="#000099">memset( CampoProduto.Aliquota, NULL, sizeof( CampoProduto.Aliquota ) );<br /></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#000099">memset( cTempVlrUnitario, NULL, sizeof( cTempVlrUnitario ) );</font></font></font><font size="1"><font color="#000099"> <br /></font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font color="#000099">CampoProduto.VlrUnitario = 0;<br /><br /></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font color="#000099"> </font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">setcursorU( ON );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">printfU( &quot;Codigo: &quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">getstring( CampoProduto.Codigo, 13, NUMERICO, NULL, NULL );<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">if ( ( seekregistroSDK( &quot;TblPro&quot;, (char*)&amp;CampoProduto, (char*)&amp;CampoProduto.Codigo, &quot;=&quot;, 'F' ) ) != 0 )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">printfU( &quot;Descricao......: &quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">getstring( CampoProduto.Descricao, 29, ALFA, NULL, NULL );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">printfU( &quot;\nCodigo Aliquota: &quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">getstring( CampoProduto.Aliquota, 2, ALFA, NULL, NULL );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">printfU( &quot;Valor Unitario: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot; ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">getstring( cTempVlrUnitario, 8, FORMAT | REVERSO, &quot; . , &quot;, NULL );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">setcursorU( OFF );<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">CampoProduto.VlrUnitario = atol( cTempVlrUnitario );<br /><br /></font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">if ( ( addregistroSDK( &quot;TblPro&quot;, (char*)&amp;CampoProduto, 0 ) ) == 0 )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">setcursorU( OFF );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">centralizaU( 1, &quot;&lt;&lt; Produto cadastrado com sucesso ! &gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">setcursorU( OFF );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">centralizaU( 1, &quot;&lt;&lt; Problemas com o cadastro ! &gt;&gt;&quot; );<br /></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono" color="#000099"> </font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">setcursorU( OFF );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">centralizaU( 1, &quot;&lt;&lt; Produto ja cadastrado ! &gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono"><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />.<br />.<br /></font><font color="#000099">.</font> <br /><br /><font face="Verdana">Neste <em>case</em>, inicializamos as vari&aacute;veis da <em>struct</em> em mem&oacute;ria com <em>NULL</em> (\0) e fazemos a primeira entrada de dados, atrav&eacute;s do c&oacute;digo do produto (fun&ccedil;&atilde;o <em>getstring</em>). Repare que antes de entrar com as outras informa&ccedil;&otilde;es do produto, fazemos uma pesquisa na tabela para verificar se o c&oacute;digo do produto informado j&aacute; est&aacute; cadastrado (<em>fun&ccedil;&atilde;o seekregistroSDK</em>). Caso o retorno seja diferente de 0 (zero), entramos com as demais informa&ccedil;&otilde;es (descri&ccedil;&atilde;o, al&iacute;quota e valor unit&aacute;rio), caso contr&aacute;rio exibimos uma mensagem ao operador informando que o produto j&aacute; se encontrada cadastrado na tabela, evitando que o mesmo seja duplicado. Esta &eacute; uma opera&ccedil;&atilde;o normal quando se trabalha com banco de dados!<br /><br />Fazemos a pesquisa do produto cadastrado, no <em>case 3</em>:<br /><br /></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">.<br />.<br />.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 3:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset( CampoProduto.Codigo, NULL, sizeof( CampoProduto.Codigo ) );<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font></font><font face="Courier New, Courier, mono" color="#000099" size="1">clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font><font face="Courier New, Courier, mono" color="#000099" size="1">setcursorU( ON );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font><font face="Courier New, Courier, mono" color="#000099" size="1">printfU( &quot;Codigo: &quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font><font face="Courier New, Courier, mono" color="#000099" size="1">getstring( CampoProduto.Codigo, 13, NUMERICO, NULL, NULL );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">setcursorU( OFF );<br /><br /></font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font></font><font face="Courier New, Courier, mono" color="#000099" size="1">if ( ( seekregistroSDK( &quot;TblPro&quot;, (char*)&amp;CampoProduto, (char*)&amp;CampoProduto.Codigo, &quot;=&quot;, 'F' ) ) == 0 )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">printfU( &quot;Descricao......: %s\n&quot;, CampoProduto.Descricao );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">printfU( &quot;Codigo Aliquota: %s &quot;, CampoProduto.Aliquota );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">printfU( &quot;Valor: %l&quot;, CampoProduto.VlrUnitario );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font></font><font face="Courier New, Courier, mono" color="#000099" size="1">getch();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font><font face="Courier New, Courier, mono" color="#000099" size="1">}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font><font face="Courier New, Courier, mono" color="#000099" size="1">else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">setcursorU( OFF );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">centralizaU( 1, &quot;&lt;&lt; Produto nao cadastrado ! &gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099">&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font></font><font face="Courier New, Courier, mono" color="#000099" size="1">espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099"></font><font face="Courier New, Courier, mono" color="#000099" size="1">}<br /></font><font face="Courier New, Courier, mono" color="#000099" size="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br /></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">.<br />.<br />.</font><br /><br /><font face="Verdana">Esta rotina &eacute; bem simples! Inicializamos a vari&aacute;vel <em>CampoProduto.Codigo</em> e fazemos a entrada do c&oacute;digo do produto. Atrav&eacute;s da fun&ccedil;&atilde;o <em>seekregistroSDK</em> (vista anteriormente), fazermos a busca deste c&oacute;digo na tabela. Se o c&oacute;digo for encontrado, exibimos a decri&ccedil;&atilde;o, o c&oacute;digo da al&iacute;quota e o valor unit&aacute;rio do produto, caso contr&aacute;rio exibimos uma mensagem para o operador.<br /><br />No <em>case 4</em>, exclu&iacute;mos o produto:<br /><br /></font></font><font face="Courier New, Courier, mono" color="#000099" size="1">.<br />.<br />.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 4:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset( CampoProduto.Codigo, NULL, sizeof( CampoProduto.Codigo ) );<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099" size="1">clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setcursorU( ON );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printfU( &quot;Codigo: &quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getstring( CampoProduto.Codigo, 13, NUMERICO, NULL, NULL );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setcursorU( OFF );<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( ( seekregistroSDK( &quot;TblPro&quot;, (char*)&amp;CampoProduto, (char*)&amp;CampoProduto.Codigo, &quot;=&quot;, 'F' ) ) == 0 )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iRet = deleteregistroSDK( &quot;TblPro&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch( iRet )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt; ERRO: Tabela inexistente ! &gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt; ERRO: Encontrado &lt;BOF&gt; ! &gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 3:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt; ERRO: Encontrado &lt;EOF&gt; ! &gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 4:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt; AVISO: Produto ja excluido ! &gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt; Registro excluido com sucesso ! &gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setcursorU( OFF );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt; Produto nao cadastrado ! &gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br /></font><font size="1"><font face="Courier New, Courier, mono" color="#000099">.<br />.<br />.</font><br /><br /><font face="Verdana">Semelhante ao <em>case 3</em>, neste <em>case</em> fazemos a pesquisa do produto no banco de dados e caso seja encontrado, fazemos sua dele&ccedil;&atilde;o (fun&ccedil;&atilde;o <em>deleteregistroSDK</em>). &Eacute; feito um tratamento de retorno para a fun&ccedil;&atilde;o <em>deleteregistroSDK</em> exibindo mensagens para o operador.<br /><br />E, no <em>case 5</em> exibimos algumas informa&ccedil;&otilde;es do estado atual da tabela:<br /><br /></font></font><font face="Courier New, Courier, mono" color="#000099" size="1">.<br />.<br />.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 5:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( ( lestatustabelaSDK( &quot;TblPro&quot; ) ) == 0 )<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printfU( &quot;Tamanho da Tabela: %l registro(s)&quot;, SDK_STATUS.QtdeTotalRegistros );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS );<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New, Courier, mono" color="#000099" size="1">clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printfU( &quot;Registros Gravados: %l registro(s)&quot;, SDK_STATUS.QtdeRegistrosGravados );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clrscrU();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centralizaU( 1, &quot;&lt;&lt;&lt; TABELA INEXISTENTE &gt;&gt;&gt;&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;espera0( 2 SEGUNDOS );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;}<br />} /* Fim do programa */</font><font face="Courier New, Courier, mono" color="#000099"><br /></font><br /><font face="Verdana" size="1">Aqui, apenas verificamos algumas situa&ccedil;&otilde;es, atrav&eacute;s da fun&ccedil;&atilde;o <em>lestatustabelaSDK</em>, retornadas por constantes do banco de dados, como quantidade total de registros e o n&uacute;mero de registros cadastrados na tabela.</font></p>]]>
    </content>
</entry>
<entry>
    <title>Bematech FlashTip - 22a. Edição - Criando menus e trabalhando com funções de teclado e entrada de dados</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2007/03/bematech_flashtip_22a_edicao_c.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=118" title="Bematech FlashTip - 22a. Edição - Criando menus e trabalhando com funções de teclado e entrada de dados" />
    <id>tag:partners.bematech.com.br,2007:/flashtip//2.118</id>
    
    <published>2007-03-02T19:29:08Z</published>
    <updated>2007-03-02T19:48:49Z</updated>
    
    <summary><![CDATA[Caro parceiro,Na edi&ccedil;&atilde;o passada, preparamos todo o ambiente de desenvolvimento e configuramos a interface do VisualSDK Builder, deixando-a mais &quot;amig&aacute;vel&quot; para facilitar nossas implementa&ccedil;&otilde;es. Tamb&eacute;m iniciamos nosso primeiro projeto e exploramos algumas dicas de desenvolvimento r&aacute;pido.Nesta nova edi&ccedil;&atilde;o, iremos criar...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Mini Cursos" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<p><font face="Verdana" size="1">Caro parceiro,<br /><br />Na edi&ccedil;&atilde;o passada, preparamos todo o ambiente de desenvolvimento e configuramos a interface do VisualSDK Builder, deixando-a mais &quot;amig&aacute;vel&quot; para facilitar nossas implementa&ccedil;&otilde;es. Tamb&eacute;m iniciamos nosso primeiro projeto e exploramos algumas dicas de desenvolvimento r&aacute;pido.<br /><br />Nesta nova edi&ccedil;&atilde;o, iremos criar menus de intera&ccedil;&atilde;o com o usu&aacute;rio/operador (menus fixos e de rolagem) e trabalhar com fun&ccedil;&otilde;es de teclado e de entrada de dados.<br /><br />Lembrete: Caso voc&ecirc; ainda n&atilde;o baixou o VisualSDK Builder, acesse:<br /></font><a href="http://www.bematech.com.br/suporte/downloads/cpus_win/SDKbuilder.zip"><font face="Verdana" size="1">http://www.bematech.com.br/suporte/downloads/cpus_win/SDKbuilder.zip</font></a><font face="Verdana" size="1"> (+/- 20MB)<br /><br /></font></p>]]>
        <![CDATA[<p><font face="Verdana" size="1"><strong>- Criando menus<br /></strong><br /></font><font face="Verdana" size="1">Uma das primeiras implementa&ccedil;&otilde;es que realizamos, &eacute; a cria&ccedil;&atilde;o de menus de op&ccedil;&otilde;es para intera&ccedil;&atilde;o do usu&aacute;rio com nosso software, independente da plataforma, ou seja, &eacute; atrav&eacute;s de menus que definimos o caminho para realiza&ccedil;&atilde;o das opera&ccedil;&otilde;es dentro software. No micro-terminal SB-2030E isso n&atilde;o &eacute; diferente!<br /><br /></font><font face="Verdana" size="1">O display do SB-2030E &eacute; composto por 2 (duas) linhas de 40 (quarenta) colunas. &Eacute; nele que &quot;printamos&quot; as mensagens para o usu&aacute;rio/operador e tamb&eacute;m disponibilizamos op&ccedil;&otilde;es de intera&ccedil;&atilde;o.<br /><br /></font><font face="Verdana" size="1">Iremos conhecer duas formas de criar menus para esta intera&ccedil;&atilde;o.<br /><br /></font><font face="Verdana" size="1"><em>- Menu fixo<br /><br /></em></font><font face="Verdana" size="1">Iremos chamar de &quot;menu fixo&quot; o menu onde o operador escolhe a op&ccedil;&atilde;o pressionando uma tecla, por exemplo: &quot;F1&quot; para &quot;Venda&quot;, &quot;F2&quot; para &quot;Manuten&ccedil;&atilde;o&quot;, &quot;F3&quot; para &quot;Operador&quot; e etc.<br /><br /></font><font face="Verdana" size="1">O c&oacute;digo para este tipo de menu fica assim:<br /><br /></font><font face="Courier New" color="#0000ff" size="1">void far main() <br />{ <br />&nbsp;&nbsp;int iOpcao; </font></p>
<p><font face="Verdana" size="1"><font color="#0000ff"><font face="Courier New">&nbsp;&nbsp;clrscrU(); <br />&nbsp;&nbsp;printfU( &quot;&lt;F1&gt;Vendas &nbsp;&lt;F2&gt;Manutencao &nbsp;&lt;F3&gt;Operador\n&quot; );<br />&nbsp;&nbsp;printfU( &quot;Escolha a opcao:&quot; ); <br />&nbsp;&nbsp;setcursorU( ON|PISCANTE ); <br />&nbsp;&nbsp;gotoxyU( 18, 2 ); <br />&nbsp;&nbsp;iOpcao = getch(); <br />&nbsp;&nbsp;switch( iOpcao ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;case F1: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... rotina da op&ccedil;&atilde;o Venda <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... <br />&nbsp;&nbsp;&nbsp;&nbsp;break; <br />&nbsp;&nbsp;&nbsp;&nbsp;case F2:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... rotina da op&ccedil;&atilde;o Manutencao <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... <br />&nbsp;&nbsp;&nbsp;&nbsp;break; <br />&nbsp;&nbsp;&nbsp;&nbsp;case F3: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... rotina da op&ccedil;&atilde;o Operador <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... <br />&nbsp;&nbsp;&nbsp;&nbsp;break; <br />&nbsp;&nbsp;} <br />}</font><br /><br /></font></font><font face="Verdana" size="1">Esta &eacute; a representa&ccedil;&atilde;o no display, ap&oacute;s a telecarda:<br /><br /><img alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/tlaDisplay1.jpg" /><br /><br /><br /><em>- Menu de rolagem<br /><br /></em></font><font face="Verdana" size="1">Outro tipo de menu que podemos criar &eacute; o &quot;menu de rolagem&quot;, onde o usu&aacute;rio escolhe a op&ccedil;&atilde;o usando as setas do teclado (&lt;- ou -&gt;) e pressione &lt;ENTER&gt; sobre a selecionada.<br /><br /></font><font face="Verdana" size="1">O c&oacute;digo para este tipo de menu fica assim: <br /><br /></font><font face="Courier New" color="#0000ff" size="1">void far main() <br />{ <br />&nbsp;&nbsp;int iOpcao; </font></p>
<p><font face="Verdana" size="1"><font color="#0000ff"><font face="Courier New">&nbsp;&nbsp;clrscrU(); <br />&nbsp;&nbsp;printfU( &quot;Use as setas para escolher a opcao:\n&quot; ); <br />&nbsp;&nbsp;getopcao( &amp;iOpcao, 0, &quot;&lt;- Vendas&nbsp;&nbsp;&nbsp;&nbsp; -&gt;,&lt;- Manutencao -&gt;,&lt;- Operador &nbsp;&nbsp;-&gt;&quot; ); <br />&nbsp;&nbsp;switch( iOpcao ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;case 0: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... rotina da op&ccedil;&atilde;o Venda <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... <br />&nbsp;&nbsp;&nbsp;&nbsp;break; <br />&nbsp;&nbsp;&nbsp;&nbsp;case 1: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... rotina da op&ccedil;&atilde;o Manutencao <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... <br />&nbsp;&nbsp;&nbsp;&nbsp;break; <br />&nbsp;&nbsp;&nbsp;&nbsp;case 2: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... rotina da op&ccedil;&atilde;o Operador <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ... <br />&nbsp;&nbsp;&nbsp;&nbsp;break; <br />&nbsp;&nbsp;}<br />}</font><br /></font><br /></font><font face="Verdana" size="1">Esta &eacute; a representa&ccedil;&atilde;o no display, ap&oacute;s a telecarda:<br /><br /><img alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/tlaDisplay2.jpg" /><br /><br /><br />Repare que neste c&oacute;digo estamos usando uma fun&ccedil;&atilde;o nova - a fun&ccedil;&atilde;o getopcao.<br /><br /></font><font face="Verdana" size="1">Esta fun&ccedil;&atilde;o cria um menu de rolagem que retorna um valor inteiro quando pressionado &lt;ENTER&gt; sobre a op&ccedil;&atilde;o selecionada. No exemplo acima, se for escolhida a op&ccedil;&atilde;o &quot;Vendas&quot;, ao pressionar o &lt;ENTER&gt; o retorno para a vari&aacute;vel iOpcao ser&aacute; 0 (zero); se for escolhida a op&ccedil;&atilde;o &quot;Manutencao&quot;, o retorno ser&aacute; 1 (um); se for escolhida a op&ccedil;&atilde;o &quot;Operador&quot;, o retorno ser&aacute; 2 (dois) e, assim, sucessivamente. <br /><br /></font><font face="Verdana" size="1">As op&ccedil;&otilde;es deste tipo de menu s&atilde;o numeradas, iniciando sempre em 0 (zero). A fun&ccedil;&atilde;o getopcao possui 3 par&acirc;metros, onde o primeiro corresponde &agrave; vari&aacute;vel que receber&aacute; o valor da op&ccedil;&atilde;o escolhida, o segundo corresponde ao &iacute;ndice inicial das op&ccedil;&otilde;es (qual op&ccedil;&atilde;o voc&ecirc; deseja iniciar no display) e o terceiro &eacute; a string com as op&ccedil;&otilde;es separadas por &quot;,&quot; (v&iacute;rgula).<br /><br /></font><font face="Verdana" size="1">Assim, disponibilizamos duas formas diferentes de menus para que o operador possa interagir com o aplicativo no SB-2030E.<br /><br /></font><font face="Verdana" size="1"><br /><strong>- Fun&ccedil;&otilde;es de teclado e entrada de dados<br /></strong><br />Vamos conhecer agora, algumas fun&ccedil;&otilde;es importantes de acesso ao teclado e de entrada de dados - fun&ccedil;&otilde;es que s&atilde;o usadas na maioria das aplica&ccedil;&otilde;es para o SB-2030E.<br /><br /><em>- getch()<br /><br /></em>Podemos usar a fun&ccedil;&atilde;o getch para retornar o c&oacute;digo da tecla pressionada ou efetuar uma pausa na aplica&ccedil;&atilde;o.<br /><br />Da mesma forma que usamos para criar menus fixos, podemos legendar as teclas de venda r&aacute;pida (localizadas a esquerda do teclado do SB-2030E) e program&aacute;-las para agilizar determinadas opera&ccedil;&otilde;es, como por exemplo, vendas de combo de produtos ou escolher a forma de pagamento que se deseja pagar o cupom.<br /><br />A tecla &lt;Shift&gt; &eacute; usada para inserir caracteres em formato mai&uacute;sculo ou acionar o segundo caracter dispon&iacute;vel na tecla e &lt;Alt&gt; &eacute; usada para acionar o terceiro caractere dispon&iacute;vel na tecla. Vamos tomar como exemplo a tecla &quot;9&quot;, onde temos o s&iacute;mbolo &quot;%&quot; (porcentagem) e &quot;&amp;&quot; (E comercial). Para acionarmos o s&iacute;mbolo de &quot;%&quot; pressionamos a tecla &quot;9&quot; juntamente com &lt;Shift&gt; (&lt;Shift&gt;+&lt;9&gt;) e para acionarmos o s&iacute;mbolo &quot;&amp;&quot; pressionamos a tecla &quot;9&quot; juntamente com &lt;Alt&gt; (&lt;Alt&gt;+&lt;9&gt;).<br /><br />O c&oacute;digo abaixo pode ser usado para testarmos esta funcionalidade:<br /><br /><font face="Courier New" color="#0000ff">void far main() <br />{ <br />&nbsp;&nbsp;int iTecla; </font>
<p><font face="Courier New" color="#0000ff">&nbsp;&nbsp;clrscrU(); <br />&nbsp;&nbsp;printfU( &quot;Pressione alguma tecla...&quot; ); <br />&nbsp;&nbsp;iTecla = getch(); <br />&nbsp;&nbsp;printfU( &quot;\nCodigo da tecla pressionada: %c&quot;, iTecla ); <br />&nbsp;&nbsp;getch(); <br />}<br /></font><br />Esta &eacute; a representa&ccedil;&atilde;o no display, ap&oacute;s a telecarda e teste do exemplo:<br /><br /><img alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/tlaDisplay3.jpg" /><br /><br /><br />Obs: Para que possamos receber o c&oacute;digo da tecla &lt;Shift&gt; ou &lt;Alt&gt;, precisamos usar a fun&ccedil;&atilde;o getkeys() ao inv&eacute;s de getch(). Esta fun&ccedil;&atilde;o retornar&aacute; um valor inteiro, correspondente &agrave; estas teclas, caso seja necess&aacute;rio us&aacute;-las para controlar alguma rotina na aplica&ccedil;&atilde;o.<br /><br /><em>- gets()<br /><br /></em>A fun&ccedil;&atilde;o gets permite entradas de texto via teclado. Entretanto, esta fun&ccedil;&atilde;o n&atilde;o protege a vari&aacute;vel que estar&aacute; recebendo o texto (string), fazendo com que seu tamanho seja extrapolado. Veja o exemplo:<br /><br /><font face="Courier New" color="#0000ff">void far main() <br />{ <br />&nbsp;&nbsp;char cCodigo[ 13 ]; </font></p>
<p><font face="Courier New" color="#0000ff">&nbsp;&nbsp;clrscrU(); <br />&nbsp;&nbsp;printfU( &quot;Codigo do Produto: &quot; ); <br />&nbsp;&nbsp;setcursorU( ON|PISCANTE ); <br />&nbsp;&nbsp;gets( cCodigo ); <br />&nbsp;&nbsp;setcursorU( OFF ); <br />}</font> <br /><br />Esta &eacute; a representa&ccedil;&atilde;o no display, ap&oacute;s a telecarda e teste do exemplo:<br /><br /><img alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/tlaDisplay4.jpg" /><br /><br /><br />Criamos a vari&aacute;vel cCodigo que &eacute; do tipo char com 13 posi&ccedil;&otilde;es. Esta vari&aacute;vel receber&aacute; o c&oacute;digo de nosso produto, informado atrav&eacute;s da fun&ccedil;&atilde;o gets. Se digitarmos um c&oacute;digo com mais de 13 posi&ccedil;&otilde;es, a fun&ccedil;&atilde;o gets aceitar&aacute; sem problemas, mas quando pressionarmos o &lt;ENTER&gt;, para darmos continuidade ao programa, a &aacute;rea de mem&oacute;ria reservada para esta vari&aacute;vel n&atilde;o conseguir&aacute; armazenar a informa&ccedil;&atilde;o completa, gerando um erro. Neste caso, o ideal &eacute; usarmos a fun&ccedil;&atilde;o getstring(), onde conseguimos proteger o tamanho da vari&aacute;vel, al&eacute;m de formatar a string. Veja o novo exemplo:<br /><br /><font face="Courier New" color="#0000ff">void far main() <br />{ <br />&nbsp;&nbsp;char cCodigo[ 13 ]; </font></p>
<p><font face="Courier New" color="#0000ff">&nbsp;&nbsp;clrscrU(); <br />&nbsp;&nbsp;printfU( &quot;Codigo do Produto: &quot; ); <br />&nbsp;&nbsp;setcursorU( ON|PISCANTE );<br />&nbsp;&nbsp;getstring( cCodigo, 13, NUMERICO, NULL, NULL ); <br />&nbsp;&nbsp;setcursorU( OFF ); <br />}</font><br /><br /><em>- getstring()<br /><br /></em>A fun&ccedil;&atilde;o gerstring permite a entrada de dados limitando o seu tamanho (protegendo a vari&aacute;vel) e formatando a informa&ccedil;&atilde;o. Esta fun&ccedil;&atilde;o possui 5 par&acirc;metro a saber:</p>
</font></p>
<table style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="100%" border="1" dwcopytype="CopyTableRow">
    <tbody>
        <tr>
            <td width="15%">Par&acirc;metro 1:</td>
            <td colspan="2">Vari&aacute;vel que receber&aacute; a entrada dos dados pelo teclado.</td>
        </tr>
        <tr>
            <td width="15%">Par&acirc;metro 2:</td>
            <td colspan="2">Valor inteiro com o tamanho da vari&aacute;vel.</td>
        </tr>
        <tr>
            <td width="15%" rowspan="15">Par&acirc;metro 3:</td>
            <td colspan="2">Constante com o tipo da entrada de dados, exemplos:</td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>CLIENTE</em>:</td>
            <td width="67%">Modo normal num&eacute;rico.</td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>SOBRESCREVER</em>:</td>
            <td width="67%">Sobrescreve a STRING.</td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>SENHA</em>:</td>
            <td width="67%">Aparece no visor apenas asterisco &quot;*&quot;.</td>
        </tr>
        <tr>
            <td valign="middle" width="18%"><em>FORMAT_DEL</em>:</td>
            <td width="67%">Igual a op&ccedil;&atilde;o &quot;FORMAT&quot;, por&eacute;m se for pressionado a tecla &lt;DEL&gt; apaga os caracteres do display enquanto que a op&ccedil;&atilde;o &quot;FORMAT&quot; posiciona o cursor sobre os caracteres sem apag&aacute;-los do display.</td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>FORMAT</em>: </td>
            <td width="67%">STRING formatada. </td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>ALFA</em>:</td>
            <td width="67%">Formato alfanum&eacute;rico.</td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>NUMERICO</em>:</td>
            <td width="67%">Idem ao tipo CLIENTE.</td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>REVERSO</em>: </td>
            <td width="67%">O cursor corre da direita para esquerda. </td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>APENDE</em>:</td>
            <td width="67%">Se houver algo na STRING, o cursor vai para a &uacute;ltima posi&ccedil;&atilde;o.</td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>SEMVIRGULA</em>:</td>
            <td width="67%">N&atilde;o considera as v&iacute;rgulas.</td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>MAIUSCULA</em>:</td>
            <td width="67%">Recebe os dados em mai&uacute;sculo.</td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>TECPRODUTO</em>: </td>
            <td width="67%">Alfanum&eacute;rico.</td>
        </tr>
        <tr>
            <td valign="top" width="18%"><em>REESCREVER</em>:</td>
            <td width="67%">Reescreve a STRING.</td>
        </tr>
        <tr>
            <td colspan="2">Obs: No par&acirc;metro 3, poder&aacute; ser usado mais de um tipo de constante, basta separ&aacute;-los com o &quot;|&quot; (pipe), por exemplo: FORMAT|REVERSO.</td>
        </tr>
        <tr>
            <td width="15%">Par&acirc;metro 4:</td>
            <td colspan="2">Formata&ccedil;&atilde;o da string. Ex: &quot; / / &quot; (para entrada de Datas).</td>
        </tr>
        <tr>
            <td width="15%">Par&acirc;metro 5:</td>
            <td colspan="2">Caracter de preenchimento da vari&aacute;vel, caso ela n&atilde;o tenha sido preenchida pelo operador. </td>
        </tr>
    </tbody>
</table>
<p><font face="Verdana" size="1">No exemplo acima, utilizamos a vari&aacute;vel cCodigo (par&acirc;metro 1), limitamos o seu tamanho em 13 caracteres (par&acirc;metro 2), restringimos somente entradas num&eacute;ricas (par&acirc;metro 3), n&atilde;o usamos formata&ccedil;&atilde;o (par&acirc;metro 4) e, caso o operador pressione &lt;ENTER&gt;, a vari&aacute;vel vai para a mem&oacute;ria preenchida com nulos (par&acirc;metro 5).<br /><br />Esta &eacute; a representa&ccedil;&atilde;o no display, ap&oacute;s a telecarda e teste do exemplo:<br /><br /><img alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/tlaDisplay5.jpg" /><br /><br /><br /><em>- getstringvirgula<br /><br /></em></font><font face="Verdana" size="1">&Eacute; poss&iacute;vel fazermos entrada de dados com v&iacute;rgula, principalmente quando tratamos de entrada de valores com 2 ou 3 casas decimais - a fun&ccedil;&atilde;o que usamos para isso &eacute; a getstringvirgula.<br /><br /></font><font face="Verdana" size="1">Esta fun&ccedil;&atilde;o possui os mesmos par&acirc;metros da fun&ccedil;&atilde;o getstring que vimos anteriormente, incluindo apenas um par&acirc;metro que defini o n&uacute;mero de casas decimais que ser&aacute; usado, onde 0 (zero) &eacute; usado para 2 casas decimais e 1 (um) para 3 casas decimais. Veja o exemplo:<br /><br /></font><font face="Courier New" size="1">void far main() <br />{ <br />&nbsp;&nbsp;char cValor[ 9 ]; </font></p>
<p><font face="Verdana" size="1"><font face="Courier New" color="#0000ff">&nbsp;&nbsp;memset( cValor, NULL, sizeof( cValor ) ); <br />&nbsp;&nbsp;clrscrU(); <br />&nbsp;&nbsp;setcursorU( ON|PISCANTE ); <br />&nbsp;&nbsp;printfU( &quot;Entre com o Valor Unitario: &quot; ); <br />&nbsp;&nbsp;gotoxyU( 40, 1 ); <br />&nbsp;&nbsp;getstringvirgula( cValor, 8, NUMERICO|REVERSO, NULL, NULL, 0 ); <br />&nbsp;&nbsp;setcursorU( OFF ); <br />}<br /></font><br /></font><font face="Verdana" size="1">Esta &eacute; a representa&ccedil;&atilde;o no display, ap&oacute;s a telecarda e teste do exemplo:<br /><br /><img alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/tlaDisplay6.jpg" /><br /><br /></font></p>]]>
    </content>
</entry>
<entry>
    <title>Bematech FlashTip - 21a. Edição - Preparando o ambiente de desenvolvimento VisualSDK Builder e Iniciando o primeiro projeto</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2007/02/bematech_flashtip_21a_edicao_p.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=114" title="Bematech FlashTip - 21a. Edição - Preparando o ambiente de desenvolvimento VisualSDK Builder e Iniciando o primeiro projeto" />
    <id>tag:partners.bematech.com.br,2007:/flashtip//2.114</id>
    
    <published>2007-02-05T19:54:31Z</published>
    <updated>2007-02-05T20:23:33Z</updated>
    
    <summary><![CDATA[Caro parceiro,Na &uacute;ltima edi&ccedil;&atilde;o de nosso Flash Tip, conhecemos a BIOS, o BOOT e os segmentos de mem&oacute;ria do micro-terminal SB-2030E Bematech. Al&eacute;m disso, pudemos conhecer como est&aacute; estruturada as fun&ccedil;&otilde;es do SDK (kit de desenvolvimento para o SB-2030E) e...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Mini Cursos" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<p><font face="Verdana" size="1">Caro parceiro,<br /><br /></font><font face="Verdana" size="1">Na &uacute;ltima edi&ccedil;&atilde;o de nosso Flash Tip, conhecemos a BIOS, o BOOT e os segmentos de mem&oacute;ria do micro-terminal SB-2030E Bematech. Al&eacute;m disso, pudemos conhecer como est&aacute; estruturada as fun&ccedil;&otilde;es do SDK (kit de desenvolvimento para o SB-2030E) e visualizamos a janela inicial do VisualSDK Builder, a interface de desenvolvimento que estaremos utilizando.<br /><br /></font><font face="Verdana" size="1">Lembrete: Caso voc&ecirc; ainda n&atilde;o baixou o VisualSDK Builder, acesse:<br /><br /></font><a href="http://www.bematech.com.br/suporte/downloads/cpus_win/SDKbuilder.zip"><font face="Verdana" size="1">http://www.bematech.com.br/suporte/downloads/cpus_win/SDKbuilder.zip</font></a><font face="Verdana" size="1"> (+/- 20MB)<br /><br /></font><font face="Verdana" size="1">Nesta edi&ccedil;&atilde;o, estaremos preparando todo o ambiente de desenvolvimento e configurando a interface, deixando-a mais &quot;amig&aacute;vel&quot; poss&iacute;vel para facilitar nossas implementa&ccedil;&otilde;es. Tamb&eacute;m estaremos iniciando o nosso primeiro projeto e explorando algumas dicas de desenvolvimento r&aacute;pido. Ent&atilde;o, vamos l&aacute;!<br /></font></p>]]>
        <![CDATA[<p><font face="Verdana" size="1"><strong>- Preparando o ambiente de desenvolvimento - VisualSDK Builder<br /></strong><br /></font><font face="Verdana" size="1">Antes de iniciarmos o projeto, vamos configurar o ambiente que estaremos usando no desenvolvimento. Para isso, clique no menu &quot;Tools&quot; e em &quot;Edit Options...&quot;.<br /><br /></font><font face="Verdana" size="1">Na guia &quot;General&quot;, podemos ativar ou desativar a limpeza dos segmentos n&atilde;o ocupados por nossa aplica&ccedil;&atilde;o, fazendo com que a mem&oacute;ria de aloca&ccedil;&atilde;o do aplicativo se mantenha sempre organizada. Vamos deixar esta op&ccedil;&atilde;o ativa.<br /><br /></font><font face="Verdana" size="1">Quando transferimos pela primeira vez a aplica&ccedil;&atilde;o para o micro-terminal SB-2030E, a janela de configura&ccedil;&atilde;o de tele-carga &eacute; exibida automaticamente, por consequ&ecirc;ncia da op&ccedil;&atilde;o &quot;Once&quot; estar selecionada em &quot;Show transfer setup&quot;. Podemos mudar esta op&ccedil;&atilde;o, mas o recomend&aacute;vel &eacute; que esta janela seja exibida, pelo menos uma vez na primeira transfer&ecirc;ncia da aplica&ccedil;&atilde;o, para certificarmos de que as op&ccedil;&otilde;es de transfer&ecirc;ncia foram configuradas corretamente.</font></p>
<p align="center"><font face="Verdana" size="1"><img src="http://www.bematech.com.br/marketing/emkt/images/flashtip/guia_general.jpg" alt="" /><br /><em>Tools / Edit Options - guia General</em></font></p>
<p><font face="Verdana" size="1">Na guia &quot;Format&quot;, podemos modificar as propriedades, como cor e formata&ccedil;&atilde;o, dos elementos que s&atilde;o apresentados na &aacute;rea de inser&ccedil;&atilde;o do c&oacute;digo-fonte, quando programamos (semelhante &agrave;s configura&ccedil;&otilde;es que existem nos editores, como VB e Delphi).</font></p>
<p align="center"><font face="Verdana" size="1"><img src="http://www.bematech.com.br/marketing/emkt/images/flashtip/guia_format.jpg" alt="" /><br /><em>Tools / Edit Options - guia Format</em></font></p>
<font face="Verdana">
<p align="left"><font size="1">E, na guia &quot;Editor&quot;, podemos alterar a fonte de letra e seu tamanho, o tamanho da tabula&ccedil;&atilde;o do c&oacute;digo e o espa&ccedil;amento entre linhas. Geralmente usamos a fonte Courier ou Courier New com tamanho 10 para uma melhor visualiza&ccedil;&atilde;o do c&oacute;digo.</font></p>
<p align="center"><font size="1"><img src="http://www.bematech.com.br/marketing/emkt/images/flashtip/guia_editor.jpg" alt="" /><br /><em>Tools / Edit Options - guia Editor</em></font></p>
<p align="left"><em></em><strong><font size="1">- Iniciando o primeiro projeto</font></strong></p>
<p align="left"><font size="1">Vamos agora, iniciar o nosso primeiro projeto para SB-2030E. Para isso, clique no menu &quot;File&quot; e na op&ccedil;&atilde;o &quot;New Project&quot; ou clique na ferramenta correspondente. Surgir&aacute; uma janela, onde informaremos o nome de nosso projeto e o local aonde ele ser&aacute; salvo. Vamos informar no campo &quot;Project Name&quot; o nome ProjInic (de &quot;Projeto Inicial&quot;) e no &quot;Path&quot; C:\Meus Projetos\SB2030E (por exemplo).</font></p>
<p align="center"><font size="1"><img src="http://www.bematech.com.br/marketing/emkt\images/flashtip/janela_new_project.jpg" alt="" /><br /><em>janela New Project</em></font></p>
<p align="left"><font size="1">Ao clicar no bot&atilde;o &quot;OK&quot;, teremos a janela de inser&ccedil;&atilde;o do c&oacute;digo pronta para receber a programa&ccedil;&atilde;o.<br /><br />Repare que, automaticamente, o VisualSDK Builder insere algumas linhas de coment&aacute;rios no in&iacute;cio do c&oacute;digo e em algumas partes dele, &quot;facilitando a vida&quot; na hora da implementa&ccedil;&atilde;o.</font></p>
<p align="center"><font size="1"><img src="http://www.bematech.com.br/marketing/emkt\images/flashtip/codigo_new_project.jpg" alt="" /><br /><em>inteface de desenvolvimento</em></font></p>
<p align="left"><font size="1">A linguagem de programa utilizada &eacute; C/C++ mesclando com fun&ccedil;&otilde;es do SDK para o acesso ao hardware do SB-2030E, tornando o desenvolvimento mais f&aacute;cil e simples. No arquivo de ajuda do VisualSDk Builder temos v&aacute;rios exemplos de programa e informa&ccedil;&otilde;es sobre as fun&ccedil;&otilde;es do SDK (conforme vimos na edi&ccedil;&atilde;o passada).<br /><br />Vamos iniciar utilizando uma fun&ccedil;&atilde;o bem simples, apenas para poder visualizar sua sintaxe e as dicas que poderemos aplicar durante a implementa&ccedil;&atilde;o.<br /><br />Clique ao final da linha de coment&aacute;rio &quot;// INSERT CODE HERE&quot; e pressione &lt;ENTER&gt;. Digite a palavra clr e pressione &lt;CTRL&gt;+&lt;SPACE&gt;. Aparecer&aacute; uma lista com todas as fun&ccedil;&otilde;es do SDK iniciadas por esta palavra, possibilitando uma escrita mais r&aacute;pida, al&eacute;m de uma orienta&ccedil;&atilde;o mais precisa. Se pressionarmos apenas &lt;CTRL&gt;+&lt;SPACE&gt; em uma linha em branco, dentro de nosso c&oacute;digo, teremos a listagem de todas as fun&ccedil;&otilde;es dispon&iacute;veis no SDK e, a medida que vamos digitando o nome de uma fun&ccedil;&atilde;o, ela vai surgindo automaticamente.</font></p>
<p align="center"><font size="1"><img src="http://www.bematech.com.br/marketing/emkt\images/flashtip/complet.jpg" alt="" /><br /><em>auto-complete da fun&ccedil;&atilde;o clrscrU</em></font></p>
<p align="left"><font size="1">A primeira fun&ccedil;&atilde;o que iremos usar &eacute; clrscrU() que aparece logo abaixo na lista. Repare que o seu coment&aacute;rio &eacute; &quot;Limpa o display do Usu&aacute;rio&quot;. Algumas fun&ccedil;&otilde;es possuem a sigla &quot;U&quot;, &quot;C&quot; ou &quot;UC&quot; ao seu final, isso significa o destino do efeito desta fun&ccedil;&atilde;o, por exemplo: se quisermos limpar o display do usu&aacute;rio (display do SB-2030E) usamos clrscrU(); se quisermos limpar, al&eacute;m do display do usu&aacute;rio, o display do cliente (Customer Display) usamos clrscrUC() e se quisermos limpar apenas o display do cliente usamos clrscrC(), ou seja, &quot;U&quot; de usu&aacute;rio ou &quot;C&quot; de cliente.<br /><br />Neste primeiro passo, vamos usar as principais fun&ccedil;&otilde;es de acesso ao display do usu&aacute;rio, como limpar, imprimir uma mensagem, centralizar uma mensagem, ligar e posicionar o cursor no display. Algumas fun&ccedil;&otilde;es possuem par&acirc;metros e outras n&atilde;o. No caso da fun&ccedil;&atilde;o clrscrU(), ela n&atilde;o possui par&acirc;metros, ent&atilde;o apenas abrimos e fechamos os par&ecirc;nteses (). Caso estejamos usando alguma fun&ccedil;&atilde;o com par&acirc;metros, o pr&oacute;prio VisualSDK Builder nos exibir&aacute; uma &quot;hint&quot;, auxiliando na implementa&ccedil;&atilde;o.<br /><br />Ap&oacute;s completarmos a fun&ccedil;&atilde;o clrscrU(), verificada anteriormente, vamos utilizar uma fun&ccedil;&atilde;o para escrever (printar) uma mensagem no display. A fun&ccedil;&atilde;o &eacute; printfU.<br /><br />Repare que quando voc&ecirc; inserir a fun&ccedil;&atilde;o printfU e pressionar o &quot;abre par&ecirc;nteses&quot;, a hint desta fun&ccedil;&atilde;o &eacute; exibida, indicando que ela possui um par&acirc;metro do tipo char.</font></p>
<p align="center"><font size="1"><img src="http://www.bematech.com.br/marketing/emkt\images/flashtip/hint.jpg" alt="" /><br /><em>hint da fun&ccedil;&atilde;o printfU</em></font></p>
<p align="left"><font size="1">Vamos digitar entre aspas a mensagem: &quot;MEU PRIMEIRO PROJETO!&quot;. Esta &eacute; a mensagem que iremos &quot;printar&quot; no display.<br /><br />PS: Pensou que ir&iacute;amos usar &quot;HELLO WORLD!&quot;!<br /><br />E, ap&oacute;s digitado a fun&ccedil;&atilde;o printfU, inserimos a fun&ccedil;&atilde;o getch() para fazer uma pausa na aplica&ccedil;&atilde;o, pois como o main() &eacute; um loop, a aplica&ccedil;&atilde;o ficar&aacute; limpando e escrevendo a mensagem no display do SB-2030E, impedindo sua visualiza&ccedil;&atilde;o.</font></p>
<p align="center"><font size="1"><img src="http://www.bematech.com.br/marketing/emkt\images/flashtip/codigo1.jpg" alt="" /><br /><em>fun&ccedil;&atilde;o printfU completada</em></font></p>
<p align="left"><font size="1">J&aacute; estamos com uma pequena aplica&ccedil;&atilde;o, que agora pode ser compilada e transferida para SB-2030E. Mas, antes de realizar estes procedimentos, temos que configurar o modelo do micro-terminal que receber&aacute; a aplica&ccedil;&atilde;o e quem &eacute; ele (endere&ccedil;o IP). Para isso, v&aacute; ao menu &quot;Project&quot; e em &quot;Options...&quot; ou clique na ferramenta correspondente.<br /><br />Na guia &quot;General&quot;, selecione a op&ccedil;&atilde;o LAN que corresponde aos modelos SB-2030E, SB-2030EP e SB-2030ES, ambos com interface Ethernet. O tamanho da mem&oacute;ria flash para armazenamento da aplica&ccedil;&atilde;o ser&aacute; 512KB. Tamb&eacute;m &eacute; poss&iacute;vel incluir informa&ccedil;&otilde;es ao projeto, atrav&eacute;s da op&ccedil;&atilde;o &quot;Project Information&quot;, situada nesta guia.</font></p>
<p align="center"><font size="1"><img src="http://www.bematech.com.br/marketing/emkt\images/flashtip/guia_general_project.jpg" alt="" /><br /><em>Project / Options - guia General</em></font></p>
<p align="left"><font size="1">Na guia &quot;Files Organize&quot;, temos a organiza&ccedil;&atilde;o de nosso aplicativo na mem&oacute;ria do SB-2030E, sempre iniciando pelo primeiro segmento. Podemos, por exemplo, inserir no primeiro segmento de mem&oacute;ria (Seg 1) o arquivo .tcc, onde nossa aplica&ccedil;&atilde;o principal (main) est&aacute;, e no segundo segmento (Seg 2) um arquivo .tcc com fun&ccedil;&otilde;es e procedures internas &agrave; aplica&ccedil;&atilde;o. Isso n&atilde;o &eacute; obrigat&oacute;rio, &eacute; apenas uma forma de organizar, pois toda a aplica&ccedil;&atilde;o pode ficar residente em um &uacute;nico segmento de mem&oacute;ria (Seg 1), ou se o segmento corrente n&atilde;o possuir tamanho suficiente para armazenar a aplica&ccedil;&atilde;o, neste caso ser&aacute; necess&aacute;rio dividi-la em arquivos .tcc e distribu&iacute;-la nos segmentos dispon&iacute;veis.<br /><br />Para isso, basta selecionar o arquivo .tcc e escolher o segmento de destino na caixa &quot;Segment change&quot; - o arquivo passar&aacute; a ocupar este segmento. Caso seja necess&aacute;rio remover um arquivo .tcc de um determinado segmento, basta selecion&aacute;-lo e clicar no bot&atilde;o &quot;Remove&quot;. O arquivo n&atilde;o ser&aacute; exclu&iacute;do, apenas ser&aacute; retirado do projeto.</font></p>
<p align="center"><font size="1"><img src="http://www.bematech.com.br/marketing/emkt\images/flashtip/guia_files_project.jpg" alt="" /><br /></font><em><font size="1">Project / Options - guia Files Organize<br /><br /><img src="http://www.bematech.com.br/marketing/emkt\images/flashtip/guia_files_project2.jpg" alt="" /><br />Project / Options - guia Files Organize</font></em></p>
<p align="left"><font size="1">Na guia &quot;Transfer&quot;, iremos selecionar o endere&ccedil;o IP do SB-2030E que receber&aacute; a aplica&ccedil;&atilde;o (certifique-se de que o SB-2030E esteja conectado a sua rede LAN e ligado).<br /><br />Clique no bot&atilde;o &quot;search&quot; e na janela &quot;IP ADDRESS&quot; que surgir&aacute;, clique novamente em &quot;Search&quot;.</font></p>
<p align="center"><font size="1"><img src="http://www.bematech.com.br/marketing/emkt\images/flashtip/guia_transfer_project.jpg" alt="" /><br /><em>janela IP ADDRESS </em></font></p>
<p align="left"><font size="1">O SB-2030E ser&aacute; localizado e seu endere&ccedil;o IP exibido na lista. Ao clicar no bot&atilde;o &quot;OK&quot; teremos o combobox IP &quot;alimentado&quot; com o endere&ccedil;o IP do SB-2030E (se tivermos mais de um na rede, estes ser&atilde;o exibidos tamb&eacute;m). Selecione neste combobox o IP do SB-2030E. Ser&atilde;o exibidos nesta lista, somente os IPs dos SB-2030E dispon&iacute;veis na rede, ou seja, n&atilde;o teremos IPs de computador aqui. O IP do SB-2030E vem cofigurado de f&aacute;brica, mas podemos modific&aacute;-lo informando os valores nas caixas do &quot;Terminal&quot; e clicar no bot&atilde;o &quot;Update&quot;. Se desligarmos o SB-2030E, este n&atilde;o aparecer&aacute; na lista quando fizermos uma nova procura.<br /><br />Continuando na guia &quot;Transfer&quot;, temos outras op&ccedil;&otilde;es que s&atilde;o importantes conhecermos.<br /><br />Quando compilamos o projeto, &eacute; gerado um arquivo bin&aacute;rio com instru&ccedil;&otilde;es da aplica&ccedil;&atilde;o e informa&ccedil;&otilde;es de BIOS/BOOT. Este arquivo &eacute; transferido para a mem&oacute;ria do SB-2030E e passa a ocupar o primeiro segmento. Conforme vimos na edi&ccedil;&atilde;o anterior, a mem&oacute;ria do SB-2030E que armazena a aplica&ccedil;&atilde;o &eacute; dividida em segmentos, onde o segmento 0 se destina as informa&ccedil;&otilde;es de BIOS e os segmentos de 1 a 7 &agrave; aplica&ccedil;&atilde;o. Se for necess&aacute;rio atualizar a BIOS do SB-2030E, basta selecionar o segmento 0 (Segment 0), juntamente com o segmento que a aplica&ccedil;&atilde;o ocupar&aacute; (no caso, segmento 1). Se a aplica&ccedil;&atilde;o estiver dividida em mais de um segmento, estes tamb&eacute;m devem ser selecionados. Caso n&atilde;o seja necess&aacute;ria a atualiza&ccedil;&atilde;o da BIOS, o VisualSDK Builder apresentar&aacute; uma mensagem informando.<br /><br />Tamb&eacute;m &eacute; poss&iacute;vel atualizar o BOOT. Para isso, basta selecionar a op&ccedil;&atilde;o &quot;Send Boot&quot;. Todos os segmentos ficar&atilde;o desabilitados para que o BOOT seja transferido, depois disso, &eacute; necess&aacute;rio desmarc&aacute;-lo para que os segmentos sejam habilitados novamente.<br /><br />A op&ccedil;&atilde;o &quot;Reset after transfer&quot; faz com que o SB-2030E seja resetado a cada transfer&ecirc;ncia da aplica&ccedil;&atilde;o, executando-a na sequ&ecirc;ncia. &Eacute; importante mantermos esta op&ccedil;&atilde;o selecionada, assim evitamos resetar o SB-2030E manualmente.<br /><br />Como o modelo de micro-terminal que estamos usando &eacute; o SB-2030E (Ethernet), a transfer&ecirc;ncia da aplica&ccedil;&atilde;o se d&aacute; atrav&eacute;s da rede. Neste caso, as op&ccedil;&otilde;es &quot;Comunications Interface&quot; e &quot;Transfer type&quot; ficam desabilitadas. Estas op&ccedil;&otilde;es s&atilde;o usadas para os modelos que n&atilde;o possuem a conex&atilde;o Ethernet.</font></p>
<p align="center"><font size="1"><img src="http://www.bematech.com.br/marketing/emkt\images/flashtip/guia_transfer_project2.jpg" alt="" /><br /><em>Project / Options - guia Transfer </em></font></p>
<p align="left"><font size="1">J&aacute; estamos com a configura&ccedil;&atilde;o de telecarga pronta. Damos um &quot;OK&quot; nesta janela e vamos compilar o projeto.<br /><br />Clique no menu &quot;Projet&quot; e escolha &quot;Build&quot; (pode-se usar a ferramenta correspondente). Surgir&aacute; uma janela DOS com o processo da compila&ccedil;&atilde;o. Se tudo estiver correto, no rodap&eacute; da tela aparecer&aacute; o resultado &quot;OK&quot; desta compila&ccedil;&atilde;o, caso contr&aacute;rio teremos a indica&ccedil;&atilde;o de erro e a linha onde o mesmo se encontra para corre&ccedil;&atilde;o.<br /><br />Ap&oacute;s a compila&ccedil;&atilde;o, vamos transferir a aplica&ccedil;&atilde;o para o SB-2030E. Antes disso, temos que colocar o SB-2030E em modo de telecarga e para isso, segure a tecla &lt;ALT&gt; e pressione &lt;ENTER&gt; em seu teclado. Esta combina&ccedil;&atilde;o reseta o SB-2030E e coloca-o em modo de espera da aplica&ccedil;&atilde;o.<br /><br />V&aacute; at&eacute; o menu &quot;Project&quot; e escolha &quot;Transfer&quot; ou use a ferramenta correspondente. A janela &quot;Transfer&quot; ser&aacute; exibida, apenas para confirmarmos as configura&ccedil;&otilde;es, e clicando em &quot;OK&quot; nossa aplica&ccedil;&atilde;o &eacute; telecarregada para o SB-2030E.</font></p>
<p align="center"><font size="1"><img src="http://www.bematech.com.br/marketing/emkt\images/flashtip/sb2030e.jpg" alt="" /><br /><em>SB-2030E com o print da mensagem</em></font></p>
<p align="left"><font size="1">N&atilde;o esque&ccedil;a de sempre pressionar as teclas &lt;ALT&gt; e &lt;ENTER&gt;, antes de transferir a aplica&ccedil;&atilde;o para o SB-2030E.<br /><br />Voltando ao projeto, vamos agora inserir a fun&ccedil;&atilde;o &quot;centralizaU&quot;. Esta fun&ccedil;&atilde;o permite certralizar uma mensagem no display do usu&aacute;rio, escolhendo a linha em que ser&aacute; exibida (lembrando que temos 2 linhas com 40 colunas cada, no display do usu&aacute;rio).<br /><br />Abaixo da fun&ccedil;&atilde;o &quot;printfU&quot; digite centralizaU(2, &quot;&lt;&lt;&lt; Pressione algo &gt;&gt;&gt;&quot;);<br /><br />Ao compilar a aplica&ccedil;&atilde;o e transferi-la para o SB-2030E, teremos a mensagem &quot;&lt;&lt;&lt; Pressione algo &gt;&gt;&gt;&quot; centralizada na segunda linha do display do usu&aacute;rio.<br /><br />Vamos agora, ligar o cursor no display e posicion&aacute;-lo em uma linha e coluna espec&iacute;fica. Para isso, volte ao projeto e, ap&oacute;s a fun&ccedil;&atilde;o &quot;centralizaU&quot;, digite a fun&ccedil;&atilde;o &quot;setcursorU(ON|PISCANTE);&quot; e, abaixo desta, &quot;gotoxyU(40,1);&quot;. A fun&ccedil;&atilde;o &quot;setcursorU&quot; &eacute; usada para ligar ou desligar o cursor no display do usu&aacute;rio e a fun&ccedil;&atilde;o &quot;gotoxyU&quot; para posicion&aacute;-lo (veja no arquivo de ajuda, maiores informa&ccedil;&otilde;es sobre estas fun&ccedil;&otilde;es).<br /><br />Ap&oacute;s isso, compile novamente a aplica&ccedil;&atilde;o e transfira para o SB-2030E, e veja o resultado.<br /><br />Veja como ficou nosso c&oacute;digo final:<br /><br /></font><font face="Courier New" color="#993300" size="1">void far main()<br />{<br />&nbsp;&nbsp; // INSERT CODE HERE<br />&nbsp;&nbsp; clrscrU(); <br />&nbsp;&nbsp; printfU(&quot;MEU PRIMEIRO PROJETO!&quot;); <br />&nbsp;&nbsp; centralizaU(2, &quot;&lt;&lt;&lt; Pressione algo &gt;&gt;&gt;&quot;); <br />&nbsp;&nbsp; setcursorU(ON|PISCANTE); <br />&nbsp;&nbsp; gotoxyU(40,1); <br />&nbsp;&nbsp; getch(); <br />}//End of main program function</font></p>
</font>]]>
    </content>
</entry>
<entry>
    <title>Bematech FlashTip - 20a. Edição - Conhecendo a BIOS, BOOT, Segmentos de Memória, SDK e o VisualSDK Builder</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2007/01/bematech_flashtip_20a_edicao_c.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=109" title="Bematech FlashTip - 20a. Edição - Conhecendo a BIOS, BOOT, Segmentos de Memória, SDK e o VisualSDK Builder" />
    <id>tag:partners.bematech.com.br,2007:/flashtip//2.109</id>
    
    <published>2007-01-05T19:39:16Z</published>
    <updated>2007-01-05T19:56:18Z</updated>
    
    <summary><![CDATA[Caro parceiro,Como este &eacute; o primeiro Flash-Tip do ano, gostaria de inici&aacute;-lo desejando a voc&ecirc; um FELIZ 2007 com SA&Uacute;DE, PAZ, SUCESSO e MUITAS REALIZA&Ccedil;&Otilde;ES!Na edi&ccedil;&atilde;o anterior, pudemos conhecer um pouco sobre o novo modelo de micro-terminal program&aacute;vel Bematech -...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Mini Cursos" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<font face="Verdana" size="1">Caro parceiro,<br /><br />Como este &eacute; o primeiro Flash-Tip do ano, gostaria de inici&aacute;-lo desejando a voc&ecirc; um FELIZ 2007 com SA&Uacute;DE, PAZ, SUCESSO e MUITAS REALIZA&Ccedil;&Otilde;ES!<br /><br />Na edi&ccedil;&atilde;o anterior, pudemos conhecer um pouco sobre o novo modelo de micro-terminal program&aacute;vel Bematech - o SB2030 E (Ethernet). Vimos suas principais caracter&iacute;sticas e alguns conceitos importantes.<br /><br />Nesta edi&ccedil;&atilde;o, vamos abordar alguns assuntos que s&atilde;o importantes para o bom desenvolvimento da aplica&ccedil;&atilde;o. Como &eacute; formado a BIOS, o BOOT e os segmentos de mem&oacute;ria do micro-terminal SB2030 E. Em seguida, entraremos no kit de desenvolvimento (SDK) e no ambiente de desenvolvimento chamado VisualSDK Builder, onde estaremos desenvolvendo toda nossa aplica&ccedil;&atilde;o.<br /><br /></font>]]>
        <![CDATA[<p align="center"><font face="Verdana"><font size="1"><strong><img alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/divisao_microterminal.jpg" /></strong></font></font></p>
<font face="Verdana"><font size="1">
<p><br /><strong>- BIOS<br /><br /></strong>Por defini&ccedil;&atilde;o, temos <em>&quot;Sistema B&aacute;sico de Entrada e Sa&iacute;da&quot; (Basic Input Output System)</em>. Em outras palavras, a BIOS &eacute; respons&aacute;vel por controlar todo o hardware do micro-terminal envolvendo mem&oacute;ria, processador, rel&oacute;gio e etc., que por sua vez, controlam os perif&eacute;ricos, como impressora, leitores, balan&ccedil;as e etc.<br /><br />Quando terminamos de desenvolver nossa aplica&ccedil;&atilde;o, atrav&eacute;s do SDK, a mesma &eacute; compilada, ou seja, &eacute; transformada em linguagem de m&aacute;quina, na qual cont&eacute;m diversas instru&ccedil;&otilde;es para acionamento do hardware do micro-terminal e os perif&eacute;ricos que nele est&atilde;o conectados.<br /><br /><strong>- BOOT<br /><br /></strong>Esta &aacute;rea cont&eacute;m um conjunto m&iacute;nimo de comandos, suficientes para controlar o micro-terminal, com a &uacute;nica fun&ccedil;&atilde;o de executar a transfer&ecirc;ncia de dados entre ele e o computador. Estas informa&ccedil;&otilde;es s&atilde;o gravadas internamente em uma mem&oacute;ria n&atilde;o vol&aacute;til, chamada de Flash (semelhante a um HD de computador, por&eacute;m sem partes mec&acirc;nicas). Atrav&eacute;s do VisualSDK Builder, vamos conhecer as op&ccedil;&otilde;es de atualiza&ccedil;&atilde;o de BIOS e/ou BOOT quando forem necess&aacute;rios ao nosso desenvolvimento.<br /><br /><strong>- Segmentos de Mem&oacute;ria<br /><br /></strong>A &aacute;rea de mem&oacute;ria do micro-terminal &eacute; dividida em 3: <br /><br />&bull; &aacute;rea de mem&oacute;ria RAM;<br />&bull; &aacute;rea de mem&oacute;ria Flash para aplica&ccedil;&atilde;o e;<br />&bull; &aacute;rea de mem&oacute;ria Flash para banco de dados.<br /><br />Na &aacute;rea de mem&oacute;ria RAM s&atilde;o processadas todas as rotinas do aplicativo e armazenadas as vari&aacute;veis de ambiente (utilizadas durante a execu&ccedil;&atilde;o do aplicativo). Esta mem&oacute;ria &eacute; vol&aacute;til e possui um tamanho de 512 KB. <br /><br />Toda a aplica&ccedil;&atilde;o fica armazenada na &aacute;rea de mem&oacute;ria flash n&atilde;o-vol&aacute;til. Esta mem&oacute;ria possui 512 KB e &eacute; dividida em 8 segmentos de 64 KB, onde: <br /><br />&bull; segmento 0 corresponde a &aacute;rea de BIOS do micro-terminal.<br />&bull; segmentos 1 a 7 correspondem &agrave;s &aacute;reas de mem&oacute;ria para armazenamento do aplicativo.<br /><br />Observa&ccedil;&atilde;o: A compila&ccedil;&atilde;o gera um aplicativo bem compacto, onde um &uacute;nico segmento pode ser utilizado para o seu armazenamento, mas caso haja a necessidade de se usar mais de um segmento, &eacute; necess&aacute;rio que o aplicativo seja dividido em partes, onde o projeto principal poder&aacute; ocupar o primeiro segmento e as rotinas de fun&ccedil;&otilde;es poder&atilde;o ocupar um outro segmento. Existe, tamb&eacute;m, uma &aacute;rea reservada ao BOOT do micro-terminal. Esta &aacute;rea possui um tamanho de 16 KB. <br /><br />A &aacute;rea de mem&oacute;ria dispon&iacute;vel para banco de dados &eacute; reservada somente para o armazenamento de dados. Ela possui um tamanho de 512 KB, podendo ser expandida at&eacute; 2 MB (conforme os modelos que vimos na edi&ccedil;&atilde;o anterior).<br /><br />Iremos conhecer cada segmento de mem&oacute;ria quando estivermos preparando nossa aplica&ccedil;&atilde;o para compila&ccedil;&atilde;o e transfer&ecirc;ncia para o micro-terminal.<br /><br /><strong>- SDK<br /><br /></strong>O micro-terminal possui um kit de desenvolvimento (SDK) contendo fun&ccedil;&otilde;es de acesso ao hardware, como:<br /><br />&bull; Fun&ccedil;&otilde;es de Display;<br />&bull; Fun&ccedil;&otilde;es de Teclado; <br />&bull; Fun&ccedil;&otilde;es de Manipula&ccedil;&atilde;o de N&uacute;meros e Strings;<br />&bull; Fun&ccedil;&otilde;es de Acesso as Portas Seriais; <br />&bull; Fun&ccedil;&otilde;es de RTC (Real Time Clock); <br />&bull; Fun&ccedil;&otilde;es de Timer; <br />&bull; Fun&ccedil;&otilde;es de Acesso ao MCR (Slot Reader);<br />&bull; Fun&ccedil;&otilde;es de Banco de Dados e;<br />&bull; Fun&ccedil;&otilde;es de Acesso ao MODEM. <br /><br />Al&eacute;m do SDK, tamb&eacute;m encontramos fun&ccedil;&otilde;es de alto-n&iacute;vel para acessar os demais perif&eacute;ricos da automa&ccedil;&atilde;o, como leitor de c&oacute;digo de barras, impressora fiscal e n&atilde;o fiscal. <br /><br /><strong>- VisualSDK Builder<br /><br /></strong>Com a finalidade de nos auxiliar na edi&ccedil;&atilde;o, compila&ccedil;&atilde;o e transfer&ecirc;ncia da aplica&ccedil;&atilde;o para o micro-terminal, o utilit&aacute;rio VisualSDK Builder possui todas os recursos necess&aacute;rias para o bom desenvolvimento da aplica&ccedil;&atilde;o. O VisualSDK Builder &eacute; totalmente visual, sendo utilizado em ambiente Windows. Toda a edi&ccedil;&atilde;o de nosso c&oacute;digo passa por uma an&aacute;lise de sintaxe, exibindo as fun&ccedil;&otilde;es do SDK em cores real&ccedil;adas, com descri&ccedil;&atilde;o de seus par&acirc;metros e apresentando dicas de sintaxe na barra de status da tela, facilitando a implementa&ccedil;&atilde;o. <br /><br />Para que possamos conhecer com detalhes o ambiente que estaremos usando, vamos baixar o VisualSDK Builder do site da Bematech, atrav&eacute;s do link:<br /><br /><a href="http://www.bematech.com.br/suporte/downloads/cpus_win/SDKbuilder.zip">http://www.bematech.com.br/suporte/downloads/cpus_win/SDKbuilder.zip</a> (+/- 20MB)<br /><br />A instala&ccedil;&atilde;o &eacute; muito simples! Next, Next e Finish!<br /><br />Ap&oacute;s a instala&ccedil;&atilde;o, teremos um &iacute;cone criado no Desktop ou um atalho no menu Iniciar do Windows, bastando agora, apenas execut&aacute;-lo. <br /><br />Ao executar o VisualSDK Builder, teremos a seguinte janela inicial.</p>
<p align="center"><img alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/tla_inicial_sdkbuilder.jpg" /></p>
<p>A interface &eacute; semelhante &agrave;quelas que j&aacute; conhecemos, como a do Delphi ou Visual Basic, e muito simples de utilizar. Temos uma barra de menus com op&ccedil;&otilde;es variadas e barras de ferramentas com atalhos para as principais opera&ccedil;&otilde;es da interface. Ao posicionarmos o mouse sobre cada ferramenta, surge uma descri&ccedil;&atilde;o resumida do que ela faz. <br /><br />Podemos tamb&eacute;m, a qualquer momento de nossas implementa&ccedil;&otilde;es, consultar o arquivo de ajuda do VisualSDK Builder, atrav&eacute;s do menu &quot;Help/Contents&quot;. Ele oferece detalhadamente, informa&ccedil;&otilde;es sobre toda interface (edi&ccedil;&atilde;o, ordena&ccedil;&atilde;o, compila&ccedil;&atilde;o, transfer&ecirc;ncia e etc.) e sobre as fun&ccedil;&otilde;es do SDK, al&eacute;m de exemplos variados sobre o uso dos perif&eacute;ricos.</p>
<p align="center"><img alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/tla_help_sdkbuilder.jpg" /></p>
<p>Na pr&oacute;xima edi&ccedil;&atilde;o de nosso Flash Tip, iremos:<br /><br />- Preparar o ambiente para o desenvolvimento da aplica&ccedil;&atilde;o e;<br />- Iniciar o nosso primeiro projeto.<br /><br /><br /><strong>N&atilde;o perca!<br /></strong><br />At&eacute; l&aacute; e boas implementa&ccedil;&otilde;es!</p>
</font></font>]]>
    </content>
</entry>
<entry>
    <title>Bematech Flash Tip - 8a. Edição - Programando para o micro-terminal SB-2030 E (Ethernet) Bematech</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2006/12/programando_para_o_microtermin.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=102" title="Bematech Flash Tip - 8a. Edição - Programando para o micro-terminal SB-2030 E (Ethernet) Bematech" />
    <id>tag:partners.bematech.com.br,2006:/flashtip//2.102</id>
    
    <published>2006-12-19T21:09:44Z</published>
    <updated>2006-12-20T14:31:57Z</updated>
    
    <summary><![CDATA[Caro parceiro,Estamos iniciando uma s&eacute;rie de Flash-Tips, em forma de &quot;mini-curso&quot;, com o objetivo de orient&aacute;-lo no uso e na programa&ccedil;&atilde;o da linha de micro-terminais program&aacute;veis da Bematech - em especial, o novo modelo SB-2030 E....]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Mini Cursos" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<p><font face="Verdana" size="1">Caro parceiro,<br /><br /></font><font face="Verdana" size="1">Estamos iniciando uma s&eacute;rie de Flash-Tips, em forma de &quot;mini-curso&quot;, com o objetivo de orient&aacute;-lo no uso e na programa&ccedil;&atilde;o da linha de micro-terminais program&aacute;veis da Bematech - em especial, o novo modelo SB-2030 E.<br /><br /></font></p>]]>
        <![CDATA[<p><font face="Verdana" size="1">Iniciamos esta edi&ccedil;&atilde;o, conhecendo um pouco sobre este modelo. Suas principais diferen&ccedil;as e caracter&iacute;sticas e alguns conceitos importantes, antes de come&ccedil;armos com a programa&ccedil;&atilde;o. Ent&atilde;o, vamos l&aacute;!<br /><br /></font><font face="Verdana"><font size="1"><strong>- O micro-terminal SB-2030 E <br /></strong><br /></font></font><font face="Verdana" size="1">O micro-terminal SB-2030 E tem como objetivo atender v&aacute;rios segmentos de mercado, possibilitando ao desenvolvedor criar diversas solu&ccedil;&otilde;es adequadas &agrave;s necessidades de seu cliente, possibilitando a integra&ccedil;&atilde;o com outros perif&eacute;ricos de automa&ccedil;&atilde;o.<br /><br /></font><font face="Verdana" size="1">O micro-terminal SB-2030 E &eacute; inteligente, de alto desempenho, de simples instala&ccedil;&atilde;o e opera&ccedil;&atilde;o, possui S.O. e Banco de Dados pr&oacute;prios, permitindo o desenvolvimento de aplicativos para os diversos segmentos de mercado, como:<br /><br />
<table width="100%" border="0">
    <tbody>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Restaurantes</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;A&ccedil;ougues</font></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull;&nbsp; Lojas de Autope&ccedil;as</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Confeitarias</font></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull;&nbsp; Lojas de Inform&aacute;tica</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Lojas de Material Esportivo</font></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull;&nbsp; Lojas de Ferragens</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Mercados</font></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull;&nbsp; Lojas de Materiais de Constru&ccedil;&atilde;o</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Padarias e Mercearias</font></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull;&nbsp; Papelarias e Materiais de Escrit&oacute;rio</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Dist. de Produtos Aliment&iacute;cios</font></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Lojas de Moveis e Eletrodom&eacute;sticos</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Farm&aacute;cias e Drogarias</font></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull;&nbsp; Com&eacute;rcio de Tintas</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Estacionamentos</font></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull;&nbsp; Lojas de Brinquedos</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Hot&eacute;is</font></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull;&nbsp; &Oacute;ticas</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Lojas em Geral</font></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull;&nbsp; Adegas</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Pontos de Arrecadamento</font></p>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull;&nbsp; Vidra&ccedil;arias</font></p>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="49%">
            <p><font size="1">&bull; &nbsp;Outros</font></p>
            </td>
        </tr>
    </tbody>
</table>
<br /><strong>- Caracter&iacute;sticas entre os modelos<br /></strong><br /></font></p>
<table width="100%" border="1">
    <tbody>
        <tr bgcolor="#666666">
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font color="#ffffff" size="1"><strong>&nbsp;Componentes</strong></font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font color="#ffffff" size="1"><strong>SB-2030</strong></font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font color="#ffffff" size="1"><strong>SB-2030<br />PLUS </strong></font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font color="#ffffff" size="1"><strong>SB-2030<br />E </strong></font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font color="#ffffff" size="1"><strong>SB-2030<br />E PLUS</strong></font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font color="#ffffff" size="1"><strong>SB-2030<br />ES </strong></font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font color="#ffffff" size="1"><strong>SB-2090</strong></font></div>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font size="1">&nbsp;Serial RS-232C</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">3</font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">3</font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">3</font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">3</font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">3</font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">3</font></div>
            </td>
        </tr>
        <tr bgcolor="#cccccc">
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font size="1">&nbsp;Serial RS-485 ou RS-232C</font></td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">1</font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">1</font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td width="11%" bgcolor="#cccccc">
            <div align="center"><font face="Verdana" size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">1</font></div>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font size="1">&nbsp;Modem V22-Bis</font></td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%"><font size="1">&nbsp;</font></td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
        </tr>
        <tr bgcolor="#cccccc">
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font size="1">&nbsp;LAN - Ethernet</font></td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font size="1">&nbsp;Backlight</font></td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
        </tr>
        <tr bgcolor="#cccccc">
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font size="1">&nbsp;Slot Reader</font></td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font size="1">&nbsp;Exp. Mem&oacute;ria (SB2002)</font></td>
            <td width="11%">
            <div align="center"><font face="Verdana" size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
        </tr>
        <tr bgcolor="#cccccc">
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font size="1">&nbsp;Leitor LCB / CMC7</font></td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font size="1">&nbsp;Adaptador/cabo telef&ocirc;nico</font></td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
        </tr>
        <tr bgcolor="#cccccc">
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font size="1">&nbsp;Cabo Comunic. RS-232C</font></td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&nbsp;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
        </tr>
        <tr>
            <td style="FONT-SIZE: 11px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="30%"><font size="1">&nbsp;Fonte de Alimenta&ccedil;&atilde;o</font></td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="11%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
            <td style="FONT-SIZE: 13px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif" width="12%">
            <div align="center"><font size="1">&bull;</font></div>
            </td>
        </tr>
    </tbody>
</table>
<p><font face="Verdana" size="1">Todos os modelos acima permitem a instala&ccedil;&atilde;o de um kit de expans&atilde;o de mem&oacute;ria adicional de 2MB para armazenamento de dados.<br /><br /></font><font face="Verdana" size="1"><strong>- Conhecendo o micro-terminal (Vista Frontal)<br /></strong><br /></font><font face="Verdana" size="1">O micro-terminal Bematech modelo SB-2030 E possui um display LCD composto por 2 linhas e 40 colunas, aonde iremos &quot;printar&quot; as mensagem de intera&ccedil;&atilde;o com o usu&aacute;rio/operador. Este display j&aacute; possui a fun&ccedil;&atilde;o de backligth, essencial para ambientes com pouca ilumina&ccedil;&atilde;o.<br /><br /></font><font face="Verdana" size="1">Seu teclado &eacute; composto por 43 teclas, distribu&iacute;das assim:<br /><br /></font><font face="Verdana" size="1">&bull; &nbsp;16 teclas relegend&aacute;veis com descri&ccedil;&atilde;o de produtos e formas de pagamento;<br />&bull; &nbsp;10 teclas relegend&aacute;veis de fun&ccedil;&otilde;es + &lt;Shift&gt; e &lt;Alt&gt;;<br />&bull; &nbsp;12 teclas num&eacute;ricas e;<br />&bull; &nbsp;03 teclas de controle.<br /><br /></font><font face="Verdana" size="1">Existe, tamb&eacute;m, um leitor de cart&atilde;o magn&eacute;tico (Slot Reader) que permite a leitura de informa&ccedil;&otilde;es gravadas em cart&otilde;es magn&eacute;ticos atrav&eacute;s de opera&ccedil;&atilde;o manual. Ele pode ser utilizado para controle de acesso, controle de ponto, em supermercados, com cart&otilde;es de fidelidade, cart&otilde;es de cr&eacute;dito e outras aplica&ccedil;&otilde;es.<br /><br /></font><font face="Verdana" size="1">Em espec&iacute;fico para o modelo SB-2090, existe um leitor de CMC-7 que permite a leitura de cheques e c&oacute;digo de barras, para envio &agrave; institui&ccedil;&otilde;es de cr&eacute;dito e captura de informa&ccedil;&otilde;es banc&aacute;rias. Aliado as conex&otilde;es de Internet, possibilita a verifica&ccedil;&atilde;o da situa&ccedil;&atilde;o banc&aacute;ria do documento (por exemplo).</font><font face="Verdana" size="1"><br /><br />
<p align="center"><img alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/sbB2000_vista_frontal.jpg" /><br /><br />figura 1 - vista frontal</p>
<p><font face="Verdana" size="1"><strong>- Conhecendo o micro-terminal (Vista Traseira)<br /></strong><br /></font><font face="Verdana" size="1">Na parte traseira, encontramos o conector ON/OFF, a entrada para interface LAN (conector RJ-45), a entrada para o Customer Display (conector RJ-45), as entradas de perif&eacute;ricos (conector serial RS-232) e a entrada do conector da fonte de alimenta&ccedil;&atilde;o.</font><font face="Verdana" size="1"><br /><br />
<p align="center"><img alt="" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/sb2000_vista_traseira.jpg" /><br />figura 2 - vista traseira</p>
<p><strong>- LAN<br /></strong><br /><font face="Verdana" size="1">Utiliza o protocolo TCP/IP (TCP, UDP, IP, ARP, DHCP, ICMP e MAC), permitindo o uso de v&aacute;rios micro-terminais interligados em uma rede para comunica&ccedil;&atilde;o com um servidor de retaguarda. Opera nos modos TCP Server, TCP Client ou no modo misto.<br /><br /></font><font face="Verdana" size="1"><strong>- Modem V22-Bis<br /><br /></strong></font><font face="Verdana" size="1">O modem V22-Bis &eacute; um produto de alta confiabilidade e desempenho, quando utilizado em conex&atilde;o remota ass&iacute;ncrona ou s&iacute;ncrona de baixa velocidade (1200/2400 bps). <br /><br /></font><font face="Verdana" size="1">Suas principais caracter&iacute;sticas s&atilde;o: </font></p>
</font></p>
</font></p>
<p><font face="Verdana" size="1">&bull;&nbsp; Interfaceamento realizado atrav&eacute;s do protocolo ATR2000 a 6 fios; <br />&bull; &nbsp;Opera&ccedil;&atilde;o no modo ass&iacute;ncrono ou s&iacute;ncrono 1200/2400 bps, 8 (oito) bits por caractere, Sem Paridade e 1 (um) Stop Bit; <br />&bull; &nbsp;Conex&atilde;o nos padr&otilde;es V22 (1200 bps) e V22-Bis (2400 bps), conforme descri&ccedil;&atilde;o nas recomenda&ccedil;&otilde;es V22 e V22-Bis da CCITT para modems; <br />&bull; &nbsp;Opera&ccedil;&atilde;o nos modos V22 e V22-Bis, ANSWER ou ORIGINATE e; <br />&bull; &nbsp;Subconjunto dos Comandos AT. <br /><br /></font><font face="Verdana" size="1">Al&eacute;m dos comandos ATs, o modem V22-Bis implementa um conjunto de comandos, denominados COMANDOS DLE, que permitem ao sistema executar diretamente v&aacute;rias fun&ccedil;&otilde;es importantes para o gerenciamento da comunica&ccedil;&atilde;o.A conex&atilde;o &eacute; feita atrav&eacute;s do conector RJ-12.<br /><br />Na pr&oacute;xima edi&ccedil;&atilde;o do Flash Tip, iremos:<br /><br /></font><font face="Verdana" size="1">- Conhecer a BIOS, o BOOT e os segmentos de mem&oacute;ria, onde nossa aplica&ccedil;&atilde;o ser&aacute; armazenada;<br />- O SDK - kit de desenvolvimento e seu conjunto de fun&ccedil;&otilde;es e;<br />- O Visual SDK Builder que &eacute; o nosso ambiente de desenvolvimento, onde criaremos toda nossa aplica&ccedil;&atilde;o. <br /><br /></font><font face="Verdana" size="1"><strong>N&atilde;o perca!<br /></strong><br /></font><font face="Verdana" size="1">At&eacute; l&aacute; e boas implementa&ccedil;&otilde;es!</font></p>]]>
    </content>
</entry>
<entry>
    <title>Programando o horário de verão</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2006/11/programando_o_horario_de_verao.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=92" title="Programando o horário de verão" />
    <id>tag:partners.bematech.com.br,2006:/flashtip//2.92</id>
    
    <published>2006-11-06T13:22:03Z</published>
    <updated>2006-11-06T13:28:35Z</updated>
    
    <summary><![CDATA[Com a chegada do hor&aacute;rio de ver&atilde;o, as impressoras fiscais devem ser adiantadas em uma hora.Seguem aqui as formas de programar a entrada no hor&aacute;rio de ver&atilde;o, para as impressoras fiscais Bematech:- Se vc estiver usando a BemaFI32.dllExecute a fun&ccedil;&atilde;o...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Dicas" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<font face="Verdana" size="1">Com a chegada do hor&aacute;rio de ver&atilde;o, as impressoras fiscais devem ser adiantadas em uma hora.<br /><br />Seguem aqui as formas de programar a entrada no hor&aacute;rio de ver&atilde;o, para as impressoras fiscais Bematech:<br /><br />- Se vc estiver usando a BemaFI32.dll<br /><br />Execute a fun&ccedil;&atilde;o Bematech_FI_ProgramaHorarioVerao, exemplo:<br /><br /><font face="Courier New" color="#0000ff">iRetorno = Bematech_FI_ProgramaHorarioVerao()</font><br /><br />- Se vc estiver usando o Bematech MONITOR remotamente<br /><br />Da mesma forma que a BemaFI32.dll, basta utilizar a fun&ccedil;&atilde;o Bematech_FI_ProgramaHorarioVerao().<br /><br />- Se vc estiver usando o Bematech MONITOR via aplica&ccedil;&atilde;o DOS<br /><br />Crie o arquivo BemaFI32.cmd com o comando &quot;066|&quot; no diret&oacute;rio onde o Bematech MONITOR est&aacute; monitorando.<br /><br />- Se vc estiver usando o execut&aacute;vel DOS Bemafi.exe<br /><br />Crie o arquivo Bemafi.cmd com o comando abaixo e execute o Bemafi.exe.<br /><br /><font face="Courier New" color="#0000ff">chr( 27 ) + chr( 251 ) + &quot;18|&quot; + chr( 27 )<br /></font><br />- Se vc estiver usando Protocolo Direto com a impressora<br /><br />Envie o comando 18 (decimal) ou 12 (hexadecimal).<br /><br />- Se vc estiver usando o Shared Object LibBemaFiscal.so<br /><br />Execute a fun&ccedil;&atilde;o Bematech_FI_ProgramaHorarioVerao, igual a dll:<br /><br /><font face="Courier New" color="#0000ff">iRetorno = Bematech_FI_ProgramaHorarioVerao()<br /></font><br />- Se vc estiver usando o execut&aacute;vel Linux BemaFisc.ocx<br /><br />Crie o arquivo BemaFisc.cmd com o comando abaixo e execute o BemaFisc.ocx.<br /><br /><font face="Courier New" color="#0000ff">chr( 27 ) + &quot;|18|&quot; + chr( 27 )<br /></font><br />- Se vc estiver usando a lib Lib300FI<br /><br />Execute a fun&ccedil;&atilde;o Bematech_FI_ProgramaHorarioVerao, exemplo:<br /><br /><font face="Courier New" color="#0000ff">iRetorno = Bematech_FI_ProgramaHorarioVerao(&amp;Retorno)<br /></font><br />Importante: Esta programa&ccedil;&atilde;o deve ser executada antes de qualquer movimento na impressora ou logo ap&oacute;s a Redu&ccedil;&atilde;o Z. Para desprogramar o hor&aacute;rio de ver&atilde;o, o comando deve ser enviado, no m&iacute;nimo, 1 hora ap&oacute;s a Redu&ccedil;&atilde;o Z.</font>]]>
        
    </content>
</entry>
<entry>
    <title>Material apresentado na 5ª rodada do Bematech Developer´s Day</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2006/10/material_apresentado_na_5_roda.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=88" title="Material apresentado na 5ª rodada do Bematech Developer´s Day" />
    <id>tag:partners.bematech.com.br,2006:/flashtip//2.88</id>
    
    <published>2006-10-04T19:27:26Z</published>
    <updated>2006-10-05T13:41:25Z</updated>
    
    <summary><![CDATA[- Apresentando o Bematech Flash BuilderClique&nbsp;aqui e baixe a apresenta&ccedil;&atilde;o em Power Point da ferramenta de integra&ccedil;&atilde;o .NET Bematech Flash Builder.- Apresentando o micro-terminal program&aacute;vel SB-2030 E (Ethernet)Clique&nbsp;aqui e baixe a apresenta&ccedil;&atilde;o em Power Point do micro-terminal program&aacute;vel SB-2030 E...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<p><font face="Verdana" size="1">- Apresentando o Bematech Flash Builder<br /><br />Clique&nbsp;<a href="http://partners.bematech.com.br/flashtip/Dev2006/FlashBuilder.zip">aqui</a> e baixe a apresenta&ccedil;&atilde;o em Power Point da ferramenta de integra&ccedil;&atilde;o .NET Bematech Flash Builder.<br /><br />- Apresentando o micro-terminal program&aacute;vel SB-2030 E (Ethernet)<br /><br />Clique&nbsp;<a href="http://partners.bematech.com.br/flashtip/Dev2006/SB2030E.zip">aqui</a> e baixe a apresenta&ccedil;&atilde;o em Power Point do micro-terminal program&aacute;vel SB-2030 E de acesso &agrave; rede LAN.<br /></font><font face="Verdana" size="1"><br />- Apresentando o micro-terminal SB-3010<br /><br />Clique&nbsp;<a href="http://partners.bematech.com.br/flashtip/Dev2006/SB3010.zip">aqui</a> e baixe a apresenta&ccedil;&atilde;o em Power Point do micro-terminal&nbsp;SB-3010.</font></p>]]>
        
    </content>
</entry>
<entry>
    <title>Bematech Flash Builder - Trabalhando com a classe de Relatórios Fiscais</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2006/07/bematech_flash_builder_trabalh.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=71" title="Bematech Flash Builder - Trabalhando com a classe de Relatórios Fiscais" />
    <id>tag:partners.bematech.com.br,2006:/flashtip//2.71</id>
    
    <published>2006-07-05T18:11:23Z</published>
    <updated>2006-07-05T19:10:08Z</updated>
    
    <summary><![CDATA[Caro parceiro,Dando continuidade ao nosso desenvolvimento, usando a ferramenta de integra&ccedil;&atilde;o Bematech Flash Builder, nesta edi&ccedil;&atilde;o estaremos conhecendo a classe de relat&oacute;rios fiscais.Estaremos realizando opera&ccedil;&otilde;es b&aacute;sicas, mas necess&aacute;rias em uma aplica&ccedil;&atilde;o de automa&ccedil;&atilde;o comercial. S&atilde;o elas:...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<font face="Verdana" size="1">Caro parceiro,<br /><br />Dando continuidade ao nosso desenvolvimento, usando a ferramenta de integra&ccedil;&atilde;o Bematech Flash Builder, nesta edi&ccedil;&atilde;o estaremos conhecendo a classe de relat&oacute;rios fiscais.<br /><br />Estaremos realizando opera&ccedil;&otilde;es b&aacute;sicas, mas necess&aacute;rias em uma aplica&ccedil;&atilde;o de automa&ccedil;&atilde;o comercial. S&atilde;o elas:<br /></font>]]>
        <![CDATA[<p><font face="Verdana" size="1">- Emiss&atilde;o de Leitura X;<br />- Emiss&atilde;o de Redu&ccedil;&atilde;o Z;<br />- Emiss&atilde;o de Leitura da Mem&oacute;ria Fiscal por Data e por Redu&ccedil;&atilde;o;<br />- Recebendo Leitura X;<br />- Recebendo Leitura da Mem&oacute;ria Fiscal por Data e por Redu&ccedil;&atilde;o;<br /><br /></font><font face="Verdana" size="1">Iremos criar um bot&atilde;o para cada opera&ccedil;&atilde;o citada acima e um TextBox de nome &quot;txtInfor&quot;, de propriedades Multiline igual a True e ScrollBars igual a Vertical, para visualizarmos as informa&ccedil;&otilde;es de retorno quando usado as opera&ccedil;&otilde;es de recebimento de Leitura X e de Leitura da Mem&oacute;ria Fiscal.<br /><br /></font><font face="Verdana" size="1">N&atilde;o esque&ccedil;a que o namespace &quot;Bematech.Fiscal.ECF.RelatoriosFiscais&quot; deve ser adicionado ao inicio do projeto.<br /><br /></font><font face="Verdana" size="1"><strong>- em C#<br /></strong><br /></font><font face="Verdana"><font color="#000080"><strong><font face="Courier New" size="1">// Bot&atilde;o Leitura X</font></strong><br /></font><font color="#000080"><font face="Courier New" size="1">private void cmdLeituraX_Click(object sender, System.EventArgs e)<br />{<br />&nbsp;&nbsp;&nbsp;try<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para a impress&atilde;o da Leitura X.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.RelatoriosFiscais.ImprimirLeituraX();<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro )<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message );<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></font></font><strong><font face="Courier New"><font size="1"><font color="#000080"><strong>// Bot&atilde;o Redu&ccedil;&atilde;o Z</strong><br /></font></font></font></strong><font color="#000080"><font face="Courier New" size="1">private void cmdReducaoZ_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;&nbsp;try <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para a impress&atilde;o da Redu&ccedil;&atilde;o Z. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.RelatoriosFiscais.ImprimirReducaoZ(); <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;&nbsp;} <br />}<br /><br /></font></font><strong><font face="Courier New"><font size="1"><font color="#000080"><strong>// Bot&atilde;o Impress&atilde;o da Leitura da Mem&oacute;ria Fiscal por Data </strong><br /></font></font></font></strong><font face="Courier New" color="#000080" size="1">private void cmdLeituraMFData_Click(object sender, System.EventArgs e)<br />{<br />&nbsp;&nbsp;&nbsp;try<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para a impress&atilde;o da Leitura da Mem&oacute;ria Fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.RelatoriosFiscais.ImprimirLeituraMemoriaFiscal( new DateTime( 2006, 6, 1 ), new DateTime( 2006, 6, 15 ), true );<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message );<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></font><strong><font face="Courier New"><font size="1"><font color="#000080"><strong>// Bot&atilde;o Impress&atilde;o da Leitura da Mem&oacute;ria Fiscal por Redu&ccedil;&atilde;o </strong><br /></font></font></font></strong><font face="Courier New" color="#000080" size="1">private void cmdLeituraMFReducao_Click(object sender, System.EventArgs e)<br />{<br />&nbsp;&nbsp;&nbsp;try<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para a impress&atilde;o da Leitura da Mem&oacute;ria Fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.RelatoriosFiscais.ImprimirLeituraMemoriaFiscal( 1, 10, true );<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;&nbsp;} <br />}<br /><br /></font><strong><font face="Courier New"><font size="1"><font color="#000080"><strong>// Bot&atilde;o Recebe Leitura X </strong><br /></font></font></font></strong><font face="Courier New" color="#000080" size="1">private void cmdRecebeLeituraX_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;&nbsp;try <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para receber a Leitura X <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInfor.Text = BematechFiscal.RelatoriosFiscais.ReceberLeituraX(); <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;&nbsp;} <br />}<br /><br /></font><strong><font face="Courier New"><font size="1"><font color="#000080"><strong>// Bot&atilde;o Recebe Leitura da Mem&oacute;ria Fiscal por Data</strong> <br /></font></font></font></strong><font face="Courier New" color="#000080" size="1">private void cmdRecebeMFData_Click(object sender, System.EventArgs e)<br />{ <br />&nbsp;&nbsp;&nbsp;try <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para receber a Leitura da Mem&oacute;ria Fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInfor.Text = BematechFiscal.RelatoriosFiscais.ReceberLeituraMemoriaFiscal( new DateTime( 2006, 6, 1 ), new DateTime( 2006, 6, 15 ), true ); <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;&nbsp;} <br />}<br /><br /></font><strong><font face="Courier New"><font size="1"><font color="#000080"><strong>// Bot&atilde;o Recebe Leitura da Mem&oacute;ria Fiscal por Reducao</strong> <br /></font></font></font></strong><font size="1"><font color="#000080"><font face="Courier New">private void cmdRecebeMFReducao_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;&nbsp;try <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para receber a Leitura da Mem&oacute;ria Fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInfor.Text = BematechFiscal.RelatoriosFiscais.ReceberLeituraMemoriaFiscal( 1, 10, true ); <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;&nbsp;} <br />}</font><br /><br /></font></font><font size="1"><strong>- em VB .NET<br /></strong><br /><strong><font face="Courier New" color="#000080">' Bot&atilde;o Leitura X</font></strong></font><br /><font color="#000080"><font face="Courier New" size="1">Private Sub cmdLeituraX_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLeituraX.Click<br />&nbsp;&nbsp;&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para a impress&atilde;o da Leitura X.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.RelatoriosFiscais.ImprimirLeituraX()<br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&quot;Mensagem Erro: &quot; + MensagemErro.Message)<br />&nbsp;&nbsp;&nbsp;End Try<br />&nbsp;&nbsp;&nbsp; End Sub<br /><br /></font></font><strong><font face="Courier New"><font size="1"><font color="#000080"><strong>' Bot&atilde;o Redu&ccedil;&atilde;o Z</strong><br /></font></font></font></strong><font color="#000080"><font face="Courier New" size="1">Private Sub cmdReducaoZ_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdReducaoZ.Click<br />&nbsp;&nbsp; Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' M&eacute;todo para a impress&atilde;o da Redu&ccedil;&atilde;o Z.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.RelatoriosFiscais.ImprimirReducaoZ()<br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message)<br />&nbsp;&nbsp;&nbsp;End Try<br />End Sub<br /><br /></font></font><strong><font face="Courier New"><font size="1"><font color="#000080"><strong>' Bot&atilde;o Impress&atilde;o da Leitura da Mem&oacute;ria Fiscal por Data </strong><br /></font></font></font></strong><font face="Courier New" color="#000080" size="1">Private Sub cmdLeituraMFData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLeituraMFData.Click<br />&nbsp;&nbsp; Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' M&eacute;todo para a impress&atilde;o da Leitura da Mem&oacute;ria Fiscal.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.RelatoriosFiscais.ImprimirLeituraMemoriaFiscal(New DateTime(2006, 6, 1), New DateTime(2006, 6, 15), True)<br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message)<br />&nbsp;&nbsp;&nbsp;End Try<br />End Sub<br /><br /></font><strong><font face="Courier New"><font size="1"><font color="#000080"><strong>' Bot&atilde;o Impress&atilde;o da Leitura da Mem&oacute;ria Fiscal por Redu&ccedil;&atilde;o </strong><br /></font></font></font></strong><font face="Courier New" color="#000080" size="1">Private Sub cmdLeituraMFReducao_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLeituraMFReducao.Click<br />&nbsp;&nbsp; Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' M&eacute;todo para a impress&atilde;o da Leitura da Mem&oacute;ria Fiscal.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.RelatoriosFiscais.ImprimirLeituraMemoriaFiscal(1, 10, True)<br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message)<br />&nbsp;&nbsp;&nbsp;End Try<br />End Sub<br /><br /></font><strong><font face="Courier New"><font size="1"><font color="#000080"><strong>' Bot&atilde;o Recebe Leitura X </strong><br /></font></font></font></strong><font face="Courier New" color="#000080" size="1">Private Sub cmdRecebeLeituraX_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRecebeLeituraX.Click<br />&nbsp;&nbsp; Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' M&eacute;todo que recebe a Leitura X<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim DadosLeituraX As String = BematechFiscal.RelatoriosFiscais.ReceberLeituraX()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtProduto.Text = DadosLeituraX<br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&quot;Mensagem Erro: &quot; + MensagemErro.Message)<br />&nbsp;&nbsp;&nbsp;End Try<br />End Sub<br /><br /></font><strong><font face="Courier New"><font size="1"><font color="#000080"><strong>' Bot&atilde;o Recebe Leitura da Mem&oacute;ria Fiscal por Data</strong>&nbsp;<br /></font></font></font></strong><font face="Courier New" color="#000080" size="1">Private Sub cmdRecebeMFData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRecebeMFData.Click<br />&nbsp;&nbsp; Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' M&eacute;todo para receber a Leitura da Mem&oacute;ria Fiscal.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInfor.Text = BematechFiscal.RelatoriosFiscais.ReceberLeituraMemoriaFiscal(New DateTime(2006, 6, 1), New DateTime(2006, 6, 15), True)<br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message)<br />&nbsp;&nbsp;&nbsp;End Try<br />End Sub<br /></font><strong><font color="#000080"><font face="Courier New"><font size="1"><strong><br />' Bot&atilde;o Recebe Leitura da Mem&oacute;ria Fiscal por Reducao</strong>&nbsp;<br /></font></font></font></strong><font size="1"><font color="#000080"><font face="Courier New"> Private Sub cmdRecebeMFReducao_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRecebeMFReducao.Click<br />&nbsp;&nbsp; Try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' M&eacute;todo para receber a Leitura da Mem&oacute;ria Fiscal.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInfor.Text = BematechFiscal.RelatoriosFiscais.ReceberLeituraMemoriaFiscal(1, 10, True)<br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message)<br />&nbsp;&nbsp;&nbsp;End Try<br />End Sub</font><br /></font><br />Na pr&oacute;xima edi&ccedil;&atilde;o do Flash Tip, estaremos trabalhando com os registros do Sintegra, pertinentes &agrave; automa&ccedil;&atilde;o.<br /><br /><strong><span class="txttitulo">N&atilde;o perca!</span></strong><br /><br />At&eacute; l&aacute; e boas implementa&ccedil;&otilde;es!</font></font></p>]]>
    </content>
</entry>
<entry>
    <title>Bematech Flash Builder - Retornando Informações da Impressora</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2006/03/bematech_flash_builder_retorna.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=51" title="Bematech Flash Builder - Retornando Informações da Impressora" />
    <id>tag:partners.bematech.com.br,2006:/flashtip//2.51</id>
    
    <published>2006-03-24T19:11:45Z</published>
    <updated>2006-03-24T19:27:47Z</updated>
    
    <summary><![CDATA[Caro parceiro,Conforme mencionamos na edi&ccedil;&atilde;o anterior, nesta edi&ccedil;&atilde;o estaremos lendo da impressora fiscal algumas informa&ccedil;&otilde;es importantes, pertinentes &agrave; automa&ccedil;&atilde;o.Informa&ccedil;&otilde;es como:- Al&iacute;quotas (ICMS ou ISS, valor percentual e valor acumulado);- Dados da &uacute;ltima redu&ccedil;&atilde;o Z (acr&eacute;scimos, descontos, cancelamentos, sangria, suprimento, totalizadores...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Mini Cursos" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<p><font face="Verdana"><font size="1">Caro parceiro,<br /><br />Conforme mencionamos na edi&ccedil;&atilde;o anterior, nesta edi&ccedil;&atilde;o estaremos lendo da impressora fiscal algumas informa&ccedil;&otilde;es importantes, pertinentes &agrave; automa&ccedil;&atilde;o.<br /><br />Informa&ccedil;&otilde;es como:<br /><br />- Al&iacute;quotas (ICMS ou ISS, valor percentual e valor acumulado);<br />- Dados da &uacute;ltima redu&ccedil;&atilde;o Z (acr&eacute;scimos, descontos, cancelamentos, sangria, suprimento, totalizadores de cupons, grande total e venda bruta);<br />- Formas de pagamento (&iacute;ndice, descri&ccedil;&atilde;o e valor acumulado);<br />- N&uacute;mero de S&eacute;rie;<br />- N&uacute;mero do Caixa e;<br />- N&uacute;mero da Loja.<br /></font></font></p>]]>
        <![CDATA[<font face="Verdana"><font size="1">S&atilde;o apenas algumas informa&ccedil;&otilde;es que iremos trabalhar nesta edi&ccedil;&atilde;o, dando o in&iacute;cio para que as demais possam ser acessadas e implementadas conforme sua necessidade.<br /><br />Iremos criar um bot&atilde;o para cada informa&ccedil;&atilde;o citada e os dados ser&atilde;o mostrados em um <em>TextBox</em> de nome &quot;txtInformacoes&quot;, <em>MaxLength</em> igual a <em>True</em> e <em>ScrollBars</em> igual a <em>Vertical</em>.<br /><br />N&atilde;o esque&ccedil;a que o retorno das informa&ccedil;&otilde;es est&atilde;o no namespace <em>&quot;Bematech.Fiscal.ECF.Informacoes&quot;</em>.<br /><br /></font><font size="1"><strong>&bull;</strong></font><em><font size="1"><strong> em C#<br /><br /></strong></font></em><font color="#000099"><font face="Courier New"><font size="1"><strong>// Bot&atilde;o Al&iacute;quotas</strong> <br />private void cmdAliquotas_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;&nbsp;try <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text = &quot;Indice | Aliquota | Tipo | Acumulado\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;------------------------------------\r\n&quot;; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Classe que encapsula a cole&ccedil;&atilde;o de aliquotas cadastrada na impressora. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach ( Aliquota MinhasAliquotas in BematechFiscal.Informacao.Aliquotas ) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += MinhasAliquotas.Indice.ToString() + &quot; &quot; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinhasAliquotas.Valor.ToString( &quot;C&quot; ) + &quot; &quot; + <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinhasAliquotas.Tipo + &quot; &quot; + <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinhasAliquotas.ValorAcumulado.ToString( &quot;C&quot; ) + &quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;&nbsp;} <br />}<br /><br /><strong>// Bot&atilde;o Dados Redu&ccedil;&atilde;o Z <br /></strong>private void cmdDadosUltimaReducaoZ_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;&nbsp;try <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text = &quot;Total de Acr&eacute;scimos.........: &quot; +&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.AcrescimoTotal.ToString( &quot;C&quot; ) +&nbsp;&quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Total de Descontos..........: &quot; + BematechFiscal.Informacao.DadosUltimaReducao.DescontoTotal.ToString( &quot;C&quot; ) +&nbsp;&quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Total de Cancelamentos......: &quot; + BematechFiscal.Informacao.DadosUltimaReducao.CancelamentoTotal.ToString( &quot;C&quot; ) +&nbsp;&quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Sangria.....................: &quot; + BematechFiscal.Informacao.DadosUltimaReducao.Sangria.ToString( &quot;C&quot; ) + &quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Suprimento..................: &quot; + BematechFiscal.Informacao.DadosUltimaReducao.Suprimento.ToString( &quot;C&quot; ) + &quot;\r\n&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Cupons Emitidos.............: &quot; + BematechFiscal.Informacao.DadosUltimaReducao.NumeroCuponsEmitidos.ToString() + &quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Cupons Cancelados...........: &quot; + BematechFiscal.Informacao.DadosUltimaReducao.NumeroCuponsCancelados.ToString() +&nbsp;&quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;N&uacute;mero de Redu&ccedil;&otilde;es Z........: &quot; + BematechFiscal.Informacao.DadosUltimaReducao.NumeroReducoes.ToString() + &quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Total de Isen&ccedil;&atilde;o (II).......: &quot; + BematechFiscal.Informacao.DadosUltimaReducao.IsencaoTotal.ToString( &quot;C&quot; ) + &quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Total de N&atilde;o Incid&ecirc;ncia (NN): &quot; + BematechFiscal.Informacao.DadosUltimaReducao.NaoIncidenciaTotal.ToString( &quot;C&quot; ) +&nbsp;&quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Total de Substitui&ccedil;&atilde;o (FF)..: &quot; + BematechFiscal.Informacao.DadosUltimaReducao.SubstituicaoTotal.ToString( &quot;C&quot; ) +&nbsp;&quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Grande Total................: &quot; + BematechFiscal.Informacao.DadosUltimaReducao.GrandeTotal.ToString( &quot;C&quot; ) + &quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Venda Bruta.................: &quot; + BematechFiscal.Informacao.DadosUltimaReducao.VendaBruta.ToString( &quot;C&quot; ) + &quot;\r\n&quot;;<br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;&nbsp;} <br />}<br /><br /><strong>// Bot&atilde;o Formas de Pagamento <br /></strong>private void cmdFormasPagamento_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;&nbsp;txtInformacoes.Text = &quot;Indice | Descri&ccedil;&atilde;o | Valor Acumulado\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;------------------------------------\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;try <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Classe que encapsula a cole&ccedil;&atilde;o de formas de pagamento cadastrada <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// na impressora. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach( FormaPagamento MinhasFormas in&nbsp;<font face="Courier New, Courier, mono" color="#000099">BematechFiscal.Informacao.FormasPagamento ) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += MinhasFormas.Indice.ToString() + &quot; &quot; + <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinhasFormas.Descricao + <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinhasFormas.ValorAcumulado.ToString( &quot;C&quot; ) + &quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;&nbsp;} <br />}<br /><br /><strong>// Bot&atilde;o N&uacute;mero de S&eacute;rie <br /></strong>private void cmdNumeroSerie_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;&nbsp;try <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Propriedade que retorna o n&uacute;mero de s&eacute;rie da impressora. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text = BematechFiscal.Informacao.NumeroSerie; <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;&nbsp;} <br />} <br /><br /><strong>// Bot&atilde;o N&uacute;mero do Caixa (ECF) <br /></strong>private void cmdNumeroCaixa_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;&nbsp;try <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Propriedade que retorna o n&uacute;mero do caixa (ECF). <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text = BematechFiscal.Informacao.NumeroCaixa.ToString(); <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;&nbsp;} <br />} <br /><br /><strong>// Bot&atilde;o N&uacute;mero da Loja</strong> <br />private void cmdNumeroLoja_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;&nbsp;try <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Propriedade que retorna o n&uacute;mero da loja. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text = BematechFiscal.Informacao.NumeroLoja.ToString(); <br />&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;&nbsp;} <br />}<br /><br /><font color="#000000"><font face="Verdana"><strong>&bull;</strong></font><em><strong><font face="Verdana"> em VB.NET<br /></font><br /></strong></em>
<p><font face="Courier New, Courier, mono" color="#000099"><strong>' Bot&atilde;o Al&iacute;quotas <br />Private Sub cmdAliquotas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAliquotas.Click <br />&nbsp;&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text = &quot;Indice | Aliquota | Tipo | Acumulado&quot; + vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;------------------------------------&quot; + vbCrLf <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Classe que encapsula a cole&ccedil;&atilde;o de aliquotas cadastrada na impressora. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For Each MinhasAliquotas As Aliquota In BematechFiscal.Informacao.Aliquotas <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += MinhasAliquotas.Indice.ToString() + &quot; &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinhasAliquotas.Valor.ToString(&quot;C&quot;) + &quot; &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinhasAliquotas.Tipo.ToString() + &quot; &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinhasAliquotas.ValorAcumulado.ToString(&quot;C&quot;) + vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next <br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;&nbsp;End Try <br />End Sub<br /><br />' Bot&atilde;o Dados Redu&ccedil;&atilde;o Z <br />Private Sub cmdDadosUltimaReducaoZ_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDadosUltimaReducaoZ.Click <br />&nbsp;&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text = &quot;Total de Acr&eacute;scimos.........: &quot; + _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BematechFiscal.Informacao.DadosUltimaReducao.AcrescimoTotal.ToString(&quot;C&quot;) _<br />+ vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Total de Descontos..........: &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.DescontoTotal.ToString(&quot;C&quot;) _<br />+ vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Total de Cancelamentos......: &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.CancelamentoTotal.ToString(&quot;C&quot;) _<br />+ vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Sangria.....................: &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.Sangria.ToString(&quot;C&quot;) <br />+ vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Suprimento..................: &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.Suprimento.ToString(&quot;C&quot;) <br />+ vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Cupons Emitidos.............: &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.NumeroCuponsEmitidos.ToString() <br />+ vbCrLf <br />&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Cupons Cancelados...........: &quot; + _ <br />&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.NumeroCuponsCancelados.ToString() _<br />+ vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;N&uacute;mero de Redu&ccedil;&otilde;es Z........: &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.NumeroReducoes.ToString() _<br />+ vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Total de Isen&ccedil;&atilde;o (II).......: &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.IsencaoTotal.ToString(&quot;C&quot;) _<br />+ vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Total de N&atilde;o Incid&ecirc;ncia (NN): &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.NaoIncidenciaTotal.ToString(&quot;C&quot;) _<br />+ vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Total de Substitui&ccedil;&atilde;o (FF)..: &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.SubstituicaoTotal.ToString(&quot;C&quot;) _<br />+ vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Grande Total................: &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.GrandeTotal.ToString(&quot;C&quot;) + _<br />vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;Venda Bruta.................: &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.DadosUltimaReducao.VendaBruta.ToString(&quot;C&quot;) + _<br />vbCrLf <br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;&nbsp;End Try <br />End Sub<br /><br />' Bot&atilde;o Formas de Pagamento <br />Private Sub cmdFormasPagamento_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFormasPagamento.Click <br />&nbsp;&nbsp;&nbsp;txtInformacoes.Text = &quot;Indice | Descri&ccedil;&atilde;o | Valor Acumulado&quot; + vbCrLf <br />&nbsp;&nbsp;&nbsp;txtInformacoes.Text += &quot;------------------------------------&quot; + vbCrLf <br />&nbsp;&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Classe que encapsula a cole&ccedil;&atilde;o de formas de pagamento <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' cadastrada na impressora. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For Each MinhasFormas As FormaPagamento In _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Informacao.FormasPagamento <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text += MinhasFormas.Indice.ToString() + &quot; &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinhasFormas.Descricao + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MinhasFormas.ValorAcumulado.ToString(&quot;C&quot;) + vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next <br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;&nbsp;End Try <br />End Sub<br /><br />' Bot&atilde;o N&uacute;mero de S&eacute;rie <br />Private Sub cmdNumeroSerie_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNumeroSerie.Click <br />&nbsp;&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Propriedade que retorna o n&uacute;mero de s&eacute;rie da impressora. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text = BematechFiscal.Informacao.NumeroSerie <br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;&nbsp;End Try <br />End Sub <br /><br />' Bot&atilde;o N&uacute;mero do Caixa (ECF) <br />Private Sub cmdNumeroCaixa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNumeroCaixa.Click <br />&nbsp;&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Propriedade que retorna o n&uacute;mero do caixa (ECF). <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text = BematechFiscal.Informacao.NumeroCaixa.ToString() <br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;&nbsp;End Try <br />End Sub <br /><br />' Bot&atilde;o N&uacute;mero da Loja <br />Private Sub cmdNumeroLoja_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNumeroLoja.Click <br />&nbsp;&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Propriedade que retorna o n&uacute;mero da loja. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtInformacoes.Text = BematechFiscal.Informacao.NumeroLoja.ToString() <br />&nbsp;&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;&nbsp;End Try <br />End Sub<br /></strong><br /><font face="Verdana" color="#000000">Repare como &eacute; simples obter informa&ccedil;&otilde;es da impressora, principalmente quando voc&ecirc; precisa ler mais do que uma informa&ccedil;&atilde;o, para compor um determinado relat&oacute;rio ou para auditoria em seu aplicativo (por exemplo).<br /><br />Atrav&eacute;s do Bematech Flash Builder, as informa&ccedil;&otilde;es s&atilde;o disponibilizadas em forma de propriedades, ou seja, voc&ecirc; pode escolher que tipo de informa&ccedil;&atilde;o deseja, sem a necessidade de &quot;ca&ccedil;&aacute;-la&quot; internamente na impressora ou em uma string qualquer, facilitando e agilizando o processo.<br /><br />Um exemplo t&iacute;pico que demonstra esta utiliza&ccedil;&atilde;o &eacute; o bot&atilde;o <em>Dados Redu&ccedil;&atilde;o Z</em>, onde usamos v&aacute;rias propriedades separadamente, sem precisar &quot;cortar&quot; nenhuma informa&ccedil;&atilde;o (necess&aacute;rio quando as informa&ccedil;&otilde;es s&atilde;o retornandas em forma de uma string).<br /><br />Na pr&oacute;xima edi&ccedil;&atilde;o estaremos trabalhando com a classe de Relat&oacute;rios Fiscais.</font></font></p>
</font></font></font></font></font></font>]]>
    </content>
</entry>
<entry>
    <title>Bematech Flash Builder - Operações não fiscais</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2006/03/bematech_flash_builder_operaco.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=48" title="Bematech Flash Builder - Operações não fiscais" />
    <id>tag:partners.bematech.com.br,2006:/flashtip//2.48</id>
    
    <published>2006-03-02T16:56:21Z</published>
    <updated>2006-03-02T17:27:51Z</updated>
    
    <summary><![CDATA[Vinculando um Cupom N&atilde;o Fiscal, Efetuando Recebimentos e Imprimindo Relat&oacute;riosCaro parceiro,Na edi&ccedil;&atilde;o passada, criamos o nosso primeiro cupom fiscal. Abrimos, vendemos itens, fechamos e obtivemos o n&uacute;mero do cupom, al&eacute;m de testar o seu status e recuperar os itens vendidos...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Mini Cursos" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<font face="Verdana"><font size="1"><strong>Vinculando um Cupom N&atilde;o Fiscal, Efetuando Recebimentos e Imprimindo Relat&oacute;rios<br /><br /></strong></font></font><font face="Verdana" size="1">Caro parceiro,<br /><br />Na edi&ccedil;&atilde;o passada, criamos o nosso primeiro cupom fiscal. Abrimos, vendemos itens, fechamos e obtivemos o n&uacute;mero do cupom, al&eacute;m de testar o seu status e recuperar os itens vendidos atrav&eacute;s do processo de serializa&ccedil;&atilde;o.<br /><br />Nesta edi&ccedil;&atilde;o, iremos utilizar alguns m&eacute;todos n&atilde;o fiscais, como: impress&otilde;es de cupons vinculados, de recebimento (m&uacute;ltiplos recebimentos), realizar a impress&atilde;o de relat&oacute;rios gerenciais e verificar seus <em>status</em>.<br /><br />Estaremos visualizando todas as rotinas em C# e Visual Basic .NET.<br /><br /></font>]]>
        <![CDATA[<font face="Verdana"><font size="1"><strong><font color="#3333ff">Criando o Cupom N&atilde;o Fiscal Vinculado</font></strong> <br /><br />Aproveitando o <em>form</em> principal, vamos criar mais alguns bot&otilde;es para abrir um cupom vinculado, imprimir um texto qualquer e fechar; efetuar recebimentos e emitir um relat&oacute;rio gerencial. Al&eacute;m disso, iremos testar o <em>status</em> de cupom vinculado, recebimento e relat&oacute;rio gerencial abertos.<br /><br />N&atilde;o esque&ccedil;a que o <em>namespace</em> para as opera&ccedil;&otilde;es n&atilde;o fiscais &eacute; <em>Bematech.Fiscal.ECF.OperacoesNaoFiscais</em>.<br /><br />Lembre-se que para a impress&atilde;o do cupom n&atilde;o fiscal vinculado, temos que primeiro emitir um cupom fiscal. Para isso, vamos manter a cria&ccedil;&atilde;o do cupom fiscal feita na edi&ccedil;&atilde;o anterior, usando no pagamento a forma &quot;A prazo&quot; e, posteriormente, no cupom n&atilde;o fiscal vinculado.<br /><br />Abaixo, permanece o c&oacute;digo do bot&atilde;o <em>cmdFechaCupom</em> com a forma de pagamento &quot;A prazo&quot; e a seq&uuml;&ecirc;ncia de cria&ccedil;&atilde;o do cupom n&atilde;o fiscal vinculado.<br /><br />N&atilde;o precisamos nos preocupar se a forma &quot;A prazo&quot; est&aacute; cadastrada na impressora, o pr&oacute;prio m&eacute;todo se encarrega de verificar e cadastrar, caso ela n&atilde;o exista.<br /><br /></font><strong><font size="1">&bull;</font><em><font size="1"> em C#<br /><br /></font></em></strong><font color="#000099"><font face="Courier New"><font size="1"><strong>.<br />.<br />. <br /><br />// Bot&atilde;o Fecha Cupom<br /></strong>private void cmdFechaCupom_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;try <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para o fechamento do cupom passando como par&acirc;metro a forma de<br />&nbsp;&nbsp;&nbsp;&nbsp;// pagamento e a mensagem promocional.<br />&nbsp;&nbsp;&nbsp;&nbsp;<strong>BematechFiscal.Cupom.Fechar( &quot;A prazo&quot;, &quot;Obrigado, volte sempre!&quot; );</strong> <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;} <br />}<br /><br /><strong>// Bot&atilde;o Abre Cupom N&atilde;o Fiscal Vinculado</strong> <br />private void cmdAbreVinculado_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;try <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo que verifica se existe algum cupom n&atilde;o fiscal vinculado aberto. <br />&nbsp;&nbsp;&nbsp;&nbsp;if ( BematechFiscal.OperacaoNaoFiscal.Status.VinculadoAberto ) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Cupom n&atilde;o Fiscal vinculado j&aacute; aberto!&quot;, &quot;Aten&ccedil;&atilde;o&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBoxButtons.OK, MessageBoxIcon.Exclamation ); <br />&nbsp;&nbsp;&nbsp;&nbsp;else <br />&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Recebe o n&uacute;mero do cupom fiscal <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int iNumeroCupom = BematechFiscal.Cupom.Numero; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para abrir o cupom n&atilde;o fiscal vinculado, passando como par&acirc;metro <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// a forma de pagamento, o valor pago e o n&uacute;mero do cupom (COO).<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.AbrirVinculado( &quot;A prazo&quot;, 1.00M, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iNumeroCupom ); <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;} <br />}<br /><br /></font></font></font><font color="#000099"><font face="Courier New"><font size="1"><strong>// Bot&atilde;o Imprime Texto</strong> <br />private void cmdImprimeTexto_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;try <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para imprimir o texto no comprovante n&atilde;o fiscal vinculado. <br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir(<br /></font></font></font><font color="#000099"><font face="Courier New" size="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Teste de Impress&atilde;o...\r\n&quot; ); <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;} <br />} <br /><br /><strong>// Bot&atilde;o Fecha Cupom N&atilde;o Fiscal Vinculado</strong> <br />private void cmdFecharCupomVinculado_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;try <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para fechar o Cupom N&atilde;o Fiscal vinculado.<br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Relatorio.Fechar(); <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message); <br />&nbsp;&nbsp;} <br />}<br /><br /></font><font color="#3c3c3c"><strong><font size="1">&bull;</font><em><font face="Courier New" size="1"> em VB.NET<br /><br /></font></em></strong><font color="#000099"><font face="Courier New"><font size="1"><strong>.<br />.<br />. <br /><br />' Bot&atilde;o Fecha Cupom</strong> <br />Private Sub cmdFechaCupom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFechaCupom.Click <br />&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para o fechamento do cupom passando como par&acirc;metro a forma de<br />&nbsp;&nbsp;&nbsp;&nbsp;' pagamento e a mensagem promocional.<br />&nbsp;&nbsp;&nbsp;&nbsp;<strong>BematechFiscal.Cupom.Fechar(&quot;A prazo&quot;, &quot;Obrigado, volte sempre!&quot;)</strong> <br />&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;End Try <br />End Sub<br /><br /><strong>' Bot&atilde;o Abre Cupom N&atilde;o Fiscal Vinculado</strong> <br />Private Sub cmdAbreVinculado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAbreVinculado.Click <br />&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo que verifica se existe algum cupom n&atilde;o fiscal vinculado aberto. <br />&nbsp;&nbsp;&nbsp;&nbsp;If (BematechFiscal.OperacaoNaoFiscal.Status.VinculadoAberto) Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Cupom n&atilde;o Fiscal vinculado j&aacute; aberto!&quot;, &quot;Aten&ccedil;&atilde;o&quot;, _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBoxButtons.OK, MessageBoxIcon.Exclamation) <br />&nbsp;&nbsp;&nbsp;&nbsp;Else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Recebe o n&uacute;mero do cupom fiscal <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim iNumeroCupom As Integer = BematechFiscal.Cupom.Numero <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para abrir o cupom n&atilde;o fiscal vinculado, passando como par&acirc;metro <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' a forma de pagamento, o valor pago e o n&uacute;mero do cupom (COO).<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.AbrirVinculado(&quot;A prazo&quot;, 1.0, _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iNumeroCupom) <br />&nbsp;&nbsp;&nbsp;&nbsp;End If <br />&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;End Try <br />End Sub<br /><br /></font></font></font><font color="#000099"><font face="Courier New"><font size="1"><strong>' Bot&atilde;o Imprime Texto<br /></strong>Private Sub cmdImprimeTexto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdImprimeTexto.Click <br />&nbsp;&nbsp;Try <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para imprimir o texto no comprovante n&atilde;o fiscal vinculado.<br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir(&quot;Teste de Impress&atilde;o...&quot; _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ vbCrLf) <br />&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;End Try <br />End Sub<br /><br /></font></font></font><font color="#000099"><font face="Courier New"><font size="1"><strong>' Bot&atilde;o Fecha Cupom N&atilde;o Fiscal Vinculado<br /></strong>Private Sub cmdFechaCupomVinculado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFechaCupomVinculado.Click <br />&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para fechar o Cupom N&atilde;o Fiscal vinculado.<br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Relatorio.Fechar() <br />&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;End Try <br />End Sub<br /><br /><font color="#3c3c3c"><font face="Verdana">Repare que o m&eacute;todo usado para verificar o <em>status</em> do cupom n&atilde;o fiscal vinculado &eacute; <em>&quot;BematechFiscal.OperacaoNaoFiscal.Status.VinculadoAberto&quot;</em> que nos devolve <em>true</em> para aberto ou <em>false</em> para fechado, simples de verificar! O mesmo m&eacute;todo pode ser aplicado para o cupom de recebimento e para o relat&oacute;rio gerencial. Estaremos usando-o na seq&uuml;&ecirc;ncia</font>.</font></font></font><strong><font color="#3333ff"><br /><br /><font size="1">Realizando M&uacute;ltiplos Recebimentos (Cupom N&atilde;o Fiscal N&atilde;o Vinculado)</font></font></strong><br /><br /></font></font><font color="#3c3c3c"><font size="1">Antes de criarmos o c&oacute;digo para realizar esta opera&ccedil;&atilde;o, temos que cadastrar alguns totalizadores n&atilde;o fiscais na impressora para podermos efetuar os recebimentos. A id&eacute;ia &eacute; cadastrar 3 totalizadores para recebermos &quot;01-Conta de Agua&quot;, &quot;02-Conta de Luz&quot; e &quot;03-Conta de Gas&quot;. Estes ser&atilde;o os nomes e os &iacute;ndices de nossos totalizadores.<br /><br />Importante: Para que possamos cadastr&aacute;-los a impressora n&atilde;o poder&aacute; ter movimento no dia. <br /><br />Temos que adicionar o <em>namespace Bematech.Fiscal.ECF.Inicializacao</em> em nosso projeto para poder usar a classe e o m&eacute;todo de cria&ccedil;&atilde;o do totalizador n&atilde;o fiscal.<br /><br />Em seguida, iremos implementar o c&oacute;digo para efetuar estes 3 recebimentos, fazendo um deles e depois todos de uma s&oacute; vez.<br /><br />Repare que o c&oacute;digo do bot&atilde;o <em>cmdMultiRecebimentos</em> cria uma cole&ccedil;&atilde;o de recebimentos, verifica se existe algum recebimento j&aacute; aberto, recebe-os e paga com 3 formas de pagamento diferentes, incluindo acr&eacute;scimo ao subtotal. Completo! <br /><br /></font><strong><font size="1">&bull;</font><em><font face="Courier New" size="1"> em C#<br /><br /></font></em></strong><font color="#000099"><font face="Courier New"><font size="1"><strong>// Bot&atilde;o Programa Totalizador<br /></strong>private void cmdProgramaTotalizador_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;try <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para programa o totalizador n&atilde;o fiscal.<br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Inicializacao.ProgramarTotalizadorNaoFiscal(1,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font color="#000099"><font face="Courier New" size="1">&quot;Conta de Agua&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Inicializacao.ProgramarTotalizadorNaoFiscal(2, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Conta de Luz&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Inicializacao.ProgramarTotalizadorNaoFiscal(3, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Conta de Gas&quot;); <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;} <br />}<br /><br /><strong>// Bot&atilde;o para efetuar o recebimento de uma &uacute;nica conta, pagamento em Cheque.</strong> <br />private void cmdEfetuaRecebimento_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;try <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo usado para efetuar o recebimento n&atilde;o fiscal.<br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Cupom.Receber( &quot;Conta de Luz&quot;, 30.00M ); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para fechar o recebimento n&atilde;o fiscal.<br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Cupom.Fechar( &quot;Cheque&quot;, 30.00M ); <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;} <br />}<br /><br /></font><font face="Courier New"><font size="1"><strong>// Bot&atilde;o para efetuar m&iacute;ltiplos recebimentos.<br /></strong>private void cmdMultiRecebimentos_Click(object sender, System.EventArgs e) <br />{<br />&nbsp;&nbsp;// Classe que cria uma cole&ccedil;&atilde;o de recebimentos. <br />&nbsp;&nbsp;Recebimentos MeusRecebimentos = new Recebimentos(); <br /><br />&nbsp;&nbsp;// M&eacute;todo que adiciona &agrave; cole&ccedil;&atilde;o, o recebimento &quot;Conta de Luz&quot;.&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;MeusRecebimentos.Adicionar( new Recebimento( &quot;Conta de Luz&quot;, 35.00M ) ); <br /><br />&nbsp;&nbsp;// M&eacute;todo que adiciona &agrave; cole&ccedil;&atilde;o, o recebimento &quot;Conta de Agua&quot;. <br />&nbsp;&nbsp;MeusRecebimentos.Adicionar( new Recebimento( &quot;Conta de Agua&quot;, 25.00M ) ); <br /><br />&nbsp;&nbsp;// M&eacute;todo que adiciona &agrave; cole&ccedil;&atilde;o, o recebimento &quot;Conta de Gas&quot;.<br />&nbsp;&nbsp;MeusRecebimentos.Adicionar( new Recebimento( &quot;Conta de Gas&quot;, 75.00M ) ); <br /><br />&nbsp;&nbsp;try <br />&nbsp;&nbsp;{<br /></font></font></font><font face="Courier New"><font size="1"><font color="#000099"><strong>&nbsp;&nbsp;&nbsp;&nbsp;if ( BematechFiscal.OperacaoNaoFiscal.Cupom.Status.Aberto ) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Cupom de recebimento j&aacute; aberto!&quot;, &quot;Aten&ccedil;&atilde;o&quot;, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBoxButtons.OK, MessageBoxIcon.Exclamation ); </strong></font><br /></font></font><font color="#000099"><font face="Courier New" size="1">&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para abrir o cupom de recebimento. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Cupom.Abrir(); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para efetuar todos os recebimento da cole&ccedil;&atilde;o &quot;MeusRecebimento&quot;.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Cupom.Receber( MeusRecebimentos ); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para subtotalizar o cupom de recebimento, com o acr&eacute;scimo dado.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Cupom.SubTotalizar(); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para iniciar o fechamento do recebimento, dando uma acr&eacute;scimo<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// de 10%.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Cupom.AcrescerSubTotal(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TipoAcrescimoDesconto.Percentual, 10.00M ); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para totalizar. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Cupom.Totalizar(); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para efetuar o pagamento, com 3 formas diferentes.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BematechFiscal.OperacaoNaoFiscal.Cupom.EfetuarPagamento(&quot;Dinheiro&quot;, 49.50M);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BematechFiscal.OperacaoNaoFiscal.Cupom.EfetuarPagamento(&quot;Cheque&quot;, 49.50M);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BematechFiscal.OperacaoNaoFiscal.Cupom.EfetuarPagamento(&quot;Cartao&quot;, 49.50M); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para fechar o cupom de recebimento.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BematechFiscal.OperacaoNaoFiscal.Cupom.Fechar(); <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;} <br />}<br /><br /></font><font color="#3c3c3c"><strong><em><font face="Courier New" size="1"><font face="Verdana">&bull; em VB.NET</font>&nbsp;<br /><br /></font></em></strong><font face="Courier New"><font size="1"><font color="#000099"><strong>// Bot&atilde;o Programa Totalizador<br /></strong>Private Sub cmdProgramaTotalizador_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdProgramaTotalizador.Click <br />&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Inicializacao.ProgramarTotalizadorNaoFiscal(1, &quot;Conta de Agua&quot;) <br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Inicializacao.ProgramarTotalizadorNaoFiscal(2, &quot;Conta de Luz&quot;) <br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Inicializacao.ProgramarTotalizadorNaoFiscal(3, &quot;Conta de Gas&quot;) <br />&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;End Try <br />End Sub</font><br /><br /><font color="#000099"><strong>// Bot&atilde;o para efetuar o recebimento de uma &uacute;nica conta, pagamento em Cheque.</strong></font></font></font><font face="Courier New" color="#000099" size="1"> <br />Private Sub cmdEfetuaRecebimento_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEfetuaRecebimento.Click <br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">Try <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">' M&eacute;todo usado para efetuar o recebimento n&atilde;o fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">BematechFiscal.OperacaoNaoFiscal.Cupom.Receber(&quot;Conta de Luz&quot;, 30D) <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">' M&eacute;todo para fechar o recebimento n&atilde;o fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">BematechFiscal.OperacaoNaoFiscal.Cupom.Fechar(&quot;Cheque&quot;, 30D) <br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;</font><font color="#000099"><font face="Courier New"><font size="1">End Try <br />End Sub<br /><br /><strong>// Bot&atilde;o para efetuar m&iacute;ltiplos recebimentos.</strong></font></font></font><font face="Courier New" color="#000099" size="1"> <br />Private Sub cmdMultiRecebimentos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdMultiRecebimentos.Click <br /><br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">' Classe que cria uma cole&ccedil;&atilde;o de recebimentos. <br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">Dim MeusRecebimentos As Recebimentos = New Recebimentos <br /><br />&nbsp;&nbsp;' M&eacute;todo que adiciona &agrave; cole&ccedil;&atilde;o, o recebimento &quot;Conta de Luz&quot;.&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">MeusRecebimentos.Adicionar(New Recebimento(&quot;Conta de Luz&quot;, 35D)) <br /><br />&nbsp;&nbsp;' M&eacute;todo que adiciona &agrave; cole&ccedil;&atilde;o, o recebimento &quot;Conta de Agua&quot;.&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">MeusRecebimentos.Adicionar(New Recebimento(&quot;Conta de Agua&quot;, 25D)) <br /><br />&nbsp;&nbsp;' M&eacute;todo que adiciona &agrave; cole&ccedil;&atilde;o, o recebimento &quot;Conta de Gas&quot;.&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">MeusRecebimentos.Adicionar(New Recebimento(&quot;Conta de Gas&quot;, 75D)) <br /><br />&nbsp;&nbsp;</font><font face="Courier New"><font size="1"><font color="#000099">Try<br /><strong>&nbsp;&nbsp;</strong></font><font color="#000099"><strong>&nbsp;&nbsp;</strong></font></font></font><font face="Courier New" color="#000099" size="1"><strong>If (BematechFiscal.OperacaoNaoFiscal.Cupom.Status.Aberto) Then <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></font><font face="Courier New" color="#000099" size="1"><strong>MessageBox.Show(&quot;Cupom de recebimento j&aacute; aberto!&quot;, &quot;Aten&ccedil;&atilde;o&quot;, _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></font><font face="Courier New"><font size="1"><font color="#000099"><strong>MessageBoxButtons.OK, MessageBoxIcon.Exclamation) <br /></strong></font><font color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font face="Courier New" color="#000099" size="1">Else <br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">' M&eacute;todo para abrir o cupom de recebimento. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">BematechFiscal.OperacaoNaoFiscal.Cupom.Abrir() <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para efetuar todos os recebimento da cole&ccedil;&atilde;o &quot;MeusRecebimento&quot;.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font face="Courier New" color="#000099" size="1">BematechFiscal.OperacaoNaoFiscal.Cupom.Receber(MeusRecebimentos) <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">' M&eacute;todo para subtotalizar o cupom de recebimento, com o acr&eacute;scimo dado. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">BematechFiscal.OperacaoNaoFiscal.Cupom.SubTotalizar() <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">' M&eacute;todo para iniciar o fechamento do recebimento, dando uma acr&eacute;scimo <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'</font><font face="Courier New" color="#000099" size="1"> de 10%. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">BematechFiscal.OperacaoNaoFiscal.Cupom.AcrescerSubTotal( _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">TipoAcrescimoDesconto.Percentual, 10D) <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">' M&eacute;todo para totalizar. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">BematechFiscal.OperacaoNaoFiscal.Cupom.Totalizar() <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">' M&eacute;todo para efetuar o pagamento, com 3 formas diferentes.<br /></font><font face="Courier New" color="#000099" size="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BematechFiscal.OperacaoNaoFiscal.Cupom.EfetuarPagamento(&quot;Dinheiro&quot;, 49.5D)<br /></font><font face="Courier New" color="#000099" size="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BematechFiscal.OperacaoNaoFiscal.Cupom.EfetuarPagamento(&quot;Cheque&quot;, 49.5D)<br /></font><font face="Courier New" color="#000099" size="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BematechFiscal.OperacaoNaoFiscal.Cupom.EfetuarPagamento(&quot;Cartao&quot;, 49.5D) <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">' M&eacute;todo para fechar o cupom de recebimento.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">BematechFiscal.OperacaoNaoFiscal.Cupom.Fechar() <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">endif <br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;</font></font><font color="#000099"><font face="Courier New"><font size="1">End Try <br />End Sub<br /><br /><font face="Verdana" color="#3c3c3c">Uma informa&ccedil;&atilde;o importante que n&atilde;o podemos deixar passar &eacute; a compatibilidade desta ferramenta em rela&ccedil;&atilde;o aos modelos de impressoras fiscais (MP-20 FI II, MP-40 FI II, MP-25 FI, MP-2000 TH FI e etc). Voc&ecirc; deve ter reparado que a seq&uuml;&ecirc;ncia de m&eacute;todos executados est&aacute; voltada para os novos modelos de impressoras, como por exemplo, os m&eacute;todos de recebimento que realizamos acima, onde recebemos mais de uma conta. Esta implementa&ccedil;&atilde;o &eacute; uma seq&uuml;&ecirc;ncia nativa dos novos modelos, mas se a impressora em uso for a MP-20 FI II ou a MP-40 FI II, o Bematech Flash Builder compatibiliza, sem a necessidade de voc&ecirc; reprogramar esta seq&uuml;&ecirc;ncia.</font></font></font><strong><font color="#3333ff"><br /><br /><font size="1">Impress&atilde;o de Relat&oacute;rio Gerencial </font></font></strong><br /><br /><font color="#3c3c3c"><font size="1">Para finalizamos esta rotina de implementa&ccedil;&otilde;es, vamos criar um bot&atilde;o para a impress&atilde;o do relat&oacute;rio gerencial.<br /><br />Tamb&eacute;m iremos testar o seu <em>status</em>.<br /><br /></font><strong><font size="1">&bull;</font><em><font face="Courier New"><font size="1"><font face="Verdana"> em C#</font><br /><br /></font></font></em></strong><font face="Courier New" color="#000099" size="1"><strong>// Bot&atilde;o Relat&oacute;rio Gerencial<br /></strong></font><font face="Courier New" color="#000099" size="1">private void cmdRelatorioGerencial_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">try <br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">{ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">// M&eacute;todo para verificar o status de gerencial aberto. <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">if ( BematechFiscal.OperacaoNaoFiscal.Status.GerencialAberto ) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">MessageBox.Show( &quot;Relat&oacute;rio Gerencial j&aacute; aberto!&quot;, &quot;Aten&ccedil;&atilde;o&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">MessageBoxButtons.OK, MessageBoxIcon.Exclamation ); <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">// M&eacute;todo para abrir o relat&oacute;rio gerencial. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">BematechFiscal.OperacaoNaoFiscal.AbrirGerencial(); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para imprimir o texto no rel&oacute;rio gerencial.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir( </font><font face="Courier New" color="#000099" size="1">&quot;TESTE DE IMPRESSAO.\n&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir( </font><font face="Courier New" color="#000099" size="1">&quot;TESTE DE IMPRESSAO.\n&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir( </font><font face="Courier New" color="#000099" size="1">&quot;TESTE DE IMPRESSAO.\n&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir( </font><font face="Courier New" color="#000099" size="1">&quot;TESTE DE IMPRESSAO.\n&quot; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir( </font><font face="Courier New"><font size="1"><font color="#000099">&quot;TESTE DE IMPRESSAO.\n&quot; );<br /></font><br /><font color="#000099">&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font face="Courier New" color="#000099" size="1">// M&eacute;todo para fechar o relat&oacute;rio gerencial. <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">BematechFiscal.OperacaoNaoFiscal.Relatorio.Fechar(); <br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">} <br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">{ <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;</font><font color="#000099"><font face="Courier New" size="1">} <br />}<br /><br /></font><font color="#3c3c3c"><strong><em><font face="Courier New" size="1"><font face="Verdana">&bull; em VB.NET<br /></font><br /></font></em></strong><font face="Courier New" color="#000099" size="1"><strong>// Bot&atilde;o Relat&oacute;rio Gerencial<br /></strong></font><font face="Courier New" color="#000099" size="1">Private Sub cmdRelatorioGerencial_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRelatorioGerencial.Click <br />&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">Try <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">' M&eacute;todo para verificar o status de gerencial aberto. <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">If (BematechFiscal.OperacaoNaoFiscal.Status.GerencialAberto) Then <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">MessageBox.Show(&quot;Relat&oacute;rio Gerencial j&aacute; aberto!&quot;, &quot;Aten&ccedil;&atilde;o&quot;, _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">MessageBoxButtons.OK, MessageBoxIcon.Exclamation) <br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">Else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New" color="#000099" size="1">' M&eacute;todo para abrir o relat&oacute;rio gerencial. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font face="Courier New"><font size="1"><font color="#000099">BematechFiscal.OperacaoNaoFiscal.AbrirGerencial() <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><br /><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font></font></font></font></font><font face="Courier New"><font size="1"><font color="#000099">' M&eacute;todo para imprimir o texto no rel&oacute;rio gerencial. <br /><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"></font></font></font><font face="Courier New"><font size="1"><font color="#000099">BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir(&quot;TESTE DE IMPRESSAO.\n&quot;) <br /><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"></font></font></font><font face="Courier New"><font size="1"><font color="#000099">BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir(&quot;TESTE DE IMPRESSAO.\n&quot;) <br /><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"></font></font></font><font face="Courier New"><font size="1"><font color="#000099">BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir(&quot;TESTE DE IMPRESSAO.\n&quot;) <br /><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"></font></font></font><font face="Courier New"><font size="1"><font color="#000099">BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir(&quot;TESTE DE IMPRESSAO.\n&quot;) <br /><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"></font></font></font><font color="#000099"><font face="Courier New"><font size="1">BematechFiscal.OperacaoNaoFiscal.Relatorio.Imprimir(&quot;TESTE DE IMPRESSAO.\n&quot;) <br /><br /><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font></font></font><font color="#000099"><font face="Courier New"><font size="1"><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font>' M&eacute;todo para fechar o relat&oacute;rio gerencial. <br /><font color="#000099"><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font></font><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font>BematechFiscal.OperacaoNaoFiscal.Relatorio.Fechar() <br /><font color="#000099"><font color="#000099"><font color="#000099"><font color="#000099"><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font></font><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font></font>End If <br /><font color="#000099"><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font></font>Catch <font color="#000099"></font>MensagemErro As FiscalException <br /><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font><font color="#000099"></font>MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br /><font color="#000099"><font color="#000099"><font color="#000099"><font color="#000099">&nbsp;&nbsp;</font></font></font><font color="#000099"></font></font>End Try <br />End Sub</font></font></font></font></font></font></font></font></font></font></font>]]>
    </content>
</entry>
<entry>
    <title>Bematech Flash Builder - Desenvolvendo o primeiro Cupom Fiscal</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2006/02/bematech_flash_builder_desenvo.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=39" title="Bematech Flash Builder - Desenvolvendo o primeiro Cupom Fiscal" />
    <id>tag:partners.bematech.com.br,2006:/flashtip//2.39</id>
    
    <published>2006-02-02T15:16:56Z</published>
    <updated>2006-02-10T21:18:14Z</updated>
    
    <summary><![CDATA[Caro parceiro,Na edi&ccedil;&atilde;o anterior, referenciamos os assemblies Bematech.dll e Bematech.Fiscal.dll ao projeto, e instanciamos seus m&eacute;todos para o objeto BematechFiscal - objeto que estaremos utilizando durante todo o desenvolvimento.Nesta edi&ccedil;&atilde;o, iremos desenvolver o nosso primeiro Cupom Fiscal, aproveitando todas as...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Mini Cursos" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<font face="Verdana"><font size="1">Caro parceiro,<br /><br />Na edi&ccedil;&atilde;o anterior, referenciamos os <em>assemblies</em> <strong>Bematech.dll</strong> e <strong>Bematech.Fiscal.dll</strong> ao projeto, e instanciamos seus m&eacute;todos para o objeto <strong><em>BematechFiscal</em></strong> - objeto que estaremos utilizando durante todo o desenvolvimento.<br /><br />Nesta edi&ccedil;&atilde;o, iremos desenvolver o nosso primeiro Cupom Fiscal, aproveitando todas as facilidades e agilidades que esta ferramenta nos oferece.<br /><br />N&atilde;o esque&ccedil;a que estaremos visualizando todas as rotinas em C# e Visual Basic .NET.<br /><br />E, &quot;m&atilde;o na massa&quot;!<br /></font></font>]]>
        <![CDATA[<font size="1"><font face="Verdana"><strong><font color="#3333ff">Criando o Cupom Fiscal<br /><br /></font></strong>No <em>form</em> principal, vamos criar 3 bot&otilde;es de comando, onde iremos abrir, vender e fechar o cupom fiscal. <br /><br /><strong>&bull;</strong><em><strong> em C#<br /><br /></strong></em>
<p><font face="Courier New, Courier, mono" color="#000099"><strong>// Bot&atilde;o Abre Cupom<br /></strong>private void cmdAbreCupom_Click(object sender, System.EventArgs e)<br />{<br />&nbsp;&nbsp;try<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para a abertura do Cupom Fiscal sem passagem de par&acirc;metro.<br />&nbsp;&nbsp;&nbsp; BematechFiscal.Cupom.Abrir();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para o retorno do n&uacute;mero do cupom (COO), armazenando <br />&nbsp;&nbsp;&nbsp;&nbsp;// na vari&aacute;vel cNumeroCupom <br />&nbsp;&nbsp;&nbsp;&nbsp;string cNumeroCupom = BematechFiscal.Cupom.Numero.ToString();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;catch ( FiscalException MensagemErro )<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message );<br />&nbsp; }<br />}<br /><br /><strong>// Bot&atilde;o Vender Item<br /></strong>private void cmdItem_Click(object sender, System.EventArgs e)<br />{<br />&nbsp;&nbsp;// Criado o objeto ItemVendido para representar o item a ser vendido.<br />&nbsp;&nbsp;Item ItemVendido = new Item(); <br />&nbsp;&nbsp;ItemVendido.Codigo = &quot;1234567890123&quot;; <br />&nbsp;&nbsp;ItemVendido.Descricao = &quot;Item de Teste&quot;; <br />&nbsp;&nbsp;ItemVendido.Aliquota = &quot;FF&quot;; <br />&nbsp;&nbsp;ItemVendido.Quantidade = 1; <br />&nbsp;&nbsp;ItemVendido.ValorUnitario = 1.00M; <br /><br />&nbsp;&nbsp;try <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para a venda do item passando como par&acirc;metro o objeto ItemVendido.<br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Cupom.Vender( ItemVendido ); <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;} <br />} <br /><br /><strong>// Bot&atilde;o Fecha Cupom<br /></strong>private void cmdFechaCupom_Click(object sender, System.EventArgs e) <br />{ <br />&nbsp;&nbsp;try <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para o fechamento do cupom passando como par&acirc;metro a forma de<br />&nbsp;&nbsp;&nbsp;&nbsp;// pagamento e a mensagem promocional.<br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Cupom.Fechar( &quot;Dinheiro&quot;, &quot;Obrigado, volte sempre!&quot; ); <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;} <br />}<br /><br /><font color="#000000"><font face="Verdana"><strong><em>&bull; em VB.NET<br /></em><br /></strong><font color="#000099"><font face="Courier New"><strong>' Bot&atilde;o Abre Cupom <br /></strong>Private Sub cmdAbreCupomFiscal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAbreCupomFiscal.Click <br />&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para a abertura do Cupom Fiscal sem passagem de par&acirc;metro. <br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Cupom.Abrir() <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para o retorno do n&uacute;mero do cupom (COO), armazenando <br />&nbsp;&nbsp;&nbsp;&nbsp;' na vari&aacute;vel cNumeroCupom<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim cNumeroCupom As String = BematechFiscal.Cupom.Numero.ToString() <br /><br />&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;End Try <br />End Sub<br /><br /><strong>' Bot&atilde;o Vender Item <br /></strong>Private Sub cmdVendaItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdVendaItem.Click <br />&nbsp;&nbsp;Try<br />&nbsp;&nbsp;&nbsp;&nbsp;' Criado o objeto ItemVendido para representar o item a ser vendido. <br />&nbsp;&nbsp;&nbsp;&nbsp;Dim ItemVendido As Item = New Item <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ItemVendido.Codigo = &quot;1234567890123&quot; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ItemVendido.Descricao = &quot;Item de Teste&quot; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ItemVendido.Aliquota = &quot;FF&quot; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ItemVendido.Quantidade = 1 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ItemVendido.ValorUnitario = 1.0 <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para a venda do item passando como par&acirc;metro o objeto ItemVendido. &nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Cupom.Vender(ItemVendido) <br />&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;End Try <br />End Sub<br /><br /><strong>' Bot&atilde;o Fecha Cupom <br /></strong>Private Sub cmdFechaCupom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFechaCupom.Click <br />&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para o fechamento do cupom passando como par&acirc;metro a forma de<br />&nbsp;&nbsp;&nbsp;&nbsp;' pagamento e a mensagem promocional.<br />&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Cupom.Fechar(&quot;Dinheiro&quot;, &quot;Obrigado, volte sempre!&quot;) <br />&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;MsgBox(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;End Try <br />End Sub</font><br /><br /></font><font color="#000000">Repare que as chamadas aos m&eacute;todos foram feitas dentro de um <em>&quot;Try/Catch&quot;</em>. Desta forma, podemos tratar o <em>status</em> da impressora durante a execu&ccedil;&atilde;o. Este tratamento &eacute; controlado pela exce&ccedil;&atilde;o <em>FiscalException</em> instanciada ao objeto <em>MensagemErro</em>, onde atrav&eacute;s da propriedade <em>Message</em> &eacute; exibida a mensagem.<br /><br />Ao entrar com o objeto <em>BematechFiscal</em> no c&oacute;digo e pressionar o &quot;.&quot; (ponto), os principais m&eacute;todos dos <em>namespaces</em> adicionados aparecem, facilitando a pesquisa e agilizando o desenvolvimento.<br /><br /><img height="192" src="/mt/mt-static/FCKeditor/UserFiles/Image/befisc1.jpg" width="438" alt="" /><br /><br /><strong><font color="#3333ff">Overloads<br /><br /></font></strong><em>Overloads</em> s&atilde;o sobrecargas de par&acirc;metros, exibidos durante o uso dos m&eacute;todos da ferramenta. <br /><br />Quando abrimos o &quot;(&quot; (par&ecirc;nteses) para a passagem de par&acirc;metro, os m&eacute;todos exibem uma caixa contendo formas diferentes de us&aacute;-lo. Na figura abaixo, o m&eacute;todo &quot;Abrir&quot; exibe o 4&ordm; <em>overload</em> dos 7 que possui, permitindo a entrada dos par&acirc;metros CPF, Nome e Endere&ccedil;o do cliente, que ser&atilde;o impressos na abertura do cupom fiscal. <br /><br />Para a escolha do <em>overload</em>, basta pressionar a seta para cima ou para baixo. Voc&ecirc; pode optar pelo mais simples ao mais completo, a pr&oacute;pria ferramenta se encarrega de identificar qual impressora est&aacute; em uso e enviar os par&acirc;metros correspondentes, e isso ocorre com todos os m&eacute;todos que possuem <em>overloads</em>. Fant&aacute;stico!<br /><br />Sempre ser&aacute; exibido o conjunto de <em>overloads</em>, quando o m&eacute;todo permitir.<br /><br /><img height="124" src="/mt/mt-static/FCKeditor/UserFiles/Image/befisc2.jpg" width="437" alt="" /><br /><br />No <em>form load</em>, vamos criar o seguinte tratamento:<br /><br />- Quando a aplica&ccedil;&atilde;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&atilde;o houver itens vendidos, iremos cancel&aacute;-lo, caso contr&aacute;rio iremos recuperar todos os itens que foram vendidos e exibir em um <em>TextBox</em> (chamado <em>txtProduto</em>) com a propriedade <em>Multiline</em> setada para True.<br /><br />Imagine uma situa&ccedil;&atilde;o de queda de energia no meio de uma opera&ccedil;&atilde;o de venda, onde v&aacute;rios itens j&aacute; foram vendidos.<br /><br />Quando a aplica&ccedil;&atilde;o &eacute; iniciada, todos estes itens s&atilde;o recuperados facilmente, ou seja, o cupom fiscal volta ao seu estado atual, sem a necessidade de realizamos este controle externamente. Veja como &eacute; simples!<br /><br /><strong>&bull;<em> em C# <br /><br /></em></strong><font face="Courier New" color="#000099">private void frmPrincipal_Load(object sender, System.EventArgs e)<br /></font><font face="Courier New" color="#000099">{ <br />&nbsp;&nbsp;try <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para verificar se o cupom est&aacute; aberto. <br />&nbsp;&nbsp;&nbsp;&nbsp;if ( BematechFiscal.Cupom.Status.Aberto ) <br />&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo que retorna a quantidade de itens vendidos. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( BematechFiscal.Cupom.ItensVendidos.Count != 0 ) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// A classe Item armazena todos os itens vendidos no cupom fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach ( Item ItensVendidos in BematechFiscal.Cupom.ItensVendidos ) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtProduto.Text += ItensVendidos.Codigo + &quot; &quot; + <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ItensVendidos.Descricao + &quot; &quot; + <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ItensVendidos.Quantidade.ToString(&quot;0&quot;) + &quot; &quot; + <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ItensVendidos.ValorUnitario.ToString( &quot;C&quot; ) + &quot;\r\n&quot;; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo que retorna o modelo da impressora fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string cModeloImpressora = BematechFiscal.Modelo.ToString(); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todos que retorna a vers&atilde;o do firmware da impressora fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string cVersaoFirmware = BematechFiscal.Informacao.VersaoFirmware; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( cModeloImpressora == &quot;MP20FI&quot; &amp;&amp; cVersaoFirmware != &quot;032600&quot; ) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para vender um item para o cancelamento do cupom fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Cupom.Vender( &quot;1&quot;, &quot;Item para cancelamento&quot;, &quot;II&quot;, 1, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.01M ); <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para cancelar o cupom fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Cupom.Cancelar(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// M&eacute;todo para cancelar o cupom fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Cupom.Cancelar(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;} <br />&nbsp;&nbsp;catch ( FiscalException MensagemErro ) <br />&nbsp;&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show( &quot;Mensagem Erro: &quot; + MensagemErro.Message ); <br />&nbsp;&nbsp;} <br />}</font><br /><br /><em><strong>&bull; em VB.NET <br /><br /></strong></em><font face="Courier New, Courier, mono" color="#000099">Private Sub frmPrincipal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load <br />&nbsp;&nbsp;Try <br />&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para verificar se o cupom est&aacute; aberto. <br />&nbsp;&nbsp;&nbsp;&nbsp;If (BematechFiscal.Cupom.Status.Aberto) Then <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo que retorna a quantidade de itens vendidos. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If (BematechFiscal.Cupom.ItensVendidos.Count &lt;&gt; 0) Then <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' A classe Item armazena todos os itens vendidos no cupom fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For Each ItensVendidos As Item In BematechFiscal.Cupom.ItensVendidos <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtProduto.Text += ItensVendidos.Codigo + &quot; &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ItensVendidos.Descricao + &quot; &quot; + _ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ItensVendidos.Quantidade.ToString(&quot;0&quot;) + &quot; &quot; + _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ItensVendidos.ValorUnitario.ToString(&quot;C&quot;) + vbCrLf <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo que retorna o modelo da impressora fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim cModeloImpressora As String = BematechFiscal.Modelo.ToString() <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todos que retorna a vers&atilde;o do firmware da impressora fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim cVersaoFirmware As String = BematechFiscal.Informacao.VersaoFirmware <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If (cModeloImpressora = &quot;MP20FI&quot; And cVersaoFirmware &lt;&gt; &quot;032600&quot;) Then <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para vender um item para o cancelamento do cupom fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Cupom.Vender(&quot;1&quot;, &quot;Item para cancelamento&quot;, &quot;II&quot;, 1, _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.01D) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para cancelar o cupom fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Cupom.Cancelar() <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' M&eacute;todo para cancelar o cupom fiscal. <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BematechFiscal.Cupom.Cancelar() <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If <br />&nbsp;&nbsp;&nbsp;&nbsp;End If <br />&nbsp;&nbsp;Catch MensagemErro As FiscalException <br />&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(&quot;Mensagem Erro: &quot; + MensagemErro.Message) <br />&nbsp;&nbsp;End Try <br />End Sub<br /><br /></font>Chamamos este processo de <em>Serializa&ccedil;&atilde;o</em>. A ferramenta faz um backup de todos os dados que est&atilde;o em mem&oacute;ria, salvando o estado atual da opera&ccedil;&atilde;o no momento em que ela &eacute; realizada, permitindo sua recuperada. As serializa&ccedil;&otilde;es s&atilde;o realizadas nas opera&ccedil;&otilde;es de cupom fiscal, cupom n&atilde;o fiscal, Sintegra e TEF.</font></font></font></font></p>
</font></font>]]>
    </content>
</entry>
<entry>
    <title>Conhecendo o assembly Bematech.Fiscal.dll</title>
    <link rel="alternate" type="text/html" href="http://partners.bematech.com.br/flashtip/2006/01/conhecendo_o_assembly_bematech.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://partners.bematech.com.br/mt/mt-atom.cgi/weblog/blog_id=2/entry_id=35" title="Conhecendo o assembly Bematech.Fiscal.dll" />
    <id>tag:partners.bematech.com.br,2006:/flashtip//2.35</id>
    
    <published>2006-01-25T17:01:13Z</published>
    <updated>2006-02-10T21:15:53Z</updated>
    
    <summary><![CDATA[Caro parceiro,Na edi&ccedil;&atilde;o passada de nosso Flash Tip, pudemos conhecer a nova ferramenta de conectividade da Bematech - o Bematech Flash Builder.Vimos a sua diferen&ccedil;a em rela&ccedil;&atilde;o a BemaFI32.dll e suas principais vantagens.Vimos tamb&eacute;m, como esta ferramenta est&aacute; estrutura e...]]></summary>
    <author>
        <name>André Munhoz</name>
        
    </author>
            <category term="Mini Cursos" />
    
    <content type="html" xml:lang="pt" xml:base="http://partners.bematech.com.br/flashtip/">
        <![CDATA[<font face="Verdana" size="1">Caro parceiro,<br /><br />Na edi&ccedil;&atilde;o passada de nosso Flash Tip, pudemos conhecer a nova ferramenta de conectividade da Bematech - o Bematech Flash Builder.<br /><br />Vimos a sua diferen&ccedil;a em rela&ccedil;&atilde;o a BemaFI32.dll e suas principais vantagens.<br /><br />Vimos tamb&eacute;m, como esta ferramenta est&aacute; estrutura e seus principais assemblies.<br /><br />Nesta edi&ccedil;&atilde;o, iremos &quot;colocar a m&atilde;o na massa&quot; e iniciar o nosso primeiro projeto. Mas antes, &eacute; importante sabermos que esta nova ferramenta possui tipos variados de tratamento de erro (<em>exceptions</em>), que s&atilde;o levantados quando ocorre algum erro. S&atilde;o eles:<br /></font>]]>
        <![CDATA[<p><strong><font size="1"><font face="Verdana">&bull;<em><strong> </strong></em><em>BematechException</em></font></font></strong><br /><font size="1"><font face="Verdana">Classe abstrata herdada por todas as exce&ccedil;&otilde;es levantadas pelo Bematech Flash Builder. <br /><br /><strong><strong>&bull;<em><strong> </strong></em></strong></strong><em><strong>FiscalException</strong></em></font></font><br /><font size="1"><font face="Verdana">Erro de exce&ccedil;&atilde;o levantado sempre que um comando enviado &agrave; impressora fiscal n&atilde;o for executado. <br /><br />Atrav&eacute;s da exce&ccedil;&atilde;o <em>FiscalException</em>, n&atilde;o &eacute; mais necess&aacute;rio verificar o estado da impressora ap&oacute;s cada execu&ccedil;&atilde;o de comando. A pr&oacute;pria ferramenta se encarrega de verificar isso para voc&ecirc;. <br /><br /><strong><strong>&bull;<em><strong> </strong></em></strong></strong><em><strong>ParametroInvalidoException</strong></em></font></font><br /><font size="1"><font face="Verdana">&Eacute; o erro de exce&ccedil;&atilde;o levantado sempre quando um par&acirc;metro de comando &eacute; inv&aacute;lido. <br /><br /><strong><strong>&bull;<em><strong> </strong></em></strong></strong><em><strong>ComunicacaoException</strong></em></font></font><br /><font size="1"><font face="Verdana">&Eacute; o erro de exce&ccedil;&atilde;o levantado quando ocorre alguma falha na comunica&ccedil;&atilde;o com a impressora fiscal (erro de porta serial). <br /><br /><strong><strong>&bull;<em><strong> </strong></em></strong></strong></font></font><font size="1"><font face="Verdana"><em><strong>FimPapelException</strong></em><br />&Eacute; o erro de exce&ccedil;&atilde;o levantado quando h&aacute; falta de papel na impressora fiscal. <br /><br /><em>Importante:</em> N&atilde;o existe uma exce&ccedil;&atilde;o para o estado de &quot;pouco papel&quot;, pois este estado n&atilde;o significa um erro e, sim, uma informa&ccedil;&atilde;o. Veremos este estado e outros que a impressora possui, na classe &quot;StatusImpressora&quot;. <br /><br /><em>Observa&ccedil;&atilde;o:</em> Veremos as demais exce&ccedil;&otilde;es durante o desenvolvimento. <br /><br />Quando ocorrer algum tipo de erro, podemos verificar onde este erro ocorreu (origem da exce&ccedil;&atilde;o) e qual o seu c&oacute;digo, podendo tratar e informar, de forma mais clara, o operador.<br /><br />Voc&ecirc; j&aacute; pensou na agilidade que isso nos traz?<br /><br /><strong><font color="#3333ff">Referenciando o assembly ao projeto</font></strong><br /><br />Depois de conhecermos as <em>exceptions</em> levantadas pela ferramenta, vamos iniciar o nosso pequeno projeto de solu&ccedil;&atilde;o comercial, come&ccedil;ando pela adi&ccedil;&atilde;o do(s) assembly(ies) que iremos utilizar. <br /><br />Estaremos utilizando o Visual Studio .NET 2003 e os c&oacute;digos estar&atilde;o nas vers&otilde;es C# e VB.NET.<br /><br />Iniciamos o nosso projeto com a impressora fiscal, ent&atilde;o, os assemblies que iremos referenciar s&atilde;o: <em>Bematech.dll</em> e <em>Bematech.Fiscal.dll</em>.<br /><br />Depois de criar o projeto e j&aacute; estando com a tela de <em>design</em> aberta, clique com o bot&atilde;o direito do mouse na op&ccedil;&atilde;o &quot;<em>References</em>&quot;, da janela &quot;<em>Solution Explorer</em>&quot;, e escolha &quot;<em>Add Reference...</em>&quot;. Procure por <em>Bematech.dll</em> e <em>Bematech.Fiscal.dll</em>, e clique em OK.<br /><br />Os dois assemblies aparecem na jabela &quot;Solution Explorer&quot;.<br /><br /><img height="291" src="/mt/mt-static/FCKeditor/UserFiles/Image/explorer.jpg" width="218" alt="" /><br /><br /></font></font><font face="Verdana"><font size="1">O pr&oacute;ximo passo &eacute; declarar os <em>namespaces</em> que iremos usar. Para isso, v&aacute; at&eacute; o in&iacute;cio do c&oacute;digo e acrescente as seguintes linhas:<br /><br /><strong><strong>&bull;<em><strong> </strong></em></strong></strong><em><strong>para C#</strong></em><br /><br /></font><font size="1"><font face="Courier New"><font color="#000099">using Bematech;<br />using Bematech.Fiscal.ECF;<br />using Bematech.Fiscal.ECF.CupomFiscal;<br />using Bematech.Fiscal.ECF.OperacoesNaoFiscais;<br />using Bematech.Fiscal.ECF.RelatoriosFiscais;<br />using Bematech.Fiscal.ECF.Informacoes;</font><br /></font><br /><strong>&bull;<em><strong> </strong></em><em>para VB.NET</em></strong><br /><br /></font><font size="1"><font face="Courier New" color="#000099">Imports Bematech<br />Imports Bematech.Fiscal.ECF<br />Imports Bematech.Fiscal.ECF.CupomFiscal<br />Imports Bematech.Fiscal.ECF.OperacoesNaoFiscais<br />Imports Bematech.Fiscal.ECF.RelatoriosFiscais<br />Imports Bematech.Fiscal.ECF.Informacoes</font><br /><br /></font><font size="1"><strong><font color="#3333ff">Criando a Impressora Fiscal<br /><br /></font></strong>Para podermos utilizar os m&eacute;todos das classes referenciadas ao projeto, ser&aacute; necess&aacute;rio criarmos a impressora fiscal. No conceito de orienta&ccedil;&atilde;o a objetos, usar&iacute;amos &quot;New()&quot;, mas como a impressora fiscal &eacute; &uacute;nica no PDV, usaremos o m&eacute;todo &quot;Construir()&quot; da classe ImpressoraFiscal, que ser&aacute; o nosso &quot;ponto de partida&quot; para todas as opera&ccedil;&otilde;es envolvendo a impressora fiscal.<br /><br />Vamos cri&aacute;-la no <em>public class</em> do <em>form</em> principal.<br /><br /><strong><strong>&bull;<em><strong> </strong></em></strong></strong></font><font size="1"><em><strong>em C#<br /></strong></em><br /></font><font size="1"><font face="Courier New" color="#000099">ImpressoraFiscal BematechFiscal = ImpressoraFiscal.Construir();<br /></font><br /><strong><strong>&bull;</strong></strong><em><strong> em VB .NET</strong></em><br /></font><font face="Courier New, Courier, mono" color="#000099"><br /><font size="1">Public BematechFiscal As ImpressoraFiscal = ImpressoraFiscal.Construir()<br /></font></font><br /><font size="1">Onde:<br /><br /><em>- ImpressoraFiscal</em> &eacute; a classe que det&eacute;m os m&eacute;todos da impressora fiscal;<br /><em>- BematechFiscal</em> &eacute; o objeto (vari&aacute;vel) que receber&aacute; a inst&acirc;ncia dos m&eacute;todos e;<br /><em>- ImpressoraFiscal.Construir()</em> &eacute; o m&eacute;todo construtor da classe.<br /><br />A partir desta constru&ccedil;&atilde;o, todos os demais m&eacute;todos ser&atilde;o exibidos atrav&eacute;s do nosso objeto<em> BematechFiscal</em>.</font></font></p>]]>
    </content>
</entry>

</feed> 

