<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Bemacast - Flash-Tip</title>
	<atom:link href="http://partners.bematech.com.br/bemacast/flashtip/feed/" rel="self" type="application/rss+xml" />
	<link>http://partners.bematech.com.br/bemacast/flashtip</link>
	<description>O melhor conteúdo técnico para o Desenvolvedor de Automação Comercial</description>
	<pubDate>Thu, 18 Feb 2010 19:08:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Edição 51 - Desprogramando o Horário de Verão</title>
		<link>http://partners.bematech.com.br/bemacast/flashtip/2010/02/edicao-51-desprogramando-o-horario-de-verao/</link>
		<comments>http://partners.bematech.com.br/bemacast/flashtip/2010/02/edicao-51-desprogramando-o-horario-de-verao/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 19:08:05 +0000</pubDate>
		<dc:creator>André Munhoz</dc:creator>
		
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://partners.bematech.com.br/bemacast/flashtip/?p=128</guid>
		<description><![CDATA[Caro parceiro,
Sua aplicação está preparada para executar o comando para desprogramar o horário de verão nas ECFs Bematech?
Neste ano, segundo o Decreto nº 6.558 de 8 de setembro de 2008 publicado no Diário Oficial da União, a partir das 0:00h do dia 18 de outubro (domingo), entrou em vigor o horário de verão no país [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Caro parceiro,</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Sua aplicação está preparada para executar o comando para desprogramar o horário de verão nas ECFs Bematech?</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Neste ano, segundo o <a href="http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm" target="_blank">Decreto nº 6.558</a> de 8 de setembro de 2008 publicado no Diário Oficial da União, a partir das 0:00h do dia 18 de outubro (domingo), entrou em vigor o horário de verão no país com duração até as 0:00h do dia 21 de fevereiro de 2010 (válido para as regiões Sul, Sudeste e Centro-Oeste).</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Neste dia 21, os relógios deverão retroceder 1 hora, bem como os sistemas/softwares e as ECFs.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Então, preparamos esta edição do Flash Tip com dicas de programação para ajudá-lo a ajustar o horário de verão nas impressoras fiscais Bematech.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Como devemos retroceder o horário em 1 hora, não podemos realizar esta operação logo após a impressão da redução Z, pois as ECFs não executariam tal comando. Por que isso ocorre? O documento da redução Z armazenado na memória fiscal da impressora estará com uma hora a mais, em relação ao retrocesso. Então, devemos executar o comando de ajuste do horário de versão com no mínimo 1 hora e 1 segundo, após a última redução Z impressa.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>BemaFI32.dll</em></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Para quem usa a BemaFI32.dll, a função que deve ser executada para desprogramar na impressora o horário de verão é, simplesmente, Bematech_FI_ProgramaHorarioVerao().</span></span></p>
<ul>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">em VB 6</span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #993300;">iRetorno = Bematech_FI_ProgramaHorarioVerao()</span></span></span></span></p>
<ul>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">em Delphi</span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #993300;">iRetorno := Bematech_FI_ProgramaHorarioVerao();</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span><span style="font-family: trebuchet ms,geneva;"></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>Bematech Flash Builder</em></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Inclua a classe Bematech.Fiscal.ECF.Inicializacao no projeto e execute o método AjustarHorarioVerao.</span></span></p>
<ul>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">em VB .NET</span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #993300;">Imports Bematech.Fiscal.ECF.Inicializacao<br />
.<br />
.<br />
.<br />
&lt;objeto&gt;.BematechFiscal.Inicializacao.AjustarHorarioVerao()</span></span></span></span></p>
<ul>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">em C#</span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="color: #993300;"><span style="font-family: courier new,courier;">using Bematech.Fiscal.ECF.Inicializacao;<br />
.<br />
.<br />
.<br />
&lt;objeto&gt;.BematechFiscal.Inicializacao.AjustarHorarioVerao();</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span><span style="font-family: trebuchet ms,geneva;"></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>Bematech MONITOR (WTS ou Citrix)</em></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Da mesma forma que na BemaFI32.dll, basta chamar a função Bematech_FI_ProgramaHorarioVerao().</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>Bematech MONITOR local (via arquivo)</em></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Crie o arquivo BemaFI32.cmd com o comando &#8220;066|&#8221; e copie para o caminho onde o Bematech MONITOR está monitorando.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>Componente WEB BemaFisc</em></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Basta chamar o método ProgramaHoraVerao do objeto WEB criado.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>Bemafi.exe (ambiente DOS) </em></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Crie o arquivo Bemafi.cmd com o comando abaixo e execute o Bemafi.exe.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="color: #993300;"><span style="font-family: courier new,courier;">chr( 27 ) + chr( 251 ) + &#8220;18|&#8221; + chr( 27 )</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>Protocolo de Comunicação Direto</em></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Envie o comando ESC 18d (27d + 18d) ou ESC 12h (1Bh + 12h).</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>LibBemaFiscal.so (Linux)</em></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Execute a função Bematech_FI_ProgramaHorarioVerao, da mesma forma que na BemaFI32.dll.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="color: #993300;"><span style="font-family: courier new,courier;">iRetorno = Bematech_FI_ProgramaHorarioVerao()</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>BemaFILX.out (executável Linux)</em></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Crie o arquivo BemaFILX.cmd com o comando abaixo e execute o BemaFILX.out.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="color: #993300;"><span style="font-family: courier new,courier;">chr( 27 ) + &#8220;|18|&#8221; + chr( 27 )</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Qualquer dúvida que surgir, nossa equipe de suporte técnico está a disposição para esclarece-la. Você pode nos contatar pelo:</span></span></p>
<p><a href="mailto:suporte@bematech.com.br"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte@bematech.com.br</span></span></a></p>
<p><a href="mailto:suporte.andre@bematech.com.br"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.andre@bematech.com.br</span></span></a><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"> (MSN e Email)</span></span></p>
<p><a href="mailto:suporte.iohannes@bematech.com.br"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.iohannes@bematech.com.br</span></span></a><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"> (MSN e Email) </span></span></p>
<p><a href="mailto:suporte.sidnei@bematech.com.br"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.sidnei@bematech.com.br</span></span></a><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"> (MSN e Email) </span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.andre.luiz (SKYPE)</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.iohannes (SKYPE)</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.sidnei (SKYPE) </span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Ou ligue-nos no 0800 644 7277.</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://partners.bematech.com.br/bemacast/flashtip/2010/02/edicao-51-desprogramando-o-horario-de-verao/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Edição 50 - Arquivo MFD e Espelho MFD - Novas funções</title>
		<link>http://partners.bematech.com.br/bemacast/flashtip/2010/02/edicao-50-arquivo-mfd-e-espelho-mfd-novas-funcoes/</link>
		<comments>http://partners.bematech.com.br/bemacast/flashtip/2010/02/edicao-50-arquivo-mfd-e-espelho-mfd-novas-funcoes/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 14:03:18 +0000</pubDate>
		<dc:creator>André Munhoz</dc:creator>
		
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://partners.bematech.com.br/bemacast/flashtip/?p=124</guid>
		<description><![CDATA[Caro parceiro,
Dando continuidade à série de Flashtips sobre o tema &#8220;Explorando a MFD nas impressoras fiscais Bematech&#8220;, nesta edição iremos abordar dois assuntos muito importantes para quem está preparando a aplicação para as homologações do PAF-ECF - a geração do Arquivo MFD e do Espelho MFD.
Para recordarmos, o Arquivo e o Espelho MFD fazem parte [...]]]></description>
			<content:encoded><![CDATA[<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Caro parceiro,</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Dando continuidade à série de Flashtips sobre o tema &#8220;<a href="http://partners.bematech.com.br/bemacast/flashtip/2009/10/edicao-47-explorando-a-mfd-nas-impressoras-fiscais-bematech/" target="_blank">Explorando a MFD nas impressoras fiscais Bematech</a>&#8220;, nesta edição iremos abordar dois assuntos muito importantes para quem está preparando a aplicação para as homologações do PAF-ECF - a geração do Arquivo MFD e do Espelho MFD.</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Para recordarmos, o Arquivo e o Espelho MFD fazem parte do &#8220;Requisito VII&#8221; do Roteiro de Análise Funcional, mais especificamente os itens 5 e 6, e estão presentes no Menu Fiscal do PAF:</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong>ITEM 5:</strong> <em>“Espelho MFD”, para gerar arquivo eletrônico da Memória de Fita Detalhe, no formato de “espelho” dos documentos nela contidos, com possibilidade de seleção por período de data e por intervalo de COO, devendo assiná-lo digitalmente inserindo ao final do arquivo uma linha com o registro tipo EAD&#8230;</em></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong>ITEM 6:</strong> <em>“Arq. MFD” para gerar arquivo eletrônico da Memória de Fita Detalhe conforme leiaute estabelecido no Ato COTEPE/ICMS 17/04 com possibilidade de seleção por período de data e por intervalo de COO, devendo assiná-lo digitalmente inserindo ao final do arquivo uma linha com o registro tipo EAD&#8230;</em></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Então, iremos conhecer como implementar estas duas funcionalidades, através das novas funções da <a href="http://www.bematech.com.br/suporte/downloads/fisc_win/bemafi32.zip">BemaFI32.dll</a>, completas e incluindo a assinatura EAD.</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Vamos lá!</span></span></p>
<p style="FONT-FAMILY: "> </p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><span style="font-size: medium;">Espelho MFD</span></strong></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">O arquivo no formato de espelho da MFD, ou seja, a reprodução na íntegra dos documentos emitidos pelo ECF, é um dos itens exigidos no PAF. Este arquivo é gerado a partir de uma única função &#8220;<strong><em>Bematech_FI_EspelhoMFD</em></strong>&#8220;.</span></span></p>
<ul>
<li>
<div style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Declaração em VB</span></span></div>
</li>
</ul>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="color: #993300;">Public Declare Function Bematech_FI_EspelhoMFD Lib &#8220;BEMAFI32.DLL&#8221; ( ByVal cNomeArquivoDestino As String, ByVal cDadoInicial As String, ByVal cDadoFinal As String, ByVal cTipoDownload As String, ByVal cUsuario As String, ByVal cChavePublica As String, ByVal cChavePrivada As String ) As Integer</span></span></p>
<ul>
<li style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Declaração em Delphi</span></span></li>
</ul>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="color: #993300;">function Bematech_FI_EspelhoMFD( cNomeArquivoDestino: String; cDadoInicial: String; cDadoFinal: String; cTipoDownload: String; cUsuario: String; cChavePublica: String; cChavePrivada: String ): Integer; StdCall; External &#8216;BEMAFI32.DLL&#8217;;</span></span></p>
<ul>
<li style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Exemplo em VB</span></span></li>
</ul>
<p><span style="color: #993300;"><span style="font-family: courier new,courier;">iRetorno = Bematech_FI_EspelhoMFD(&#8221;C:\TESTE.TXT&#8221;, _<br />
&#8220;000100&#8243;, _<br />
&#8220;000200&#8243;, _<br />
&#8220;C&#8221;, _<br />
&#8220;1&#8243;, _<br />
&#8220;A499F300F731F6892F44B83A5DD9D97CFFFD0ABE96E29B4B4B4E<br />
B2F9E5BCFFCF0A52EAFDF05779F90B3A199BE5776B13373CB2E7<br />
1D8AB67F4080CE27B226FFF032B6A7182C90C935EF2F4D343A74<br />
3B60307EE4961F0C5EB02B1CEEF48D647C02E9BE164DC404B833<br />
F80C5B4268C04039547E7D5E242537B02360674B569208BD&#8221;, _<br />
&#8220;D19598300478932ACFFE16CB6903552F15FDBD2D3B9659FAD79C<br />
3603C07B875919E9D8B28919B8F4C20C6AE23268A636D1206F5E<br />
6BC79D89B6152804B15A9781C90E0A2D5064FB5B7CC01048AD8C<br />
66768F76D71647E7D39F8EDD714044CEA68F2A40106849132B01<br />
D14DDEB3FBA6FC1A9FBE9EA71BAB9293707A4EAD29CB6F3D&#8221;)</span></span></p>
<ul>
<li style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Exemplo em Delphi</span></span></li>
</ul>
<p><span style="color: #993300;"><span style="font-family: courier new,courier;">cArquivo := &#8216;C:\TESTE.TXT&#8217;;<br />
cDataInicial := &#8216;000100&#8242;;<br />
cDataFinal := &#8216;000200&#8242;;<br />
cTipo := &#8216;C&#8217;;<br />
cUsuario := &#8216;1&#8242;;<br />
cChavePublica := &#8216;A499F300F731F6892F44B83A5DD9D97CFFFD0ABE96E29B4B4B4E<br />
B2F9E5BCFFCF0A52EAFDF05779F90B3A199BE5776B13373CB2E7<br />
1D8AB67F4080CE27B226FFF032B6A7182C90C935EF2F4D343A74<br />
3B60307EE4961F0C5EB02B1CEEF48D647C02E9BE164DC404B833<br />
F80C5B4268C04039547E7D5E242537B02360674B569208BD&#8217;;<br />
cChavePrivada := &#8216;D19598300478932ACFFE16CB6903552F15FDBD2D3B9659FAD79C<br />
3603C07B875919E9D8B28919B8F4C20C6AE23268A636D1206F5E<br />
6BC79D89B6152804B15A9781C90E0A2D5064FB5B7CC01048AD8C<br />
66768F76D71647E7D39F8EDD714044CEA68F2A40106849132B01<br />
D14DDEB3FBA6FC1A9FBE9EA71BAB9293707A4EAD29CB6F3D&#8217;;</span></span></p>
<p><span style="color: #993300;"><span style="font-family: courier new,courier;">iRetorno := Bematech_FI_EspelhoMFD( pchar( cArquivo ), pchar( cDataInicial ), pchar( cDataFinal ), pchar( cTipo ), pchar( cUsuario ), pchar( cChavePublica ), pchar( cChavePrivada ) );</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">No exemplo acima, estamos gerando o espelho MFD dos cupons (COOs) &#8220;100&#8243; ao &#8220;200&#8243;. A função irá realizar um download da MFD compreendido entre estes cupons e gerar o &#8220;TESTE.TXT&#8221; em &#8220;C:\&#8221;, conforme informado, trazendo o espelho automaticamente.</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Vamos detalhar os parâmetros desta função:</span></span></p>
<table border="1" cellspacing="0" cellpadding="1" width="630">
<tbody>
<tr>
<td style="FONT-FAMILY: " width="107" valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">NomeArquivo:</span></span></td>
<td style="FONT-FAMILY: " width="523" valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING com o path + nome do arquivo txt a ser gerado, com o tamanho de até 512 caracteres.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">DadoInicial:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING com a data inicial no formato DD/MM/AAAA ou COO no formato &#8220;999999&#8243;.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">DadoFinal:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING com a data final no formato DD/MM/AAAA ou COO no formato &#8220;999999&#8243;.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">TipoDownload:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING indicando o tipo de download, onde:<br />
&#8220;D&#8221;: download por data.<br />
&#8220;C&#8221;: download por COO.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Usuario:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING contendo a identificação do usuário, com o tamanho de até 1 caracter.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">ChavePublica:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING com a chave pública para assinatura do arquivo, com 256 caracteres.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">ChavePrivada:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING com a chave privada para assinatura do arquivo, com 256 caracteres.</span></span></td>
</tr>
</tbody>
</table>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Repare também que informamos as chaves pública e privada para que a função já assine o arquivo texto gerado (registro EAD). Estas chaves podem ser criadas pela função genkkey da sign_bema.dll, conforme já apresentado na </span></span><a style="FONT-FAMILY: " href="http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-43-edicao-extra-sign_bemadll/" target="_blank"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">edição 43</span></span></a><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"> de nosso Flashtip.</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>Vale a dica:</em></strong> As chaves pública e privada são geradas apenas uma única vez e é exclusiva de software-house para software-house, independente de cliente, modelo e marca de ECF. Então, gere uma única vez estas chaves e use-as para assinar todos os arquivos necessários para o PAF-ECF. A sign_bema.dll pode ser utilizada para qualquer marca de ECF, pois a geração das chaves e a assinatura do arquivo são diretas através de funções, ou seja, não é necessário estar conectado ao ECF para assinar o arquivo.</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"> </span></span></p>
<p><strong><span style="font-size: medium;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Arquivo MFD</span></span></span></strong></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Sendo um dos itens presentes no Menu Fiscal, o Arquivo MFD possui como layout o &#8220;Ato Cotepe 17/04&#8243;, que é gerado também através de uma única função - a &#8220;<strong><em>Bematech_FI_ArquivoMFD</em></strong>&#8220;.</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">A função realiza o download da MFD do período informado e gera o arquivo no layout, assinando-o automaticamente.</span></span></p>
<ul>
<li style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Declaração em VB</span></span></li>
</ul>
<p><span style="color: #993300;"><span style="font-family: courier new,courier;">Public Declare Function Bematech_FI_ArquivoMFD Lib &#8220;BEMAFI32.DLL&#8221; ( ByVal cNomeArquivoOrigem As String, ByVal cDadoInicial As String, ByVal cDadoFinal As String, ByVal cTipoDownload As String, ByVal cUsuario As String, ByVal iTipoGeracao As Integer, ByVal cChavePublica As String, ByVal cChavePrivada As String, ByVal iUnicoArquivo As Integer ) As Integer</span></span></p>
<ul>
<li style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Declaração em Delphi</span></span></li>
</ul>
<p><span style="color: #993300;"><span style="font-family: courier new,courier;">function Bematech_FI_ArquivoMFD( cNomeArquivoOrigem: String; cDadoInicial: String; cDadoFinal: String; cTipoDownload: String; cUsuario: String; iTipoGeracao: integer; cChavePublica: String; cChavePrivada: String; iUnicoArquivo: integer ): Integer; StdCall; External&#8217;BEMAFI32.DLL&#8217;;</span></span></p>
<ul>
<li style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Exemplo em VB</span></span></li>
</ul>
<p><span style="color: #993300;"><span style="font-family: courier new,courier;">iRetorno = Bematech_FI_ArquivoMFD(&#8221;", _<br />
&#8220;01/08/2009&#8243;, _<br />
&#8220;31/08/2009&#8243;, _<br />
&#8220;D&#8221;, _<br />
&#8220;01&#8243;, _<br />
2, _<br />
&#8220;A499F300F731F6892F44B83A5DD9D97CFFFD0ABE96E29B4B4B4E<br />
B2F9E5BCFFCF0A52EAFDF05779F90B3A199BE5776B13373CB2E7<br />
1D8AB67F4080CE27B226FFF032B6A7182C90C935EF2F4D343A74<br />
3B60307EE4961F0C5EB02B1CEEF48D647C02E9BE164DC404B833<br />
F80C5B4268C04039547E7D5E242537B02360674B569208BD&#8221;, _<br />
&#8220;D19598300478932ACFFE16CB6903552F15FDBD2D3B9659FAD79C<br />
3603C07B875919E9D8B28919B8F4C20C6AE23268A636D1206F5E<br />
6BC79D89B6152804B15A9781C90E0A2D5064FB5B7CC01048AD8C<br />
66768F76D71647E7D39F8EDD714044CEA68F2A40106849132B01<br />
D14DDEB3FBA6FC1A9FBE9EA71BAB9293707A4EAD29CB6F3D&#8221;, _<br />
1)</span></span></p>
<ul>
<li style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Exemplo em Delphi</span></span></li>
</ul>
<p><span style="color: #993300;"><span style="font-family: courier new,courier;">cTipoDownload := &#8216;D&#8217;;<br />
cUsuario := &#8216;01&#8242;;<br />
iTipoGeracao := 2;<br />
cDadoInicial := &#8216;01/08/2009&#8242;;<br />
cDadoFinal := &#8216;31/08/2009&#8242;;<br />
cChavePublica := &#8216;A499F300F731F6892F44B83A5DD9D97CFFFD0ABE96E29B4B4B4E<br />
B2F9E5BCFFCF0A52EAFDF05779F90B3A199BE5776B13373CB2E7<br />
1D8AB67F4080CE27B226FFF032B6A7182C90C935EF2F4D343A74<br />
3B60307EE4961F0C5EB02B1CEEF48D647C02E9BE164DC404B833<br />
F80C5B4268C04039547E7D5E242537B02360674B569208BD&#8217;;<br />
cChavePrivada := &#8216;D19598300478932ACFFE16CB6903552F15FDBD2D3B9659FAD79C<br />
3603C07B875919E9D8B28919B8F4C20C6AE23268A636D1206F5E<br />
6BC79D89B6152804B15A9781C90E0A2D5064FB5B7CC01048AD8C<br />
66768F76D71647E7D39F8EDD714044CEA68F2A40106849132B01<br />
D14DDEB3FBA6FC1A9FBE9EA71BAB9293707A4EAD29CB6F3D&#8217;;<br />
iUnicoArquivo := 1;</span></span></p>
<p><span style="color: #993300;"><span style="font-family: courier new,courier;">iRetorno := Bematech_FI_ArquivoMFD( pchar( &#8221; ), pchar( cDadoInicial ), pchar( cDadoFinal ), pchar( cTipoDownload ), pchar( cUsuario ), iTipoGeracao, pchar( cChavePublica ), pchar( cChavePrivada ), iUnicoArquivo );</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Neste exemplo, pedimos para a função gerar o arquivo a partir da memória da impressora e por intervalo de datas, entre 01/08/2009 a 31/08/2009.</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Vamos detalhar os parâmetros desta função:</span></span></p>
<table border="1" cellspacing="0" cellpadding="1" width="630">
<tbody>
<tr>
<td style="FONT-FAMILY: " width="107" valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">ArquivoOrigem:</span></span></td>
<td style="FONT-FAMILY: " width="523" valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING com o path + nome do arquivo de origem, com o tamanho de até 512 caracteres, podendo ser NULL caso o parâmetro seja usado como opcional, sendo assim a dll usará como base a MFD da impressora.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">DadoInicial:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING com o dado inicial para o download da MFD. Para data no formato &#8220;DD/MM/AAAA&#8221; e para COO no formato &#8220;999999&#8243;.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">DadoFinal:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING com o dado final para o download da MFD. Para data no formato &#8220;DD/MM/AAAA&#8221; e para COO no formato &#8220;999999&#8243;.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">TipoDownload:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING indicando o tipo de download, onde: &#8220;D&#8221; é por Data e &#8220;C&#8221; é por COO.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Usuario:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING com o número do usuário, com até 2 caracteres.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">TipoGeracao:</span></span></td>
<td valign="top">
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">INTEGER indicando a parametrização a ser feita no arquivo, onde:<br />
0 = MF<br />
1 = MFD<br />
2 = TDM<br />
3 = RZ<br />
4 = RFD</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">ChavePublica:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING com a chave pública para assinatura do arquivo, com 256 caracteres.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">ChavePrivada:</span></span></td>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">STRING com a chave privada para assinatura do arquivo, com 256 caracteres.</span></span></td>
</tr>
<tr>
<td style="FONT-FAMILY: " valign="top"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">UnicoArquivo:</span></span></td>
<td valign="top">
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">INTEGER indicando se a geração do Arquivo MFD por intervalo de data, ficará em um único arquivo ou em múltiplos arquivos (arquivos diários), onde:<br />
1 = único arquivo<br />
0 = múltiplos arquivos</span></span></td>
</tr>
</tbody>
</table>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Repare no exemplo que o formato do arquivo será TDM que corresponde aos dados da MF (Memória Fiscal) e também da MFD (Memória de Fita-detalhe) da impressora. Além disso, temos as chaves pública e privada previamente criadas.</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Vimos como é simples implementar estas duas funcionalidades para o PAF-ECF. </span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Esperamos que este Flashtip tenha sido útil para o seu entendimento e para a integração destas funções em seu aplicativo PAF, e qualquer dúvida que surgir, estamos a disposição para esclarecê-la. Contate-nos pelo:</span></span></p>
<ul>
<li><a href="mailto:suporte@bematech.com.br"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte@bematech.com.br</span></span></a></li>
<li>
<div style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">0800 644 7277</span></span></div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://partners.bematech.com.br/bemacast/flashtip/2010/02/edicao-50-arquivo-mfd-e-espelho-mfd-novas-funcoes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Edição 49 - Programando o Horário de Verão</title>
		<link>http://partners.bematech.com.br/bemacast/flashtip/2009/10/edicao-49-programando-o-horario-de-verao/</link>
		<comments>http://partners.bematech.com.br/bemacast/flashtip/2009/10/edicao-49-programando-o-horario-de-verao/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 21:19:04 +0000</pubDate>
		<dc:creator>André Munhoz</dc:creator>
		
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://partners.bematech.com.br/bemacast/flashtip/?p=121</guid>
		<description><![CDATA[Caro parceiro,
Sua aplicação já está preparada para executar o comando de horário de verão nas ECFs Bematech?
Neste ano, segundo o Decreto nº 6.558 de 8 de setembro de 2008 publicado no Diário Oficial da União, a partir das 0:00h do dia 18 de outubro (próximo domingo), entrará em vigor o horário de verão no país [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Caro parceiro,</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Sua aplicação já está preparada para executar o comando de horário de verão nas ECFs Bematech?</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Neste ano, segundo o <a title="Horário de Verão" href="http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm" target="_blank">Decreto nº 6.558</a> de 8 de setembro de 2008 publicado no Diário Oficial da União, a partir das 0:00h do dia 18 de outubro (próximo domingo), entrará em vigor o horário de verão no país com duração até 21 de fevereiro de 2010 (válido para as regiões Sul, Sudeste e Centro-Oeste). Nesse período, não somente nossos relógios devem ser ajustados, como também os sistemas/softwares e as ECFs.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Então, preparamos nesta edição do Flash Tip, dicas de programação para ajudá-lo a ajustar o horário de verão nas impressoras fiscais Bematech.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">O ajuste do horário de verão nas ECFs Bematech deve ser realizado após a impressão da redução Z, ou seja, não pode haver qualquer movimento na impressora para que o comando seja executado com sucesso. A impressora irá imprimir uma mensagem informando que entrou no horário de verão.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><span style="font-size: medium;">BemaFI32.dll</span></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Para quem usa a BemaFI32.dll, a função que deve ser executada para programar na impressora o horário de verão é, simplesmente, Bematech_FI_ProgramaHorarioVerao().</span></span></p>
<ul>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">em VB 6</span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">iRetorno = Bematech_FI_ProgramaHorarioVerao()</span></span></span></span></p>
<ul>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">em Delphi</span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">iRetorno := Bematech_FI_ProgramaHorarioVerao();</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span><span style="font-family: trebuchet ms,geneva;"></span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: medium;"><strong>Bematech Flash Builder</strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Inclua a classe Bematech.Fiscal.ECF.Inicializacao no projeto e execute o método AjustarHorarioVerao.</span></span></p>
<ul>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">em VB .NET</span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">Imports Bematech.Fiscal.ECF.Inicializacao<br />
.<br />
.<br />
.<br />
&lt;objeto&gt;.BematechFiscal.Inicializacao.AjustarHorarioVerao()</span></span></span></span></p>
<ul>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">em C#</span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="color: #800000;"><span style="font-family: courier new,courier;">using Bematech.Fiscal.ECF.Inicializacao;<br />
.<br />
.<br />
.<br />
&lt;objeto&gt;.BematechFiscal.Inicializacao.AjustarHorarioVerao();</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><span style="font-size: medium;">Bematech MONITOR (WTS ou Citrix)</span></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Da mesma forma que na BemaFI32.dll, basta chamar a função Bematech_FI_ProgramaHorarioVerao().</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><span style="font-size: medium;">Bematech MONITOR local (via arquivo)</span></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Crie o arquivo BemaFI32.cmd com o comando &#8220;066|&#8221; e copie para o caminho onde o Bematech MONITOR está monitorando.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: medium;"><strong>Componente WEB BemaFisc</strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Basta chamar o método ProgramaHoraVerao do objeto WEB criado.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: medium;"><strong>Bemafi.exe (ambiente DOS) </strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Crie o arquivo Bemafi.cmd com o comando abaixo e execute o Bemafi.exe.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="color: #800000;"><span style="font-family: courier new,courier;">chr( 27 ) + chr( 251 ) + &#8220;18|&#8221; + chr( 27 )</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span><span style="font-family: trebuchet ms,geneva;"></span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: medium;"><strong>Protocolo de Comunicação Direto</strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Envie o comando ESC 18d (27d + 18d) ou ESC 12h (1Bh + 12h).</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><span style="font-size: medium;">LibBemaFiscal.so (Linux)</span></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Execute a função Bematech_FI_ProgramaHorarioVerao, da mesma forma que na BemaFI32.dll.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="color: #800000;"><span style="font-family: courier new,courier;">iRetorno = Bematech_FI_ProgramaHorarioVerao()</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span><span style="font-family: trebuchet ms,geneva;"></span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><span style="font-size: medium;">BemaFILX.out (executável Linux)</span></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Crie o arquivo BemaFILX.cmd com o comando abaixo e execute o BemaFILX.out.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><span style="color: #800000;"><span style="font-family: courier new,courier;">chr( 27 ) + &#8220;|18|&#8221; + chr( 27 )</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Qualquer dúvida que surgir, nossa equipe de suporte técnico está a disposição para esclarece-la. Você pode nos contatar pelo:</span></span></p>
<ul>
<li><a href="mailto:suporte@bematech.com.br"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte@bematech.com.br</span></span></a></li>
<li><a href="mailto:suporte.andre@bematech.com.br"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.andre@bematech.com.br</span></span></a><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"> (MSN e Email)</span></span></li>
<li><a href="mailto:suporte.iohannes@bematech.com.br"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.iohannes@bematech.com.br</span></span></a><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"> (MSN e Email) </span></span></li>
<li><a href="mailto:suporte.sidnei@bematech.com.br"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.sidnei@bematech.com.br</span></span></a><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"> (MSN e Email) </span></span></li>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.andre.luiz (SKYPE)</span></span></div>
</li>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.iohannes (SKYPE)</span></span></div>
</li>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">suporte.sidnei (SKYPE) </span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Ou ligue-nos no 0800 644 7277.</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://partners.bematech.com.br/bemacast/flashtip/2009/10/edicao-49-programando-o-horario-de-verao/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Edição 48 - Explorando a MFD nas impressoras fiscais Bematech</title>
		<link>http://partners.bematech.com.br/bemacast/flashtip/2009/10/edicao-47-explorando-a-mfd-nas-impressoras-fiscais-bematech/</link>
		<comments>http://partners.bematech.com.br/bemacast/flashtip/2009/10/edicao-47-explorando-a-mfd-nas-impressoras-fiscais-bematech/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 20:26:25 +0000</pubDate>
		<dc:creator>André Munhoz</dc:creator>
		
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://partners.bematech.com.br/bemacast/flashtip/?p=116</guid>
		<description><![CDATA[Caro parceiro,
Muitos nos questionam sobre a usabilidade das impressoras fiscais com tecnologia MFD, de como capturar um determinado cupom emitido há dias na impressora, sendo que neste modelo de impressora não há segunda via impressa, ou em atender as legislações vigentes de software aproveitando os recursos da impressora e etc.
Então, estamos preparando uma série de [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Caro parceiro,</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Muitos nos questionam sobre a usabilidade das impressoras fiscais com tecnologia MFD, de como capturar um determinado cupom emitido há dias na impressora, sendo que neste modelo de impressora não há segunda via impressa, ou em atender as legislações vigentes de software aproveitando os recursos da impressora e etc.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Então, estamos preparando uma série de Flash Tips, aonde iremos conhecer as principais vantagens e recursos de se utilizar uma impressora fiscal com tecnologia MFD da Bematech, e de como tudo isso pode nos ajudar em nosso dia a dia no desenvolvimento.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Vamos lá!</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: medium;"><strong>Recuperando cupons</strong></span></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Todos nós sabemos que as impressoras com MFD (Memória de Fita-Detalhe) não possuem segunda via, referente aos cupons, impressa (aquela cópia da primeira via que ficava rebobinada nas impressoras fiscais matriciais, lembra?). Com isso se tornou difícil conferir ou confrontar os cupons emitidos no dia com as informações armazenadas em banco, certo? Por exemplo, na RZ impressa no final do dia aparece um valor de cancelamento que não está no banco de dados, então você desenrolava a segunda via rebobinada e examinava cada cupom impresso para saber se ocorreu um erro no sistema ou se o &#8220;bendito&#8221; cancelamento foi realizado fora do sistema (não era mais ou menos isso que você fazia?). Isso sim, era um procedimento chato e demorado de fazer. <img src='http://partners.bematech.com.br/bemacast/flashtip/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Com a tecnologia MFD você consegue capturar facilmente um determinado cupom, o movimento do dia inteiro, do mês inteiro ou até mesmo todo o movimento contido na impressora desde quando ela foi colocada em produção.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Nas impressoras fiscais térmicas MFD Bematech todo este processo é muito simples, fácil e rápido, através da BemaFI32.dll Windows, utilitários em Linux ou via protocolo direto.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Vamos conhecer cada ferramenta e como utilizá-las na aplicação.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;"><strong>BemaFI32.dll</strong></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Através da dll de altonível BemaFI32.dll precisamos de apenas duas funções: a <em>Bematech_FI_DownloadMFD</em> para realizar o download da MFD e a <em>Bematech_FI_FormatoDadosMFD</em> para transformar o download em texto.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Veja como usá-las:</span></span></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">em VB 6</span></span></li>
</ul>
<p><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">(&#8230;)<br />
iRetorno = Bematech_FI_DownloadMFD(&#8221;C:\DOWNLOAD.MFD&#8221;, &#8220;2&#8243;, &#8220;000010&#8243;, &#8220;000100&#8243;, &#8220;1&#8243;)<br />
(&#8230;)</span></span></span></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">em Delphi</span></span></li>
</ul>
<p><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">(&#8230;)<br />
cArquivo      := &#8216;C:\DOWNLOAD.MFD&#8217;;<br />
cTipoDownload := &#8216;2&#8242;;<br />
cCOOInicial   := &#8216;000010&#8242;;<br />
cCOOFinal     := &#8216;000100&#8242;;<br />
cUsuario      := &#8216;1&#8242;;</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-size: small;">iRetorno := Bematech_FI_DownloadMFD( pchar( cArquivo ), pchar( cTipoDownload ), pchar( cCOOInicial ), pchar( cCOOFinal ), pchar( cUsuario ) );<br />
(&#8230;)</span></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Nestes exemplos, usamos como parâmetros: um nome de arquivo MFD, o tipo de download por COO, o COO inicial, o COO final e o número do usuário da impressora. Estamos fazendo um download do intervalo de cupons compreendido entre o cupom 10 e o cupom 100. Se precisássemos de apenas um cupom, bastaria informar o número dele no COO inicial e final.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Depois do download da MFD realizado, podemos facilmente convertê-lo para o formato texto e visualizar os documentos emitidos naquele intervalo, através da função <em>Bematech_FI_FormatoDadosMFD</em>, veja: </span></span></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">em VB 6</span></span></li>
</ul>
<p><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">(&#8230;)<br />
iRetorno = Bematech_FI_FormatoDadosMFD(&#8221;C:\DOWNLOAD.MFD&#8221;, &#8220;C:\IMAGEM.TXT&#8221;, &#8220;0&#8243;, &#8220;2&#8243;, &#8220;000010&#8243;, &#8220;000100&#8243;, &#8220;1&#8243;)<br />
(&#8230;)</span></span></span></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">em Delphi</span></span></li>
</ul>
<p><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">(&#8230;)<br />
cArquivoOrigem  := &#8216;C:\DOWNLOAD.MFD&#8217;;<br />
cArquivoDestino := &#8216;C:\IMAGEM.TXT&#8217;;<br />
cTipoFormato    := &#8216;0&#8242;;<br />
cTipoDownload   := &#8216;2&#8242;;<br />
cCOOInicial     := &#8216;000010&#8242;;<br />
cCOOFinal       := &#8216;000100&#8242;;<br />
cUsuario        := &#8216;1&#8242;;</span></span></span></p>
<p><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-size: small;">iRetorno := Bematech_FI_FormatoDadosMFD( pchar( cArquivoOrigem ), pchar( cArquivoDestino ), pchar( cTipoFormato ), pchar( cTipoDownload ), pchar( cCOOInicial ), pchar( cCOOFinal ), pchar( cUsuario ) );<br />
(&#8230;)</span></span></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Repare que os parâmetros são basicamente os mesmos usados na função de download da MFD, apenas com o acréscimo dos parâmetros &#8220;cArquivoDestino&#8221; e &#8220;cTipoFormato&#8221; que correspondem ao caminho+nome do arquivo de saída e o formato para texto, respectivamente.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Este procedimento de conversão é necessário, devido ao fato da MFD da impressora estar compactada e criptografada, assim assegurando os dados contidos nela.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">O fantástico de tudo isso, é que esta pequena rotina pode ser aplicada à geração do arquivo &#8220;Espelho MFD&#8221;, atendendo a um dos requisitos do PAF-ECF!</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;"><strong>LinuxMFD e BemaMFD / BemaMFD2</strong></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Em ambiente Linux, temos dois aplicativos que nos auxiliam no processo de download e conversão para texto da MFD da impressora.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Utilizando o LinuxMFD, fazemos o download da MFD da impressora, assim:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">./linuxmfd /dev/ttyS0 download.mfd 2 000010 000100 1</span></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">E, após ter capturada a MFD, podemos convertê-la para texto, assim:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">./bemamfd2 imagem.txt download.mfd 2 000010 000100 1</span></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">No aplicativo LinuxMFD, temos os seguintes parâmetros:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">a) Porta serial onde a impressora esta conectada. Ex: /dev/ttyS0<br />
b) Arquivo a ser gerado. Ex: download.mfd<br />
c) Tipo de download:<br />
    0 - download MFD total<br />
    1 - download MFD por data<br />
    2 - download MFD por COO<br />
    3 - download MF<br />
d) Parametro Inicial: Data inicial (DDMMAA) ou COO inicial (com ate 6 digitos).<br />
e) Parametro Final : Data final (DDMMAA) ou COO final (com ate 6 digitos).<br />
f) Número de ordem do proprietário do ECF com ate 3 digitos. (obrigatório se o tipo de download for por<br />
COO).</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">No aplicativo BemaMFD2, temos estes parâmetros:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">a) Nome do arquivo texto de saída.<br />
b) Nome do arquivo contendo o download da MFD da impressora.<br />
c) Tipo de processamento a ser feito:<br />
    0 - Total<br />
    1 - Por Datas<br />
    2 - Por COO<br />
    3 - AC17/04 - MF Total<br />
    4 - AC17/04 - MF Por Datas<br />
    5 - AC17/04 - MF Por COO<br />
    6 - AC17/04 - MFD Total<br />
    7 - AC17/04 - MFD Por Datas<br />
    8 - AC17/04 - MFD Por COO<br />
    9 - AC17/04 - TDM Total<br />
    10 - AC17/04 - TDM Por Datas<br />
    11 - AC17/04 - TDM Por COO<br />
d) Data (DDMMAA) ou COO inicial (máximo 6 dígitos).<br />
e) Data (DDMMAA) ou COO final (máximo 6 dígitos)<br />
f) Número de ordem do proprietário do ECF com ate 3 dígitos. (obrigatório se o tipo de download for por<br />
COO).</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Repare que podemos gerar também o &#8220;Arquivo MFD&#8221; no formato do Ato Cotepe 17/04 (MF, MFD ou TDM), conforme exigido no PAF-ECF.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;"><strong>Protocolo Direto</strong></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">A impressora fiscal térmica MFD Bematech possui também um comando para a geração do espelho MFD direto da impressora. Neste caso, não necessitamos realizar a captura da MFD para posteriormente efetuar a conversão para texto, o próprio comando já processa estas duas tarefas. Vamos ver como fica:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">O comando é 1Bh + 3Eh + 45h ou chr(27) + chr(62) + chr(69) para o formato decimal e seus parâmetros são:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Par1 no tamanho de 1 byte: &#8220;D&#8221;para intervalo de data ou qualquer outro caracter para intervalo de COO;</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Se o Par1 for &#8220;D&#8221;:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Par2 no tamanho de 2 bytes com o dia inicial;<br />
Par3 no tamanho de 2 bytes com o mês inicial;<br />
Par4 no tamanho de 2 bytes com o ano inicial;<br />
Par5 no tamanho de 2 bytes com o dia final;<br />
Par6 no tamanho de 2 bytes com o mês final e;<br />
Par7 no tamanho de 2 bytes com o ano final.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Se o Par1 for diferente de &#8220;D&#8221;:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Par2 no tamanho de 6 bytes com o COO inicial;<br />
Par3 no tamanho de 6 bytes com o COO final e;<br />
Par4 no tamanho de 3 bytes com o número do usuário.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">O retorno do espelho da MFD virá assim:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">3 ou 5 bytes com o status da impressora (ACK, ST1, ST2 e ST3 (dois bytes)), seguidos da imagem dos documentos no formato ASCII e terminando com ETX (03h). Neste caso, a dica é ficar em um loop até que receba o byte ETX que corresponde ao final da transmissão, tendo assim todos os documentos emitidos no intervalo solicitado.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;"><strong><span style="font-size: medium;">Sintegra a partir da MFD</span></strong></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Outro recurso interessante, é a geração dos registros do Sintegra diretamente da MFD da impressora. Através de uma única função da BemaFI32.dll, é possível gerar os registros do Sintegra pertinentes ao ECF, como os registros 60M (Mestre), 60A (Analítico), 60D (Diário), 60I (Item), 60R (Resumo Mensal) e 75, além dos registros 10, 11 e 90. Basicamente, o Sintegra completo!</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Vejamos a simplicidade que é:</span></span></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">em VB 6</span></span></li>
</ul>
<p><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">(&#8230;)<br />
iRetorno = Bematech_FI_RelatorioSintegraMFD(63, &#8220;SINTEGRA.TXT&#8221;, &#8220;10&#8243;, &#8220;2009&#8243;, &#8220;Empresa S/A&#8221;, &#8220;Rua Sem Nome&#8221;, &#8220;123&#8243;, &#8220;Complemento&#8221;, &#8220;Bairro&#8221;, &#8220;Cidade&#8221;, &#8220;12345678&#8243;, &#8220;99 9999-9999&#8243;, &#8220;11 1111-1111&#8243;, &#8220;Fulano de Tal&#8221; )<br />
(&#8230;)</span></span></span></p>
<ul>
<li><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">em Delphi</span></span></li>
</ul>
<p><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">(&#8230;)<br />
cArquivo     := &#8216;SINTEGRA.TXT&#8217;;<br />
cMes         := &#8216;10&#8242;;<br />
cAno         := &#8216;2009&#8242;;<br />
cRazaoSocial := &#8216;Empresa S/A&#8217;;<br />
cEndereco    := &#8216;Rua Sem Nome&#8217;;<br />
cNumero      := &#8216;123&#8242;;<br />
cComplemento := &#8216;Complemento&#8217;;<br />
cBairro      := &#8216;Bairro&#8217;;<br />
cCidade      := &#8216;Cidade&#8217;;<br />
cCEP         := &#8216;12345678&#8242;;<br />
cTelefone    := &#8216;99 9999-9999&#8242;;<br />
cFax         := &#8216;11 1111-1111&#8242;;<br />
cContato     := &#8216;Fulano de Tal&#8217;;</span></span></span></p>
<p><span style="font-size: small;"><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-size: small;">iRetorno := Bematech_FI_RelatorioSintegraMFD( 63, pchar( cArquivo ), pchar( cMes ), pchar( cAno ), pchar( cRazaoSocial ), pchar( cEndereco ), pchar( cNumero ), pchar( cComplemento ), pchar( cBairro ), pchar( cCidade ), pchar( cCEP ), pchar( cTelefone ), pchar( cFax ), pchar( cContato ) );<br />
(&#8230;)</span></span></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">E, os parâmetros que temos, são:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Par1 no tamanho de 1 byte com a somatória dos registros que se deseja gerar, onde: <br />
    1: gera o relatório tipo 60M (Mestre);<br />
    2: gera o relatório tipo 60A (Analítico);<br />
    4: gera o relatório tipo 60D (Diário);<br />
    8: gera o relatório tipo 60I (Item);<br />
    16: gera o relatório tipo 60R (Resumo Mensal) e;<br />
    32: gera o relatório tipo 75.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Exemplo: Se desejarmos gerar somente os registros tipo 60M, 60A e 75, o Par1 deve possuir o valor 35.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Par2 com o caminho+nome do arquivo de destino no formato TXT. Exemplo: &#8220;C:\SINTEGRA.TXT&#8221;;<br />
Par3 no tamanho de 2 bytes com o mês, no formato &#8220;MM&#8221;;<br />
Par4 no tamanho de 4 bytes com o ano, no formato &#8220;AAAA&#8221;;<br />
Par5 no tamanho de 35 bytes com a razão social do cliente;<br />
Par6 no tamanho de 34 bytes com o endereço do cliente;<br />
Par7 no tamanho de 5 bytes com o número do endereço do cliente;<br />
Par8 no tamanho de 22 bytes com o complemento;<br />
Par9 no tamanho de 15 bytes com o bairro;<br />
Par10 no tamanho de 30 bytes com a cidade;<br />
Par11 no tamanho de 8 bytes com o CEP;<br />
Par12 no tamanho de 12 bytes com o telefone;<br />
Par13 no tamanho de 10 bytes com o número do FAX e;<br />
Par14 no tamanho de 18 bytes com o nome de contato do cliente.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Abaixo temos a imagem de um arquivo do Sintegra gerado pela função <em>Bematech_FI_RelatorioSintegraMFD</em>:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;"><img title="sintegra" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/sintegra.JPG" alt="sintegra" width="618" height="430" /></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;"><strong>Próxima edição:</strong></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Esperamos que este primeiro Flash Tip da série &#8220;Explorando a MFD nas impressoras fiscais Bematech&#8221; tenha sido útil e esclarecedor. Caso você tenha alguma sugestão de tema, envie-nos pelo email <a href="mailto:partners@bematech.com.br">partners@bematech.com.br</a>. </span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Continuaremos explorando os recursos da MFD na próxima edição desta série. </span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;"><strong>Não perca!</strong></span></span></p>
<p><span style="font-size: small;"><span style="font-family: trebuchet ms,geneva;">Até lá e boas implementações!</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://partners.bematech.com.br/bemacast/flashtip/2009/10/edicao-47-explorando-a-mfd-nas-impressoras-fiscais-bematech/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Edição 47 - Acessando Periféricos - Leitor de Código de Barras</title>
		<link>http://partners.bematech.com.br/bemacast/flashtip/2009/08/edicao-47-acessando-perifericos-leitor-de-codigo-de-barras/</link>
		<comments>http://partners.bematech.com.br/bemacast/flashtip/2009/08/edicao-47-acessando-perifericos-leitor-de-codigo-de-barras/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 18:22:29 +0000</pubDate>
		<dc:creator>André Munhoz</dc:creator>
		
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://partners.bematech.com.br/bemacast/flashtip/?p=112</guid>
		<description><![CDATA[Caro parceiro,
Na edição anterior de nosso Flash Tip, vimos como realizar a comunicação do microterminal utilizando uma impressora não fiscal, na qual emitimos algumas linhas de texto através da porta serial COM1. Vimos também como enviar mensagens ao display do cliente (Customer Display), através da porta serial COM2, usando as bibliotecas &#60;NFPrint.h&#62; e &#60;CDisplay.h&#62;, respectivamente.
Nesta [...]]]></description>
			<content:encoded><![CDATA[<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Caro parceiro,</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Na edição anterior de nosso Flash Tip, vimos como realizar a comunicação do microterminal utilizando uma impressora não fiscal, na qual emitimos algumas linhas de texto através da porta serial COM1. Vimos também como enviar mensagens ao display do cliente (Customer Display), através da porta serial COM2, usando as bibliotecas &lt;NFPrint.h&gt; e &lt;CDisplay.h&gt;, respectivamente.</span></span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Nesta edição, faremos um pequeno complemento da edição anterior. O objetivo será mostrar a captura do código de barras através do leitor, utilizando a biblioteca &lt;Barcode.h&gt;.</span></span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Então, vamos lá!</span></span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><strong><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Configurando o projeto</span></span></em></strong></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Antes de iniciarmos nosso exemplo, devemos inserir em nosso projeto a biblioteca que irá interpretar as funções do leitor de código de barras. Então, basta inserirmos no início do nosso código a biblioteca #include &lt;Barcode.h&gt;. Precisamos também entrar nas propriedades do projeto e inserimos o vinculo aos recursos da &lt;Barcode.h&gt; - BarcodeReader, conforme sequência ilustrada abaixo:</span></span></span></span></p>
<p style="TEXT-ALIGN: center"><img title="img_prop" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/img_prop.jpg" alt="img_prop" width="273" height="115" /></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">A janela abaixo, está dividida em três colunas, na primeira coluna selecionamos a opção: C/C++ Build, na coluna do meio clicamos duas vezes sobre a opção: libraries, em seguida clicamos na opção: Add da terceira coluna. </span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Em seguida será exibida uma nova janela para inserção da biblioteca BarcodeReader, simplesmente digitamos na lacuna (conforme ilustrado) e pressione OK nas janelas para confirmar a alteração.</span></span></span></span></p>
<p style="FONT-FAMILY: ; TEXT-ALIGN: center"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><img title="fig_barcode" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/fig_barcode.jpg" alt="fig_barcode" width="596" height="395" /></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"></span></p>
<p style="FONT-FAMILY: "><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Não podemos esquecer que, para este nosso exemplo, também precisamos inserir a biblioteca para Display do Usuário e a biblioteca Allegro, que irá habilitar os recursos do teclado. Para o uso destas bibliotecas, basta inserirmos no início do nosso código os respectivos includes: #include &lt;UDisplay.h&gt; e #include &lt;allegro.h&gt;.</span></span> </p>
<p style="FONT-FAMILY: ; TEXT-ALIGN: center"><img title="fig_proj" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/fig_proj.JPG" alt="fig_proj" width="561" height="328" /></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Após as configurações do projeto, basta copiarmos e colarmos o código abaixo, sendo que temos comentários dentro do código para um melhor entendimento.</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;">#include &lt;allegro.h&gt;<br />
#include &lt;UDisplay.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;Barcode.h&gt;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;">int main(void)<br />
{</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;">  /* instrução necessário para inicializar o a biblioteca allegro */<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>if (allegro_init() != 0)<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span>return 1;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>/* Instala o teclado */<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>install_keyboard();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>// Inicializar o display do usuario<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>UserDisplayInit();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>// Limpa o display do usario <br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>UserDisplayClearAll();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>if (keypressed())<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span>readkey(); // Flush</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>// string usada para armazenar o código de barras, máximo 19 caracteres.<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>char codeBuffer[20];</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>// Atribui 0 para variável bclength <br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>size_t bclength = 0;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>// Realiza a abertura da porta de comunicação.<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>if (BarcodeConfig(&#8221;SERIAL1&#8243;) != BS_SUCCESS) <br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span>return EXIT_FAILURE;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>// inicializa funções do código de barras <br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>BarcodeInit();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>// Resumes the Barcode Reader<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>// NOTE: BarcodeInit() must be called before doing this<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>BarcodeResume();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>while (1)<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>{<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span>UserDisplayClearAll();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span>UserDisplayPrint(1, 1, &#8220;Leia o produto:&#8221;);<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span>UserDisplayPrint(2, 1, &#8220;Cod:&#8221;);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span>// Início do Do While, irá sempre monitor código oriundo da porta serial<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span>do<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span>{<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span>// Captura informação da serial - Código que será lido<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span>memset(codeBuffer,0,sizeof(codeBuffer));<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span>BarcodeGetCode(codeBuffer, 20,5, &amp;bclength);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span>// Irá entrar no if se o valor de codeBuffer for maior que 0 <br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span>if (strlen(codeBuffer) &gt; 0)<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span>{ <br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span></span></span>// motra código na tela<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span></span></span>UserDisplayPrint(2, 6, codeBuffer);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span></span></span>// inicializa bclength para que loop continue infinito<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span></span></span>bclength=strlen(codeBuffer);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span></span></span>// Pausa na impressão <br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span></span></span>readkey();<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span></span></span></span></span>UserDisplayClearAll();<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span><span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>}<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span>}<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  <span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span></span></span>while (bclength == 0);<br />
<span style="font-family: courier new,courier;"><span style="color: #800000;">  </span></span>}<br />
}</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Após a compilação de nosso código, e o projeto devidamente alocado no microterminal, teremos o resultado como o exemplo abaixo:</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #0000ff;">Leia o produto:<br />
Cod:</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Na prática, ao passar o produto no leitor de código de barras, automaticamente será apresentado no visor do microterminal o código lido, exemplo:</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #0000ff;">Leia o produto:<br />
Cod:7898907590112</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">E, ao pressionarmos &lt;ENTER&gt; no microterminal, teremos as informações do display remontadas aguardando nova leitura de produto, e assim, sucessivamente.</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Com isso, finalizamos mais uma edição de nosso Flash Tip, com dicas que irão lhe auxiliar nas rotinas de leitura de código de barras no microterminal FIT Integra Bematech.</span></span></p>
<p style="FONT-FAMILY: "><strong><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Próxima edição:</span></span></strong></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Na próxima edição, finalizamos nossa sequência de Flash Tips sobre o FIT Integra, acessando o microterminal remotamente.</span></span></p>
<p style="FONT-FAMILY: "><strong><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Não perca!</span></span></strong></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;">Até lá e boas implementações!</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://partners.bematech.com.br/bemacast/flashtip/2009/08/edicao-47-acessando-perifericos-leitor-de-codigo-de-barras/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Edição 46 - Arquivo MFD, Espelho MFD e Ato Cotepe 17/04 por COO e Data</title>
		<link>http://partners.bematech.com.br/bemacast/flashtip/2009/07/edicao-46-arquivo-mfd-espelho-mfd-e-ato-cotepe-1704-por-coo-e-data/</link>
		<comments>http://partners.bematech.com.br/bemacast/flashtip/2009/07/edicao-46-arquivo-mfd-espelho-mfd-e-ato-cotepe-1704-por-coo-e-data/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 14:51:27 +0000</pubDate>
		<dc:creator>André Munhoz</dc:creator>
		
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://partners.bematech.com.br/bemacast/flashtip/?p=108</guid>
		<description><![CDATA[Caro parceiro,
Se você está preparando sua aplicação para homologar o PAF-ECF, já deve ter se deparado com o &#8220;Requisito VII&#8221; do Roteiro de Análise Funcional, mais especificamente os itens 5 e 6, onde tratam da geração do espelho MFD por intervalo de COO e data, e geração do Ato Cotepe 17/04 com base no arquivo [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: trebuchet ms,geneva;">Caro parceiro,</span></p>
<p><span style="font-family: trebuchet ms,geneva;">Se você está preparando sua aplicação para homologar o PAF-ECF, já deve ter se deparado com o &#8220;Requisito VII&#8221; do Roteiro de Análise Funcional, mais especificamente os itens 5 e 6, onde tratam da geração do espelho MFD por intervalo de COO e data, e geração do Ato Cotepe 17/04 com base no arquivo MFD também por intervalo de COO e data, respectivamente.</span></p>
<p><span style="font-family: trebuchet ms,geneva;">Reprodução dos itens 5 e 6:</span></p>
<p><span style="font-family: trebuchet ms,geneva;"><em><strong>ITEM 5:</strong> “Espelho MFD”, para gerar arquivo eletrônico da Memória de Fita Detalhe, no formato de “espelho” dos documentos nela contidos, com possibilidade de seleção por período de data e por intervalo de COO, devendo assiná-lo digitalmente inserindo ao final do arquivo uma linha com o registro tipo EAD&#8230;</em></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><em><strong>ITEM 6:</strong> “Arq. MFD” para gerar arquivo eletrônico da Memória de Fita Detalhe conforme leiaute estabelecido no Ato COTEPE/ICMS 17/04 com possibilidade de seleção por período de data e por intervalo de COO, devendo assiná-lo digitalmente inserindo ao final do arquivo uma linha com o registro tipo EAD&#8230;</em></span></p>
<p><span style="font-family: trebuchet ms,geneva;">Então, o objetivo deste Flash Tip é orientá-lo a como atender estes dois itens, com dicas de programação usando nossa dll de alto-nível BemaFI32.dll, e também as BemaMFD.dll e BemaMFD2.dll na geração do Ato Cotepe 17/04.</span></p>
<p><span style="font-family: trebuchet ms,geneva;">Vamos lá!</span></p>
<p><span style="font-family: trebuchet ms,geneva;"><strong><em>- ITEM 5:</em></strong></span></p>
<p><span style="font-family: trebuchet ms,geneva;">O espelho MFD nada mais é do que a imagem, na íntegra, dos cupons emitidos no ECF. Para atender este item, devemos usar simplesmente duas funções encontrada na BemaFI32.dll: </span></p>
<ol>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><strong>Bematech_FI_DownloadMFD</strong>. Função que faz a captura da memória de fita-detalhe (MFD) da impressora e;</span></div>
</li>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><strong>Bematech_FI_FormatoDadosMFD</strong>. Função que formata a MFD para arquivo texto.</span></div>
</li>
</ol>
<p><span style="font-family: trebuchet ms,geneva;">A função <strong>Bematech_FI_DownloadMFD</strong> possui os seguintes parâmetros:</span></p>
<table style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;" border="1" cellspacing="0" cellpadding="4" width="100%">
<tbody>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par1:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o caminho + nome do<br />
arquivo de saída que será criado com o conteúdo da MFD da impressora. Exemplo: &#8220;C:\DOWNLOAD.MFD&#8221;.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par2:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o tipo do download da MFD, onde:<br />
&#8220;0&#8243; (zero) para download total da MFD da impressora;<br />
&#8220;1&#8243; (um) para download por intervalo de data ou;<br />
&#8220;2&#8243; (dois) para download por intervalo de COO.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par3:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com a data inicial ou o COO inicial, no formato &#8220;DDMMAA&#8221; ou &#8220;DDMMAAAA&#8221; para a data, ou COO<br />
com no máximo 6 dígitos (formato &#8220;999999&#8243;).</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par4:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com a data final ou o COO final, no formato &#8220;DDMMAA&#8221; ou &#8220;DDMMAAAA&#8221; para a data, ou COO com no máximo 6 dígitos (formato &#8220;999999&#8243;).</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par5:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o número do usuário proprietário do ECF, no tamanho de 1 dígito.</span></span></td>
</tr>
</tbody>
</table>
<p><span style="font-family: trebuchet ms,geneva;"><strong><em>Importante:</em></strong> Se o tipo do download for &#8220;Total&#8221;, não será necessário informar os parâmetros par3, par4 e par5. Neste caso, estes parâmetros são informados com string nula.</span></p>
<ul>
<li><span style="font-family: trebuchet ms,geneva;">Em <em>VB</em>, temos esta função implementada assim:</span></li>
</ul>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;">iRetorno = Bematech_FI_DownloadMFD(&#8221;C:\DOWNLOAD.MFD&#8221;, &#8220;2&#8243;, &#8220;000500&#8243;, &#8220;001000&#8243;, &#8220;1&#8243;)</span></span></p>
<ul>
<li><span style="font-family: trebuchet ms,geneva;">Em <em>Delphi</em>, temos esta função implementada assim:</span></li>
</ul>
<p><span style="color: #800000;"><span style="font-family: courier new,courier;">cArquivo := &#8216;C:\DOWNLOAD.MFD&#8217;;<br />
cTipoDownload := &#8216;2&#8242;;<br />
cCOOInicial := &#8216;000500&#8242;;<br />
cCOOFinal := &#8216;001000&#8242;;<br />
cUsuario := &#8216;1&#8242;;</span></span></p>
<p><span style="color: #800000;"><span style="font-family: courier new,courier;">iRetorno := Bematech_FI_DownloadMFD( pchar( cArquivo ), pchar( cTipoDownload ), pchar( cCOOInicial ), pchar( cCOOFinal ), pchar( cUsuario ) );</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;">Neste exemplo, estamos fazendo um download da MFD da impressora por intervalo de COO do &#8220;000500&#8243; ao &#8220;001000&#8243; e para o usuário &#8220;1&#8243;.</span></p>
<p><span style="font-family: trebuchet ms,geneva;">A função <strong>Bematech_FI_FormatoDadosMFD</strong> possui os seguintes parâmetros:</span></p>
<table style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;" border="1" cellspacing="0" cellpadding="4" width="100%">
<tbody>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par1:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o caminho + nome do arquivo de origem contendo o download da MFD da impressora. Exemplo: &#8220;C:\DOWNLOAD.MFD&#8221;.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par2:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o caminho + nome do arquivo de saída que será criado com o conteúdo convertido da MFD<br />
da impressora. Exemplo: &#8220;C:\ESPELHO.TXT&#8221;.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par3:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o tipo do formato de conversão da MFD, onde:<br />
&#8220;0&#8243; (zero) para formato .TXT (é criado um arquivo TXT com a imagem dos cupons referentes ao movimento);<br />
&#8220;1&#8243; (um) para formato .RTF (é criado um arquivo RTF com a imagem dos cupons referentes ao movimento) ou;<br />
&#8220;2&#8243; (dois) para formato .MDB (é criado um arquivo MDB com tabelas referentes ao movimento)</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par4:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o tipo do download da MFD, onde:<br />
&#8220;0&#8243; (zero) para download total da MFD da impressora;<br />
&#8220;1&#8243; (um) para download por intervalo de data ou;<br />
&#8220;2&#8243; (dois) para download por intervalo de COO.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par5:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com a data inicial ou o COO inicial, no formato &#8220;DDMMAA&#8221; ou &#8220;DDMMAAAA&#8221; para a data, ou COO<br />
com no máximo 6 dígitos (formato &#8220;999999&#8243;).</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par6:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com a data final ou o COO final, no formato &#8220;DDMMAA&#8221; ou &#8220;DDMMAAAA&#8221; para a data, ou COO com no máximo 6 dígitos (formato &#8220;999999&#8243;).</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par7:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o número do usuário proprietário do ECF, no tamanho de 1 dígito.</span></span></td>
</tr>
</tbody>
</table>
<p><span style="font-family: trebuchet ms,geneva;"><em><strong>Importante:</strong></em> Se o tipo do download for &#8220;Total&#8221;, não será necessário informar os parâmetros par5, par6 e par7. Neste caso, estes parâmetros são informados com string nula.</span></p>
<ul>
<li><span style="font-family: trebuchet ms,geneva;">Em <em>VB</em>, temos esta função implementada assim:</span></li>
</ul>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;">iRetorno = Bematech_FI_FormatoDadosMFD(&#8221;C:\DOWNLOAD.MFD&#8221;, &#8220;C:\ESPELHO.TXT&#8221;, &#8220;0&#8243;, &#8220;2&#8243;, &#8220;000500&#8243;, &#8220;001000&#8243;, &#8220;1&#8243;)</span></span></p>
<ul>
<li><span style="font-family: trebuchet ms,geneva;">Em <em>Delphi</em>, temos esta função implementada assim:</span></li>
</ul>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;">cArquivoOrigem := &#8216;C:\DOWNLOAD.MFD&#8217;;<br />
cArquivoDestino := &#8216;C:\ESPELHO.TXT&#8217;;<br />
cTipoFormato := &#8216;0&#8242;;<br />
cTipoDownload := &#8216;2&#8242;;<br />
cCOOInicial := &#8216;000500&#8242;;<br />
cCOOFinal := &#8216;001000&#8242;;<br />
cUsuario := &#8216;1&#8242;;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #800000;">iRetorno := Bematech_FI_FormatoDadosMFD( pchar( cArquivoOrigem ), pchar( cArquivoDestino ), pchar( cTipoFormato ), pchar( cTipoDownload ), pchar( cCOOInicial ), pchar( cCOOFinal ), pchar( cUsuario ) );</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;">Neste exemplo, estamos gerando um espelho em texto da MFD da impressora por intervalo de COO do &#8220;000500&#8243; ao &#8220;001000&#8243; e para o usuário &#8220;1&#8243;.</span></p>
<p><span style="font-family: trebuchet ms,geneva;">Assim, atendemos o item 5 do requisito VII do PAF-ECF.</span></p>
<p><strong><em><span style="font-family: trebuchet ms,geneva;">- ITEM 6:</span></em></strong></p>
<p><span style="font-family: trebuchet ms,geneva;">Este item pede para gerar o arquivo de download da MFD no formato do Ato Cotepe 17/04, o mesmo exigido para a Nota Fiscal Paulista, porém assinado (registro EAD). Para isso, precisamos também de apenas duas funções:</span></p>
<ol>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><strong>Bematech_FI_DownloadMFD</strong> (função já vista anteriormente). Usaremos esta função para fazer a captura da MFD da impressora, pois iremos passar no primeiro parâmetro da função abaixo, o arquivo .mfd previamente gerado e;</span></div>
</li>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><strong>BemaGeraRegistrosTipoE</strong>. Função encontrada na BemaMFD.dll e BemaMFD2.dll para geração dos registros tipo E pertencentes ao layout do Ato Cotepe 17/04.</span></div>
</li>
</ol>
<p><span style="font-family: trebuchet ms,geneva;">A função <strong>BemaGeraRegistrosTipoE</strong> possui os seguintes parâmetros:</span></p>
<table style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;" border="1" cellspacing="0" cellpadding="4" width="100%">
<tbody>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par1:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o caminho + nome do arquivo de origem contendo o download da MFD da impressora. Exemplo: &#8220;C:\DOWNLOAD.MFD&#8221;.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par2:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o caminho + nome do arquivo de saída que será criado com o conteúdo convertido da MFD<br />
da impressora. Exemplo: &#8220;C:\COTEPE1704.TXT&#8221;.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par3:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com a data inicial, no formato &#8220;DDMMAAAA&#8221;.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par4:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com a data final, no formato &#8220;DDMMAAAA&#8221;.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par5:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com a razão social do estabelecimento proprietário do ECF.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par6:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o endereço do estabelecimento proprietário do ECF.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par7:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par8:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String com o comando de geração dos registros, fixo em &#8220;2&#8243;.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par9:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par10:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par11:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par12:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par13:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par14:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par15:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par16:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par17:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par18:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par19:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par20:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
<tr>
<td width="8%"><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">par21:</span></span></em></td>
<td width="92%"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">String nula.</span></span></td>
</tr>
</tbody>
</table>
<ul>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Em <em>VB</em>, temos esta função implementada assim:</span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">cArqMFD = &#8220;C:\DOWNLOAD.MFD&#8221;<br />
cArqTXT = &#8220;C:\COTEPE1704.TXT&#8221;<br />
cRazao = &#8220;Bematech S/A&#8221;<br />
cEndereco = &#8220;Rua ABCDEF, 1234&#8243;<br />
cCMD = &#8220;2&#8243;<br />
cDataIni = &#8220;01062009&#8243; &#8216; DDMMAAAA<br />
cDataFim = &#8220;30062009&#8243; &#8216; DDMMAAAA</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">iRetorno = BemaGeraRegistrosTipoE(cArqMFD, cArqTXT, cDataIni, cDataFim, cRazao, cEndereco, &#8220;&#8221;, cCMD, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;)</span></span></span></span></p>
<ul>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Em <em>Delphi</em>, temos esta função implementada assim:</span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">cArqMFD := &#8216;C:\DOWNLOAD.MFD&#8217;;<br />
cArqTXT := &#8216;C:\COTEPE1704.TXT&#8217;;<br />
cRazao := &#8216;Bematech S/A&#8217;;<br />
cEndereco := &#8216;Rua ABCDEF, 1234&#8242;;<br />
cCMD := &#8216;2&#8242;;<br />
cDataIni := 01062009; // DDMMAAAA<br />
cDataFim := 30062009; // DDMMAAAA</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">iRetorno := BemaGeraRegistrosTipoE(pchar(cArqMFD), pchar(cArqTXT), pchar(cDataIni), pchar(cDataFim), pchar(cRazao), pchar(cEndereco), &#8221;, pchar(cCMD), &#8221;, &#8221;, &#8221;, &#8221;, &#8221;, &#8221;, &#8221;, &#8221;, &#8221;, &#8221;, &#8221;, &#8221;, &#8221;);</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><strong><em>Importante:</em></strong></span></span></p>
<ul>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Para os modelos de impressoras fiscais MP-2000 TH FI e MP-6000 TH FI, a função BemaGeraRegistrosTipoE deve ser chamada da BemaMFD.dll. </span></span></span></span></div>
</li>
<li>
<div><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Para os modelos de impressoras fiscais MP-2100 TH FI, MP-3000 TH FI, MP-4000 TH FI, MP-6100 TH FI e MP-7000 TH FI, a função BemaGeraRegistrosTipoE deve ser chamada da BemaMFD2.dll. </span></span></span></span></div>
</li>
</ul>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">No exemplo acima, temos a geração do Ato Cotepe 17/04 por intervalo de datas. Podemos também realizar esta geração por intervalo de COOs. Para isso, temos dois exemplos prontos disponíveis para baixar através dos links:</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">- em <em>VB</em>: </span></span></span></span><a href="http://www.bematech.com.br/suporte/downloads/fisc_win/RegistrosTipoE_VB.zip"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">http://www.bematech.com.br/suporte/downloads/fisc_win/RegistrosTipoE_VB.zip</span></span></span></span></a></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">- em <em>Delphi</em>: </span></span></span></span><a href="http://www.bematech.com.br/suporte/downloads/fisc_win/RegistrosTipoE_Delphi.zip"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">http://www.bematech.com.br/suporte/downloads/fisc_win/RegistrosTipoE_Delphi.zip</span></span></span></span></a></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Assim, atendemos o item 6 do requisito VII do PAF-ECF.</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Além disso, não podemos esquecer que tanto o arquivo contendo o espelho da MFD quanto o arquivo do Ato Cotepe 17/04 devem ser assinados (registro EAD). Sendo assim, podemos usar facilmente a </span></span><a href="http://partners.bematech.com.br/bemacast/flashnews/2009/06/edicao-128-nova-dll-para-assinatura-digital-registro-ead/" target="_blank"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">sign_bema.dll</span></span></a><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">.</span></span></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Maiores detalhes sobre estas funções, podemos consultar no </span></span><a href="http://www.bematech.com.br/suporte/Bemafi32/index.html" target="_blank"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">help on-line</span></span></a><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"> da BemaFI32.dll, disponível na WEB.</span></span></span></span></p>
<p><strong><em><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Boas implementações!</span></span></em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://partners.bematech.com.br/bemacast/flashtip/2009/07/edicao-46-arquivo-mfd-espelho-mfd-e-ato-cotepe-1704-por-coo-e-data/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Edição 45 - Acessando periféricos</title>
		<link>http://partners.bematech.com.br/bemacast/flashtip/2009/07/edicao-45-acessando-perifericos/</link>
		<comments>http://partners.bematech.com.br/bemacast/flashtip/2009/07/edicao-45-acessando-perifericos/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 18:50:26 +0000</pubDate>
		<dc:creator>André Munhoz</dc:creator>
		
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://partners.bematech.com.br/bemacast/flashtip/?p=106</guid>
		<description><![CDATA[Caro parceiro,
Na edição 44 de nosso Flash Tip, criamos um exemplo simples que nos possibilitou realizar uma interação entre usuário e microterminal. Na ocasião, usamos o switch/case para montagem do menu de opções e a função readkey() que permitiu a captura do teclado.
Nesta edição, iremos utilizar o microterminal no acesso a periféricos. Vamos usar as [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: trebuchet ms,geneva;">Caro parceiro,</span></p>
<p><span style="font-family: trebuchet ms,geneva;">Na <a href="http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-44-usando-funcoes-de-display/" target="_blank">edição 44</a> de nosso Flash Tip, criamos um exemplo simples que nos possibilitou realizar uma interação entre usuário e microterminal. Na ocasião, usamos o <em>switch/case</em> para montagem do menu de opções e a função readkey() que permitiu a captura do teclado.</span></p>
<p><span style="font-family: trebuchet ms,geneva;">Nesta edição, iremos utilizar o microterminal no acesso a periféricos. Vamos usar as bibliotecas <em>&lt;NFPrint.h&gt;</em> para acessar a impressora não fiscal e <em>&lt;CDisplay.h&gt;</em> para acessar o display do cliente (Customar Display).</span></p>
<p><span style="font-family: trebuchet ms,geneva;">Lembrando que estamos dando continuidade ao desenvolvimento para o microterminal FIT Integra. Caso tenha perdido alguma edição anterior do Flash Tip, basta consultá-la em nosso Bemacast a partir do link:</span></p>
<p style="text-align: center;"><a href="http://partners.bematech.com.br/bemacast/flashtip/"><span style="font-family: trebuchet ms,geneva;">http://partners.bematech.com.br/bemacast/flashtip/</span></a></p>
<p><span style="font-family: trebuchet ms,geneva;">Então, vamos lá!</span></p>
<p><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>Configurações iniciais</em></strong></span></span></p>
<p><span style="font-family: trebuchet ms,geneva;">Antes de iniciarmos nosso exemplo de acesso aos periféricos, devemos inserir em nosso projeto a biblioteca <em>&lt;NFPrint.h&gt;</em> responsável pelas funções de operação com a impressora não fiscal. Então, incluímos no início do nosso projeto, junto com a lista de includes, a linha &#8220;<em>#include &lt;NFPrint.h&gt;</em>&#8220;.</span></p>
<p><span style="font-family: trebuchet ms,geneva;">Além disso, também necessitamos inserir a biblioteca nas propriedades de nosso projeto, então, basta clicarmos com o botão direito em cima de nosso projeto &#8220;BemaFit&#8221; e irmos em propriedades, conforme mostra ilustração:</span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><img title="fig_prop" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/fig_prop.jpg" alt="fig_prop" width="364" height="153" /></span></p>
<p><span style="font-family: trebuchet ms,geneva;">Após entrarmos nas propriedades do projeto, temos a janela abaixo dividida em três colunas. Na primeira coluna, selecionamos a opção <em>C/C++ Build</em>. Na coluna do meio, clicamos duas vezes sobre a opção <em>Libraries</em> e, em seguida, em Add (ícone representado pelo sinal de +).</span></p>
<p><span style="font-family: trebuchet ms,geneva;">Será exibida uma nova janela para inserção da biblioteca &#8220;<em>NFPrint</em>&#8220;. </span></p>
<p><span style="font-family: trebuchet ms,geneva;">Simplesmente, informamos o nome da biblioteca, conforme ilustrado, e pressionamos OK nas janelas para confirmar as alterações. </span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><img title="fig_lib" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/fig_lib.jpg" alt="fig_lib" width="622" height="411" /></span></p>
<p><span style="font-family: trebuchet ms,geneva;">Também iremos utilizar o display do cliente (Customer Display) em nosso exemplo, então precisamos inserir a biblioteca <em>CDisplay</em> em nosso projeto, porém para inserção desta biblioteca não será necessário seguir os mesmos passos descritos acima, basta a incluirmos no início do projeto usando um include, pois esta biblioteca já está presente na lista de bibliotecas do projeto.</span></p>
<p style="text-align: center;"><span style="font-family: trebuchet ms,geneva;"><img title="FiguraProjeto" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/FiguraProjeto.JPG" alt="FiguraProjeto" width="612" height="356" /></span></p>
<p><span style="font-family: trebuchet ms,geneva;">Após as configurações, basta simplesmente copiarmos e colarmos o código abaixo em nosso projeto.</span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">#include &lt;allegro.h&gt;<br />
#include &lt;UDisplay.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;CDisplay.h&gt;<br />
#include &lt;NFPrint.h&gt;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">int main(void)<br />
{<br />
  char ch;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">  /* instrução necessario para inicializar o a biblioteca allegro */<br />
  if (allegro_init() != 0)<br />
    return 1;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">  do<br />
  {<br />
    /* Instala o teclado */<br />
    install_keyboard();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">    char buff[256];</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">    // Inicializar o display do usuario<br />
    UserDisplayInit();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">    // Limpa o display do usario <br />
    UserDisplayClearAll();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">    if (keypressed())<br />
      readkey(); // Flush</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">    // Monta menu no display do usuario<br />
    UserDisplayPrint(1, 1, &#8220;1 - Impressao COM1&#8243;);<br />
    UserDisplayPrint(2, 1, &#8220;2 - Impressao display&#8221;);<br />
    UserDisplayPrint(3, 1, &#8220;Opcao:&#8221;);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">    memset(buff, 0, 256);<br />
    ch = readkey();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">    switch (ch)<br />
    {<br />
      case &#8216;1&#8242;:<br />
      {<br />
        int j;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // String utilizada para receber texto com tamanho de buffer 49<br />
        char bufferImp[49];</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // Tipo de corte, para guilhotina - Parcial<br />
        papperCut_t ncut = CUT_PARTIAL;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // baud rate<br />
        rs232Baudrate_t baud = RS232_BAUD_9600;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // Configura a impressora para estabelecer comunicação.<br />
        // - logicalPort = SERIAL1;<br />
        // - baudRate = baud;<br />
        // - lineFeeds = 3;<br />
        // - cutType = CUT_PARTIAL.<br />
        NFPrinterConfg(&#8221;SERIAL1&#8243;, baud, 3, ncut);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // inicializa impressora.<br />
        // Nota: A configuração da impressora deve ser efetuada antes da execução<br />
        // das funções abaixo.<br />
        NFPrinterInit();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        j = 0;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // Variável que irá checar o resultado da execução da função.<br />
        int result = BS_SUCCESS;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // Laço para realizar impressão<br />
        while (j &lt; 40)<br />
        {<br />
          // Imprime a string armazenada em bufferImp, na qual o <br />
          // tamanho foi definido em srtlen(bufferImp)</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">          sprintf(bufferImp, &#8220;%02d %s %02d\r\n&#8221;, j, &#8220;Teste de impressao FIT integra&#8221;, result);<br />
          result = NFPrinterPrint(bufferImp, strlen(bufferImp));<br />
          for (int i = 100; result != BS_SUCCESS &amp;&amp; i &gt;= 0; i&#8211;) <br />
          {<br />
            usleep(100000);<br />
            result = NFPrinterPrint(bufferImp, strlen(bufferImp));<br />
          }<br />
          j++;<br />
        }<br />
        j = 0;</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // Avanço de 4 linha<br />
        NFPrinterLineFeed(4);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // Acionamento parcial da Guilhotina<br />
        NFPrinterCutPper(ncut);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // Finaliza mode impressão<br />
        NFPrinterStop();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        UserDisplayClearAll();<br />
        UserDisplayPrint(2, 1,(result != BS_SUCCESS) ? &#8220;Erro na ultima impressao&#8221; :<br />
&#8220;Verifique impressao&#8221;);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // Fim impressao nao fiscal <br />
        readkey();<br />
      }<br />
      break;<br />
      case &#8216;2&#8242;:<br />
      { <br />
        // Configura o display na serial 2(port = SERIAL2, e o tipo do<br />
        // display = CD_LD220)</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        CustomerDisplayConfig(&#8221;SERIAL2&#8243;, CD_LD220);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // inicializa o display do cliente<br />
        CustomerDisplayInit();</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // Limpa display do usuário<br />
        // NOTA: O display do usuário deve ser previamente inicializado<br />
        // CustomerDisplayClear();<br />
        // Define como o texto será apresentado no display.<br />
        CustomerDisplaysetStatus(BLINKING);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // Emite o texto <br />
        // - &#8220;Teste linha 1!&#8221; será apresentado na primeira linha&#8221; the first line of<br />
        // the Customer Display<br />
        CustomerDisplayprint(0, &#8220;Teste linha 1!&#8221;);</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">        // Emite o texto <br />
        // - &#8220;Teste linha 2!&#8221; será apresentado na primeira linha&#8221; <br />
        CustomerDisplayprint(1, &#8220;Teste linha 2!&#8221;);<br />
      }<br />
      UserDisplayClearAll();<br />
      UserDisplayPrint(2, 1, &#8220;Verifique Display!&#8221;);<br />
      readkey();<br />
      break;<br />
      default:<br />
        UserDisplayClearAll();<br />
        UserDisplayPrint(2, 1, &#8220;Programa encerrado!&#8221;);<br />
        readkey();<br />
        return EXIT_SUCCESS;<br />
      break;<br />
    }</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #993300;">    /* wait for a key press */<br />
    readkey();<br />
  }<br />
  while (ch != &#8216;9&#8242;);<br />
}</span></span></p>
<p><span style="font-family: trebuchet ms,geneva;">Depois de compilado, ao executarmos será exibido o seguinte menu no display do microterminal:</span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #0000ff;">1 - Impressão COM1<br />
2 - Impressão display<br />
Opção: </span></span></p>
<p><span style="font-family: trebuchet ms,geneva;">Obs: Para que possamos ver na prática as funcionalidades de nosso exemplo, é necessário conectarmos na porta COM1 do microterminal 1 impressora não fiscal, e na porta COM2 conectarmos 1 display do cliente.</span></p>
<p><span style="font-family: trebuchet ms,geneva;">Caso a escolha no menu seja 1, automaticamente a ação tomada será a impressão do seguinte texto na bobina da impressora. </span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #0000ff;">00 Teste de impressão FIT Integra 00<br />
01 Teste de impressão FIT Integra 00<br />
02 Teste de impressão FIT Integra 00<br />
03 Teste de impressão FIT Integra 00<br />
04 Teste de impressão FIT Integra 00<br />
05 Teste de impressão FIT Integra 00<br />
06 Teste de impressão FIT Integra 00<br />
07 Teste de impressão FIT Integra 00<br />
08 Teste de impressão FIT Integra 00<br />
09 Teste de impressão FIT Integra 00<br />
&#8230; </span></span></p>
<p><span style="font-family: trebuchet ms,geneva;">Caso a escolha no menu seja 2, simplesmente será exibida no display do cliente a seguinte mensagem: </span></p>
<p><span style="font-family: courier new,courier;"><span style="color: #0000ff;">Teste linha 1!<br />
Teste linha 2!</span></span></p>
<p> </p>
<p><span style="font-family: trebuchet ms,geneva;"><br />
Assim, temos um pequeno exemplo demonstrando o uso das funções das bibliotecas <em>NFPrint</em> e <em>CDisplay</em> de nosso FT Developer KIT para o microterminal FIT Integra.</span></p>
<p><span style="font-family: trebuchet ms,geneva;"><strong>Próxima edição:</strong></span></p>
<p><span style="font-family: trebuchet ms,geneva;">Na próxima edição, vamos implementar o leitor de código de barras e acessar o microterminal remotamente.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://partners.bematech.com.br/bemacast/flashtip/2009/07/edicao-45-acessando-perifericos/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Edição 44 - Usando funções de Display</title>
		<link>http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-44-usando-funcoes-de-display/</link>
		<comments>http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-44-usando-funcoes-de-display/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 18:56:26 +0000</pubDate>
		<dc:creator>André Munhoz</dc:creator>
		
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://partners.bematech.com.br/bemacast/flashtip/?p=103</guid>
		<description><![CDATA[Caro parceiro,
Na edição 40 de nosso Flash Tip, vimos como criar o primeiro exemplo e imprimir algumas mensagens no display do usuário, como compilar o projeto, onde os arquivos são alocados no microteminal e qual o arquivo que devemos configurar para que a aplicação seja carregada no processo de BOOT do microterminal.
Nesta edição, iremos desenvolvedor [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Caro parceiro,</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Na <a href="http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-40-criando-a-primeira-aplicacao-com-o-eclipse/" target="_blank">edição 40</a> de nosso Flash Tip, vimos como criar o primeiro exemplo e imprimir algumas mensagens no display do usuário, como compilar o projeto, onde os arquivos são alocados no microteminal e qual o arquivo que devemos configurar para que a aplicação seja carregada no processo de BOOT do microterminal.</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Nesta edição, iremos desenvolvedor um pequeno exemplo que nos permita interagir com o microterminal, enviando mensagens para o display e recebendo informações do teclado. Basicamente neste exemplo, usaremos o tão famoso &#8220;switch/case&#8221;, além das funções nativas do SDK.</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: small;"><strong><em>Configurações Iniciais</em></strong></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Antes de iniciarmos nosso exemplo, devemos inserir em nosso projeto a biblioteca &#8220;allegro&#8221;, a qual possui uma função específica que irá receber dados do teclado, ou seja, uma função similar ao <em>getchar()</em> do C - a função <em>readkey()</em>.</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Não há necessidade de inserir recursos opcionais para trabalharmos com a &#8220;allegro&#8221;, devido ela já estar presente na instalação do ambiente de desenvolvimento. Então, para inserirmos a biblioteca &#8220;allegro&#8221; em nosso projeto, devemos seguir os seguintes passos:</span></span></span></p>
<ul>
<li><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Na estrutura de pastas, clicamos com o botão direito do mouse sobre a pasta do projeto e em seguida selecionamos &#8220;Properties&#8221; (nesta ilustração nosso projeto recebe o nome de <em>BemaFit</em>).</span></span></span></li>
</ul>
<p style="text-align: center;"><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><img title="img_1" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/img_1.jpg" alt="img_1" width="273" height="115" /></span></span></span></p>
<ul>
<li><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Temos a janela de propriedades do projeto dividida em três colunas. Na primeira coluna selecionamos a opção C/C++ Build. Na coluna do meio, clicamos duas vezes sobre a opção Libraries, em seguida clicamos na opção Add da terceira coluna (ilustrada com um círculo).<br />
</span></span></span></li>
<li><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Será exibida uma nova janela para inserção da biblioteca &#8220;allegro&#8221;. Simplesmente informamos &#8220;alleg&#8221; e damos um OK em todas as janelas para confirmar a alteração.</span></span></span></li>
</ul>
<p style="text-align: center;"><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><img title="img_2" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/img_2.jpg" alt="img_2" width="576" height="381" /></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Após a inserção desta biblioteca, já é possível inserimos nosso código no projeto.</span></span></span></p>
<p style="text-align: center;"><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><img title="img_3" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/img_3.jpg" alt="img_3" width="585" height="319" /></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Abaixo temos o código pronto que irá testar as funções de display e teclado, conforme mencionamos nesta edição. Basta então, copiá-lo e inserí-lo no projeto, inclusive com seus includes.</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">#include &lt;allegro.h&gt;<br />
#include &lt;UDisplay.h&gt;<br />
#include &lt;stdio.h&gt;</span></span></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">int main(void)<br />
{<br />
  char ch; </span></span></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  /* instrução necessária para inicializar a biblioteca allegro */<br />
  if (allegro_init() != 0)<br />
    return 1;</span></span></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  do<br />
  { <br />
    /* inicializa funções do teclado */<br />
    install_keyboard();</span></span></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">    char buff[256];</span></span></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">    // Inicializar o display do usuario<br />
    UserDisplayInit();</span></span></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">    // Limpa o display do usario <br />
    UserDisplayClearAll();</span></span></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">    // Monta menu principal no display o usuário<br />
    UserDisplayPrint(1,1, &#8220;1 - Escolha um &#8220;);<br />
    UserDisplayPrint(2,1, &#8220;2 - Escolha dois&#8221;);<br />
    UserDisplayPrint(3,1, &#8220;Opcao:&#8221;);<br />
    memset(buff, 0, 256);<br />
    ch=readkey();</span></span></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">    switch(ch)<br />
    { <br />
      case &#8216;1&#8242;: <br />
        UserDisplayClearAll(); <br />
        UserDisplayPrint(2,1, &#8220;Key 1 Pressionada!&#8221;);<br />
        readkey();<br />
      break;<br />
      case &#8216;2&#8242;: <br />
        UserDisplayClearAll(); <br />
        UserDisplayPrint(2,1, &#8220;Key 2 Pressionada!&#8221;);<br />
        readkey();<br />
      break;<br />
      default:<br />
        UserDisplayClearAll(); <br />
        UserDisplayPrint(2,1, &#8220;Programa encerrado!&#8221;);<br />
        readkey();<br />
        return EXIT_SUCCESS;<br />
      break;<br />
    } <br />
    /* Pausa na execução */<br />
    readkey();</span></span></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #800000;">  }<br />
  while (ch != &#8216;9&#8242;);<br />
}</span></span></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Após realizarmos a compilação do projeto, devemos simplesmente definir no arquivo userrc (localizado dentro do microterminal), o local aonde está nosso projeto compilado para que ele seja carregado na inicialização do microterminal (processo que já abordamos na <a href="http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-40-criando-a-primeira-aplicacao-com-o-eclipse/" target="_blank">edição 40</a> do Flash Tip).</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Basicamente, ao executar o projeto teremos as seguinte opções no display do usuário: </span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><span style="font-family: courier new,courier;"><span style="color: #0000ff;">1 - Escolha um<br />
2 - Escolha dois<br />
Opção:</span></span> </span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">E, ao pressionar 1 teremos a mensagem &#8220;Key 1 Pressionada!&#8221; e ao pressionar 2 teremos a mensagem &#8220;Key 2 Pressionada!&#8221;. Se for pressionado algo diferente, teremos &#8220;Programa encerrado!&#8221;.</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Assim, temos um pequeno exemplo demonstrando o uso das funções de display e de interação com o microterminal, capturando entradas via teclado.</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><strong>Próxima Edição:</strong></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Na próxima edição, vamos avançar um pouco mais no desenvolvimento e realizar a comunicação do microterminal com alguns periféricos.</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;"><strong>Não perca!</strong></span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"><span style="font-size: x-small;">Até lá e boas implementações!</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: trebuchet ms,geneva;"></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-44-usando-funcoes-de-display/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Edição 43 - Edição extra: sign_bema.dll</title>
		<link>http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-43-edicao-extra-sign_bemadll/</link>
		<comments>http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-43-edicao-extra-sign_bemadll/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 14:54:11 +0000</pubDate>
		<dc:creator>André Munhoz</dc:creator>
		
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://partners.bematech.com.br/bemacast/flashtip/?p=100</guid>
		<description><![CDATA[Caro Parceiro,
Primeiramente, gostaríamos de agradecer os feedbacks que temos recebido desde o lançamento de nossa dll que gera as chaves pública e privada, e a assinatura EAD no arquivo para o PAF - a dll sign_bema.dll.
Sem dúvida, esta dll veio para auxiliar nossa comunidade de desenvolvedores na implementação de um dos requisitos mais complexos do [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Caro Parceiro,</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Primeiramente, gostaríamos de agradecer os feedbacks que temos recebido desde o <a href="http://partners.bematech.com.br/bemacast/flashnews/2009/06/edicao-128-nova-dll-para-assinatura-digital-registro-ead/" target="_blank">lançamento</a> de nossa dll que gera as chaves pública e privada, e a assinatura EAD no arquivo para o PAF - a dll sign_bema.dll.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Sem dúvida, esta dll veio para auxiliar nossa comunidade de desenvolvedores na implementação de um dos requisitos mais complexos do PAF-ECF - a Assinatura Digital do arquivo.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Nesta edição extra do Flash-Tip, queremos contribuir ainda mais com nossa comunidade, exemplificando o uso da sign_bema.dll e de suas funções, e mostrar a simplicidade que é gerar estas chaves e o registro EAD no arquivo.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"><strong><em>1º passo - A declaração das funções</em></strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Nosso primeiro passo, é conhecer a declaração das funções da sign_bema.dll. Vamos fazê-la em Delphi e VB.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"><strong><em>- em Delphi:</em></strong></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">function genkkey( cChavePublica: String; cChavePrivada: String ): integer; stdcall; external &#8217;sign_bema.dll&#8217;;</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">function setLibType( iTipo: integer ): integer; stdcall; external &#8217;sign_bema.dll&#8217;;</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">function generateEAD( cNomeArquivo: String; cChavePublica: String; cChavePrivada: String; cEAD:String; iSign: Integer): integer; stdcall; external &#8217;sign_bema.dll&#8217;;</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">function validateFile( cNomeArquivo: String; cChavePublica: String; cChavePrivada: String ): integer; stdcall; external &#8217;sign_bema.dll&#8217;;</span></span></span></p>
<p><strong><em><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">- em VB:</span></span></em></strong></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">Private Declare Function genkkey Lib &#8220;sign_bema.dll&#8221; (ByVal cChavePublica As String, ByVal cChavePrivada As String) As Integer</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">Private Declare Function setLibType Lib &#8220;sign_bema.dll&#8221; (iTipo as Integer) As Integer</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">Private Declare Function generateEAD Lib &#8220;sign_bema.dll&#8221; (ByVal cNomeArquivo As String, ByVal cChavePublica As String, ByVal cChavePrivada As String, ByVal cEAD As String, ByVal iSign As Integer) As Integer</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">Private Declare Function validateFile Lib &#8220;sign_bema.dll&#8221; (ByVal cNomeArquivo As String, ByVal cChavePublica As String, ByVal cChavePrivada As String) As Integer</span></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"><strong><em>2º passo - Conhecer as funções que serão usadas</em></strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">A sign_bema.dll possui 4 funções. Dentre elas, temos 2 funções que são usadas para a geração das chaves e da assinatura do arquivo, ou seja, basicamente precisamos de apenas 2 funções para atender ao requisito do PAF-ECF. São elas:</span></span></p>
<ul>
<li>
<div><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">genkkey</span></span></div>
</li>
<li>
<div><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">generateEAD</span></span></div>
</li>
</ul>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">A função genkkey é responsável pela geração das chaves pública e privada, e a função generateEAD é responsável pela assinatura do arquivo, gerando e inserindo o registro EAD.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"><strong><em>3º passo - Usar as funções</em></strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Veja como é simples a implementação destas duas funções. Vamos codificá-las em Delphi e VB.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"><strong><em>- em Delphi:</em></strong></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">(&#8230;)</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">setlength( cChavePublica, 256 );<br />
setlength( cChavePrivada, 256 );</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">iRetorno := <span style="color: #0000ff;">genkkey</span>( cChavePublica, cChavePrivada );</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">if ( iRetorno = 0 ) then<br />
  application.MessageBox( &#8216;Erro de execução!&#8217;, &#8216;ERRO&#8217;, MB_ICONINFORMATION + MB_OK )<br />
else<br />
  application.MessageBox( &#8216;Sucesso!&#8217;, &#8216;Atenção&#8217;, MB_ICONINFORMATION + MB_OK );</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">(&#8230;)</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">setlength( cRegistroEAD, 256 );<br />
cNomeArquivo := &#8220;C:\Espelho.txt&#8221;;</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">iRetorno := <span style="color: #0000ff;">generateEAD</span>( cNomeArquivo, cChavePublica, cChavePrivada, cRegistroEAD, 1 );</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">if ( iRetorno = 0) then<br />
  application.MessageBox( &#8216;Erro de execução!&#8217;, &#8216;ERRO&#8217;, MB_ICONINFORMATION + MB_OK )<br />
else<br />
  application.MessageBox( &#8216;Sucesso!&#8217;, &#8216;Atenção&#8217;, MB_ICONINFORMATION + MB_OK );</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">(&#8230;)</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="font-family: verdana,geneva;"><strong><em>- em VB:</em></strong></span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">(&#8230;)</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">cChavePublica = Space(256)<br />
cChavePrivada = Space(256)</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">iRetorno = <span style="color: #0000ff;">genkkey</span>(cChavePublica, cChavePrivada)</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">If (iRetorno = 0) Then<br />
  MsgBox &#8220;Erro de execução!&#8221;, vbInformation + vbOKOnly, &#8220;ERRO&#8221;<br />
Else<br />
  MsgBox &#8220;Sucesso!&#8221;, vbInformation + vbOKOnly, &#8220;Atenção&#8221;<br />
End If</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">(&#8230;)</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">cRegistroEAD = Space(256)<br />
cNomeArquivo = &#8220;C:\Espelho.txt&#8221;</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">iRetorno = <span style="color: #0000ff;">generateEAD</span>( cNomeArquivo, cChavePublica, cChavePrivada, cRegistroEAD, 1 )</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">If ( iRetorno = 0 ) Then<br />
  MsgBox &#8220;Erro de execução!&#8221;, vbInformation + vbOKOnly, &#8220;ERRO&#8221;<br />
Else<br />
  MsgBox &#8220;Sucesso!&#8221;, vbInformation + vbOKOnly, &#8220;Atenção&#8221;<br />
End If</span></span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">(&#8230;)</span></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Detalhando um pouco mais estas duas funções, temos na função genkkey dois parâmetros já inicializados com 256 bytes, um para receber a geração da chave pública e outro para a chave privada, ambas automaticamente.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Tendo em mãos estas duas chaves, podemos assinar o arquivo com a função generateEAD. Esta função possui como parâmetros, o nome do arquivo que será assinado, a chave pública, a chave privada (previamente geradas pela função genkkey), o registro EAD e uma flag que indica se desejamos que o registro EAD já seja incluído no arquivo ou não (1 para sim ou 0 para não). Em relação ao 4º parâmetro (registro EAD), este precisa ser inicializado antes com 256 bytes, pois ele receberá a geração automática da assinatura.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Estas funções retornam um int, onde 1 (um) corresponde ao sucesso da execução e 0 (zero) a algum erro que tenha ocorrido.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Pronto, implementado, validado e funcionando na aplicação! Uma dll com funções simples, que ajudam a atender este requisito do PAF-ECF de forma fácil, rápida e segura.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Quero agora, compartilhar com você algumas dicas importantes para a validação do arquivo:</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">1) O Fisco possui um programa chamado &#8220;eECFc&#8221; que faz a validação do arquivo com base na chave pública informada.</span></span></p>
<p><span style="font-family: verdana,geneva;"></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">2) A software-house deve criar um arquivo XML com o seguinte conteúdo:</span></span></p>
<p><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">&lt;?xml version=&#8221;1.0&#8243; ?&gt;<br />
&lt;empresa_desenvolvedora&gt;<br />
  &lt;nome&gt;&lt;/nome&gt;<br />
  &lt;chave&gt;<br />
    &lt;modulo&gt;&lt;/modulo&gt;<br />
    &lt;expoente_publico&gt;03&lt;/expoente_publico&gt;<br />
  &lt;/chave&gt;<br />
&lt;/empresa_desenvolvedora&gt;</span></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Onde:</span></span></p>
<ul>
<li>
<div><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Na TAG <span style="color: #800000; font-family: Courier New;">&lt;nome&gt;</span> deve ser informado o nome da software-house.</span></span></div>
</li>
<li>
<div><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Na TAG <span style="color: #800000; font-family: Courier New;">&lt;modulo&gt;</span> deve ser informada a chave pública gerada.</span></span></div>
</li>
<li>
<div><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Na TAG <span style="color: #800000; font-family: Courier New;">&lt;expoente_publico&gt;</span> deve ser informado o expoente de validação. Para Bematech o expoente é 03.</span></span></div>
</li>
</ul>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"> 3) A nomenclatura deste arquivo é formada pelo nome da sofware-house mais a extensão &#8220;.xml&#8221;, exemplo: &#8220;EMPRESA.xml&#8221;.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">4) O arquivo .xml deve ser salvo na pasta &#8220;SHOUSE&#8221;, localizada onde o &#8220;eECFc&#8221; foi instalado.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"> </span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Estamos à disposição para qualquer dúvida que venha a surgir, através dos canais:</span></span></p>
<table style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td width="51%">
<ul>
<li><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"><em><strong>0800 644 7277</strong></em> (exclusivo ao desenvolvedor)</span></span></li>
</ul>
</td>
<td width="49%"><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"> </span></span></td>
</tr>
<tr bgcolor="#e5e5e5">
<td width="51%">
<ul>
<li><strong><em><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Email</span></span></em></strong></li>
</ul>
</td>
<td width="49%"><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">suporte@bematech.com.br</span></span></td>
</tr>
<tr>
<td width="51%">
<ul>
<li><strong><em><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">MSN</span></span></em></strong></li>
</ul>
</td>
<td width="49%"><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">suporte.andre@bematech.com.br</p>
<p>suporte.iohannes@bematech.com.br</p>
<p>suporte.sidnei@bematech.com.br</span></span></td>
</tr>
<tr bgcolor="#e5e5e5">
<td width="51%">
<ul>
<li><strong><em><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">SKYPE</span></span></em></strong></li>
</ul>
</td>
<td width="49%"><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">suporte.andre.luiz</p>
<p>suporte.iohannes</p>
<p>suporte.sidnei</span></span></td>
</tr>
</tbody>
</table>
<p> </p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Boas implementações!</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-43-edicao-extra-sign_bemadll/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Edição 42 - Explorando a Classe TEF</title>
		<link>http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-42-explorando-a-classe-tef/</link>
		<comments>http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-42-explorando-a-classe-tef/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 14:47:28 +0000</pubDate>
		<dc:creator>André Munhoz</dc:creator>
		
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://partners.bematech.com.br/bemacast/flashtip/?p=98</guid>
		<description><![CDATA[Caro Parceiro,
Ao longo desse mini-curso sobre nossa ferramenta Bematech Flash Builder - em especial a &#8220;Classe TEF&#8221; - aprendemos algumas particularidades da ferramenta, criamos uma rotina completa de cupom fiscal e transações de venda a cartão, e também acesso ao módulo administrativo das bandeiras.
Agora, nesse último Flash-Tip da série sobre a &#8220;Classe TEF&#8221;, vamos voltar [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Caro Parceiro,</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Ao longo desse mini-curso sobre nossa ferramenta Bematech Flash Builder - em especial a &#8220;Classe TEF&#8221; - aprendemos algumas particularidades da ferramenta, criamos uma rotina completa de cupom fiscal e transações de venda a cartão, e também acesso ao módulo administrativo das bandeiras.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Agora, nesse último Flash-Tip da série sobre a &#8220;Classe TEF&#8221;, vamos voltar nosso foco a uma particularidade importante dessa classe que é a possibilidade de modificação no arquivo Intpos.001.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Essa modificação pode ser necessária em alguns testes durante a homologação nas bandeiras, onde pode ser solicitada a alteração do conteúdo do arquivo ou de verificação de divergências do mesmo, por parte da aplicação.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Como já vimos nos Flash-Tips anteriores, o envio da transação é feito antes da execução da forma de pagamento &#8220;Cartão&#8221; através do método &#8220;CriarSolicitacaoCartao&#8221;, portanto em nosso exemplo vamos implementar os métodos de modificação do arquivo Intpos.001 logo após popularmos o objeto com os dados da transação.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">O processo de modificação do arquivo é simples! Como a ferramenta Flash Builder só cria o arquivo Intpos.001, efetivamente no momento da transação, os dados do arquivo ficam armazenados em um &#8220;.xml&#8221; dentro da pasta da aplicação (TransacoesTEF.xml), permitindo a alteração do conteúdo antes da criação efetiva do arquivo.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Todo este processo é executado com base no objeto criado pelo método &#8220;CriarSolicitacaoCartao&#8221; (em nosso exemplo, pelo objeto &#8220;minhasolicitacaocartao&#8221;), através da propriedade Buffer.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Abaixo, podemos ver alguns métodos da propriedade Buffer:</span></span></p>
<p><img title="insert_method" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/insert_method.JPG" alt="insert_method" width="619" height="157" /></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Nessa imagem, temos o método que usaremos para inserir linhas no arquivo Intpos.001.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Vale lembrar que as linhas do arquivo Intpos.001 são contadas a partir da posição 0 (zero), sendo então 0 (zero) a primeira linha do arquivo, 1 (um) a segunda, 2 (dois) a terceira e, assim, sucessivamente.</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"><strong><em>Modificando o conteúdo do Intpos.001 (inserir e apagar linhas inteiras)</em></strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Para modificar uma linha completa no arquivo, podemos usar os dois métodos descritos abaixo:</span></span></p>
<table style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;" border="1" cellspacing="0" cellpadding="3" width="100%">
<tbody>
<tr>
<td width="13%"><strong><span style="font-size: xx-small;"><span style="font-family: verdana,geneva;">Insert</span></span></strong></td>
<td width="87%"><span style="font-size: xx-small;"><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Método usado para inserir uma linha no arquivo.</span></span></span></td>
</tr>
<tr>
<td colspan="2">
<div style="text-align: center;"><span style="font-size: xx-small;"><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"><span style="color: #800000;"><span style="font-family: courier new,courier;">minhasolicitacaocartao.Buffer.Insert( 4, &#8220;777-777 = ABCDEFG\r\n&#8221; )</span></span></span></span></span></div>
</td>
</tr>
<tr>
<td width="13%"><strong><span style="font-size: xx-small;"><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">RemoveAt</span></span></span></strong></td>
<td width="87%"><span style="font-size: xx-small;"><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Método usado para remover uma linha do arquivo.</span></span></span></td>
</tr>
<tr>
<td colspan="2">
<div style="text-align: center;"><span style="font-size: xx-small;"><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"><span style="color: #800000;"><span style="font-family: courier new,courier;">minhasolicitacaocartao.Buffer.RemoveAt( 1 )</span></span></span></span></span></div>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: xx-small;"><span style="font-family: verdana,geneva;"><strong><em>Modificando linhas específicas do arquivo Intpos.001</em></strong></span></span></p>
<p><span style="font-size: xx-small;"><span style="font-family: verdana,geneva;">Além de podermos adicionar ou remover linhas do arquivo Intpos.001, também temos a possibilidade de modificar linhas específicas no arquivo. Abaixo temos as principais modificações que podem ser feitas no arquivo:</span></span></p>
<table style="font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;" border="1" cellspacing="0" cellpadding="3" width="100%">
<tbody>
<tr>
<td width="19%"><strong>Header</strong></td>
<td width="81%">Linha de cabeçalho do arquivo aonde contém o tipo de transação a ser realizada. Em nosso exemplo, modificamos o tipo de transação de &#8220;CRT&#8221; (Cartão) para &#8220;CHQ&#8221; (Cheque).</td>
</tr>
<tr>
<td colspan="2">
<div><span style="color: #660000; font-family: Courier New, Courier, mono;">minhasolicitacaocartao.Header = &#8220;CHQ&#8221;</span></div>
</td>
</tr>
<tr>
<td width="19%"><strong>Identificacao</strong></td>
<td width="81%">Linha que armazena o número da transação (NSU). Em nosso exemplo registramos um NSU fictício com 6 posições.</td>
</tr>
<tr>
<td colspan="2">
<div><span style="color: #660000; font-family: Courier New, Courier, mono;">minhasolicitacaocartao.Identificacao = &#8220;123456&#8243;</span></div>
</td>
</tr>
<tr>
<td width="19%"><strong>CupomVinculado</strong></td>
<td width="81%">Modificamos o número do cupom dentro do <em>Intpos.001</em>.</td>
</tr>
<tr>
<td colspan="2">
<div><span style="color: #660000; font-family: Courier New, Courier, mono;">minhasolicitacaocartao.CupomVinculado = &#8220;999999&#8243;;</span></div>
</td>
</tr>
</tbody>
</table>
<p style="FONT-FAMILY: "><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Vamos visualizar na prática, um exemplo de mudança do header do arquivo:</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"><strong>- em C#</strong></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">private void btnefetuapagamento_Click(object sender, EventArgs e)<br />
{<br />
  try<br />
  {<br />
    // MÉTODO PARA EXECUÇÃO DA FORMA DE PAGAMENTO QUANDO NÃO UTILIZARMOS<br />
    // A OPÇÃO DE &#8220;Cartao&#8221;.<br />
    if (txtdescforma.Text != &#8220;Cartao&#8221;)<br />
    {<br />
      BematechFiscal.Cupom.EfetuarPagamento( txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text ) );<br />
    }<br />
    else<br />
    {<br />
      // MÉTODO PARA CRIAÇÃO DA CHAMADA AO MÓDULO DA BANDEIRA, <br />
      // PARA EXECUÇÃO DA TRANSAÇÃO TEF</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      SolicitacaoCartao minhasolicitacaocartao;</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      minhasolicitacaocartao = BematechFiscal.TEF.CriarSolicitacaoCartao( txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text ) );</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      // ALTERAÇÃO DO HEADER DO ARQUIVO </span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      <span style="color: #0000ff;"><strong>minhasolicitacaocartao.Header = &#8220;CHQ&#8221;;</strong></span></span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      // MÉTODO PARA ENVIO DA SOLICITAÇÃO (CRIAÇÃO DO OBJETO ENVIAR SOLICITAÇÃO)<br />
      // E ENVIO AO GP.</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      Transacao minhatransacao = BematechFiscal.TEF.EnviarSolicitacao( minhasolicitacaocartao );<br />
      if (minhatransacao.Status != &#8220;0&#8243;)<br />
      {<br />
        MessageBox.Show(minhatransacao.TextoOperador);<br />
        return;<br />
      }<br />
      else<br />
      {<br />
        MessageBox.Show(minhatransacao.TextoOperador);<br />
      }</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      // EXECUÇÃO DA FORMA DE PAGAMENTO NA IMPRESSORA FISCAL.</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      BematechFiscal.Cupom.EfetuarPagamento(txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text ) );<br />
      while (true)<br />
      {<br />
        try<br />
        {</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">          // CRIAÇÃO DO OBJETO MINHASOLICITACAOCONFIRMACAO PARA INICIAR A CONFIRMAÇÃO<br />
          // DAS TRANSAÇÕES TEF</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">          SolicitacaoConfirmacao minhasolicitacaoconfirmacao = BematechFiscal.TEF.CriarSolicitacaoConfirmacao();<br />
          BematechFiscal.TEF.ConfirmarTransacao(minhasolicitacaoconfirmacao);<br />
          break;<br />
        }<br />
        catch (TEFException ErroTEF)<br />
        {<br />
          MessageBox.Show(ErroTEF.Message);<br />
        }<br />
      }<br />
    }<br />
  }<br />
  catch (FiscalException MensagemErro)<br />
  {<br />
    MessageBox.Show(&#8221;MensagemErro: &#8221; + MensagemErro.Message);<br />
  }<br />
  catch (GerenciadorInativoException MensagemErro)<br />
  {<br />
    MessageBox.Show(&#8221;MensagemErro: &#8221; + MensagemErro.Message);<br />
  }<br />
}</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;"><strong>- em VB.NET</strong></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">Private Sub btnefetuapagamento_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnefetuapagamento.Click<br />
  Try<br />
    &#8216; MÉTODO PARA EXECUÇÃO DA FORMA DE PAGAMENTO QUANDO NÃO UTILIZARMOS <br />
    &#8216; A OPÇÃO DE &#8220;Cartao&#8221;.</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">    If (txtdescforma.Text &lt;&gt; &#8220;Cartao&#8221;) Then<br />
      BematechFiscal.Cupom.EfetuarPagamento( txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text ) )<br />
    Else</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      &#8216; MÉTODO PARA CRIAÇÃO DA CHAMADA AO MÓDULO DA BANDEIRA, PARA EXECUÇÃO <br />
      &#8216; DA TRANSAÇÃO TEF</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      Dim minhasolicitacaocartao As SolicitacaoCartao = BematechFiscal.TEF.CriarSolicitacaoCartao(txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text))</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      &#8216; ALTERAÇÃO DO HEADER DO ARQUIVO</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      <span style="color: #0000ff;"><strong>minhasolicitacaocartao.Header = &#8220;CHQ&#8221;</strong></span></span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      &#8216; MÉTODO PARA ENVIO DA SOLICITAÇÃO (CRIAÇÃO DO OBJETO ENVIAR SOLICITAÇÃO) E ENVIO<br />
      &#8216; AO GP</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      Dim minhatransacao As Transacao = BematechFiscal.TEF.EnviarSolicitacao( minhasolicitacaocartao)<br />
      If (minhatransacao.Status &lt;&gt; &#8220;0&#8243;) Then<br />
        MessageBox.Show(minhatransacao.TextoOperador)<br />
        Return<br />
      Else<br />
        MessageBox.Show(minhatransacao.TextoOperador)<br />
      End If</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      &#8216; EXECUÇÃO DA FORMA DE PAGAMENTO NA IMPRESSORA FISCAL</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">      BematechFiscal.Cupom.EfetuarPagamento(txtdescforma.Text, Convert.ToDecimal( txtvalorforma.Text))<br />
      While (True)<br />
        Try<br />
          &#8216; CRIAÇÃO DO OBJETO MINHASOLICITACAOCONFIRMACAO PARA INICIAR A CONFIRMACÃO DAS<br />
          &#8216; TRANSAÇÕES TEF EFETAUDAS</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: courier new,courier;"><span style="font-size: xx-small;"><span style="color: #800000;">          Dim minhasolicitacaoconfirmacao As SolicitacaoConfirmacao = BematechFiscal.TEF.CriarSolicitacaoConfirmacao()<br />
          BematechFiscal.TEF.ConfirmarTransacao(minhasolicitacaoconfirmacao)<br />
          Exit While<br />
        Catch MensagemErro As TEFException<br />
          MsgBox(&#8221;MensagemErro: &#8221; + MensagemErro.Message)<br />
        End Try<br />
      End While<br />
    End If<br />
  Catch MensagemErro As FiscalException<br />
    MsgBox(&#8221;MensagemErro: &#8221; + MensagemErro.Message)<br />
  Catch MensagemErro As GerenciadorInativoException<br />
    MsgBox(&#8221;MensagemErro: &#8221; + MensagemErro.Message)<br />
  End Try<br />
End Sub</span></span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Neste exemplo, como estamos fazendo uma venda TEF, o header do arquivo é identificado como &#8220;CRT&#8221; que indica que a transação executa é do tipo &#8220;Cartão&#8221;:</span></span></p>
<p style="TEXT-ALIGN: center"><img title="intpos_inicial" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/intpos_inicial.jpg" alt="intpos_inicial" width="505" height="132" /></p>
<p style="FONT-FAMILY: "><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Nesta imagem, percebemos a modificação do header do arquivo para &#8220;CHQ&#8221; (Cheque), e na execução do código teremos um alerta de erro, devido à diferença de conteúdo deste arquivo:</span></span></p>
<p style="TEXT-ALIGN: center"><img title="alerta_aplicativo" src="http://www.bematech.com.br/marketing/emkt/images/flashtip/alerta_aplicativo.jpg" alt="alerta_aplicativo" width="405" height="375" /></p>
<p style="FONT-FAMILY: "><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Assim, concluindo nosso aprendizado sobre a &#8220;Classe TEF&#8221; da ferramenta Bematech Flash Builder.</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Esperamos que esta edição e todas as demais apresentadas, tenham sido de grande ajuda à você nosso parceiro de software que desenvolve para a plataforma .NET, e que procurava uma ferramenta de altíssimo nível em facilidade de integração, compreensão e rapidez.</span></span></p>
<p style="FONT-FAMILY: "><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Agradecemos muito por sua atenção e nos vemos nos próximos Flash-Tips!</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Caso deseja receber os exemplos em C# ou VB.NET apresentados nestas edições, nos envie um email para </span></span><a style="FONT-FAMILY: " href="mailto:partners@bematech.com.br?subject=Desejo receber exemplos da Classe TEF"><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">partners@bematech.com.br</span></span></a><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">.</span></span></p>
<p style="FONT-FAMILY: "> </p>
<p style="FONT-FAMILY: "><span style="font-family: verdana,geneva;"><span style="font-size: xx-small;">Boas implementações!</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://partners.bematech.com.br/bemacast/flashtip/2009/06/edicao-42-explorando-a-classe-tef/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
