Você está na página 1de 9

Apresentao Caros amigos, continuando a srie de artigos sobre PAF-ECF com ACBr, iremos aprender alguns itens do Menu

Fiscal e a gerao da assinatura digital, o registro EAD. O Menu Fiscal O Menu Fiscal composto de itens que sero desenvolvidos apenas para que o fisco possa controlar de forma mais rpida e prtica (para eles) e ainda ter controle total sobre o faturamento das mquinas ECF (Emissor de Cupom Fiscal). Os itens que pertencem a qualquer PAF-ECF, so : Leitura X Leitura Memria Fiscal (Simplificada e Completa) Espelho MFD Arquivo MFD Tabela de Produtos Estoque Movimento por ECF Meios de Pagamento Vendas do Perodo Tab. ndice Tcnico de Produo Identificao do PAF-ECF.

Agora que sabemos os itens, iremos no artigo de hoje implementar as leituras de memria fiscal e o registro EAD, assinando digitalmente o arquivo. Vale uma importante observao sobre impressoras fiscais que no so MFD,as antigas matriciais. Para as funes que seja necessrio a utilizao de dados da MFD como por exemplo, Espelho MFD e Arquivo MFD, deve-se apresentar uma mensagem ao usurio do tipo : Funo No Suportada Pelo Modelo de ECF. Para sabermos se a impressora MFD no ACBr, podemos utilizar a seguinte funo : procedure TForm14.btnTestaMFDClick(Sender: TObject); begin if ACBrECF.MFD then ShowMessage(' MFD') else ShowMessage('No MFD'); end;

Agora que sabemos se a ECF possui ou no MFD, podemos trabalhar na funo de Leitura da Memria Fiscal Simplificada. procedure TForm14.btnLeituraMFSClick(Sender: TObject); begin ACBrECF.LeituraMemoriaFiscal(DataIni.DateTime, DataFim.DateTime,True); end; Entendendo o cdigo : Chamamos a Leitura da Memria Fiscal (Simples, n!?), passando como parmetro as datas inicial e final e no final digo se simplificada (True) ou completa (False). Pois ento temos a impresso da Leitura da Memria Fiscal simplificada, agora iremos implementar a gerao do arquivo. procedure TForm14.btnLeituraMFSClick(Sender: TObject); var arqPAF : TStringList; begin if not chkGerarArquivo.Checked then ACBrECF.LeituraMemoriaFiscal(DataIni.DateTime, DataFim.DateTime,True) else begin Try arqPAF := TStringList.Create; ACBrECF.LeituraMemoriaFiscalSerial(DataIni.DateTime,DataFim.DateTime,arqPAF,True); arqPAF.SaveToFile('C:\LeituraMemoriaFiscalSimplificada.txt'); ShowMessage('Arquivo LMFS Gerado em : C:\LeituraMemoriaFiscalSimplificada.txt'); Finally FreeAndNil(arqPAF); End; end; end; Entendendo o cdigo : Implementamos no form um check box chkGerarArquivo e verificamos se o mesmo est checado, se sim, entraremos no Try e criamos um StringList, que ser responsvel por guardar nosso arquivo texto da leitura. Chamamos a funo LeituraMemoriaFiscalSerial e passamos como parmetro, alm das datas o StringList criado que ser populado com a leitura da memria fiscal. Aps a gerao do arquivo, salvamos em disco na unidade C:\. e OBRIGATRIAMENTE teremos que exibir o local e o nome do arquivo salvo.

Podemos ter uma idia do nosso projeto atual, conforme figura abaixo :

Assinatura Digital Agora que geramos o arquivo texto, iremos criar a chave pblica e chave privada, referente ao registro EAD, necessrio para realizar a assinatura digital dos arquivos, como no exemplo acima da leitura da memria fiscal. Para a gerao das chaves pblica e privada, no precisaremos ir muito longe, podemos utilizar a j testada DLL da Bematech, sign_bema.dll. A "libeay32.dll" deve estar junta com a "sign_bema.dll" na pasta da aplicao para que as funes possam ser executadas corretamente. Vamos a declarao da mesma : function genkkey( cChavePublica: String; cChavePrivada: String ): integer; stdcall; external 'sign_bema.dll'; Agora, iremos declarar a funo GenkKey no nosso projeto e iremos inserir as chaves publica e privada nos Edits, conforme figura abaixo :

Caso voc trabalhe com o Delphi 2009 ou 2010, por serem UNICODE, a funo s ir funcionar se na declarao estiver da seguinte forma : function genkkey( cChavePublica: AnsiString; cChavePrivada: AnsiString ): integer; stdcall; external 'sign_bema.dll'; Obs : Trocamos o tipo de String para AnsiString. Vamos ao cdigo do boto Gerar Chaves. procedure TForm14.btnGerarChaveClick(Sender: TObject); var cChavePublica, cChavePrivada : AnsiString; iRetorno : integer; begin setlength( cChavePublica, 256 ); setlength( cChavePrivada, 256 ); iRetorno := genkkey( (cChavePublica), (cChavePrivada) ); if ( iRetorno = 0 ) then Application.MessageBox( 'Erro de execuo!', 'ERRO', MB_ICONINFORMATION + MB_OK ) else begin edtChPu.Text := cChavePublica; edtChPr.Text := cChavePrivada; end; end; Entendendo o cdigo : Criamos duas variveis do tipo AnsiString, chamdas cChavePublica e cChavePrivada. AnsiString, pois estou trabalhando utilizando o Delphi 2009, conforme dito anteriormente, caso voc trabalhe com Delphi 7, por exemplo, use String normal. Chamamos a funo GenkKey e passamos as variveis como parmetro. necessrio que antes as variveis sejam inicializadas com o SetLength, tamanho de 256 pois as chaves possuem esta quantidade de caracteres. A varivel de controle iRetorno serve para nos avisar se a funo foi realizada ou no com sucesso. Aps a chamada jogamos o contedo das variveis nos respectivos campos texto que devero ser copiados para um arquivo ou cdigo fonte, enfim, sua chave publica e privada SUA mesmo, sendo a chave privada altamente secreta, ningum deve saber seu contedo. Atravs das chaves pblica e privada que o PAF-ECF ir assinar os arquivos por ele gerados e assim poder gerar para cada arquivo o registro EAD (Assinatura Digital).

Vamos copiar nossas chaves para o cdigo fonte, iremos trabalhar com as seguintes chaves como exemplo : Chave Pblica : DA09479447C24D1420CCAD26F917EEFF8D9F299FC9D84821DFD882C3D1C65D5E006B5C2 17CFD65F39B8081C0E6B3A90DA49148D1F01E00C0DF1938B166DA61A8FE95BD47374FF49 4EA7003893C291D9CC2A91BA5658FA2BB0B06187D6E133D76C16DDF7E60AA7BC3DC609 E7FC8538830B4FF0C0F4929AD5BEB4A59767BE763A7 Chave Privada : FCEBC60B8FCD195F24FDD8D301E09A16EB569E89055F179DB21046BC233882089FD1888E A5893A341CF6A92AC21365FE5C2A628A8813F4E26523330E6D259ABBDCB0C9B746092C3 00526DBFD6CC91EC27BE81B5125D9FF266EFEE98014795E3FFFD001E48ED3052FF5BD27F D9D8A8662D16F99AC48041F6824FD026D2E073A05 Copie o contedo para constantes, conforme exemplo :

Obs : As chaves esto concatenadas pois uma string no Delphi possui at 255 elementos caracteres, portanto necessrio concatenar ao menos um caractere. Agora que temos as chaves pblica e privada geradas e j temos em nosso projeto, podemos assinar o arquivo de leitura da memria fiscal. Continuaremos a utilizar a sign_bema.dll, porm agora, para gerar o registro EAD e gravar o arquivo texto. Vamos at nosso formulrio principal e iremos declarar a unit uChaves, para termos acesso as contantes de chave pblica e privada, pois precisaremos delas. Declarao da funo generateEAD : function generateEAD( cNomeArquivo: String; cChavePublica: String; cChavePrivada: String; cEAD:String; iSign: Integer): integer; stdcall; external 'sign_bema.dll';

Agora iremos incrementar nossa funo para gerao do arquivo de leitura da memria fiscal : procedure TForm14.btnLeituraMFSClick(Sender: TObject); var arqPAF : TStringList; iRetorno : integer; regEAD : AnsiString; begin if not chkGerarArquivo.Checked then ACBrECF.LeituraMemoriaFiscal(DataIni.DateTime, DataFim.DateTime,True) else begin Try SetLength(regEAD,256); arqPAF := TStringList.Create; ACBrECF.LeituraMemoriaFiscalSerial(DataIni.DateTime,DataFim.DateTime,arqPAF,True); arqPAF.SaveToFile('C:\LeituraMemoriaFiscalSimplificada.txt'); {Gerao do EAD} generateEAD('C:\LeituraMemoriaFiscalSimplificada.txt', cChavePu,cChavePr,regEAD,1); ShowMessage('Arquivo LMFS Gerado em : C:\LeituraMemoriaFiscalSimplificada.txt'); Finally FreeAndNil(arqPAF); End; end; end; Entendendo o cdigo : Declaramos a varivel regEAD e a inicializamos com 256 caracteres. Aps a gerao do arquivo texto na unidade C:\, chamamos a funo generateEAD e passamos como parmetro o nome do arquivo que queremos gerar o EAD, as nossas chaves pblica e privada que est na nossa unit uChaves, a varivel regEAD inicializada e um Flag se queremos que a funo insira a linha do EAD no final do arquivo ou no, sendo 1 para sim e 0 para no.

Validao do Registro EAD no eECFc Bem pessoal, agora uma das partes mais bacanas do projeto, o sentimento de dever cumprido a validao do registro EAD e a assinatura digital vlida. Para isso precisaremos utilizar o eECFc, software que ser utlizado com vocs na Homologao do PAF-ECF. No diretrio do eECFc, v na pasta SHouse e verifique os arquivos .XML, coloque o nome da sua empresa e renomeie com o mesmo nome que voc inseriu na tag <nome>, observe o modelo : Voc dever criar um arquivo XML com o seguinte contedo: <?xml version="1.0" ?> <empresa_desenvolvedora> <nome></nome> <chave> <modulo></modulo> <expoente_publico>03</expoente_publico> </chave> </empresa_desenvolvedora> Onde: - Na TAG <nome> deve ser informado o nome da software-house. - Na TAG <modulo> deve ser informada a chave pblica gerada. - Na TAG <expoente_publico> deve ser informado o expoente de validao. Para ns expoente 03. - A nomenclatura do arquivo formada pelo nome da sofware-house mais a extenso ".xml", exemplo: "TESTE.xml". - O arquivo .xml deve ser salvo na pasta "SHOUSE", localizada onde o "eECFc" foi instalado. Pronto conforme nosso exemplo, teremos um arquivo semelhante com o contedo no modulo de : <modulo>DA09479447C24D1420CCAD26F917EEFF8D9F299FC9D84821DFD882C3D1C65D5 E006B5C217CFD65F39B8081C0E6B3A90DA49148D1F01E00C0DF1938B166DA61A8FE95BD 47374FF494EA7003893C291D9CC2A91BA5658FA2BB0B06187D6E133D76C16DDF7E60AA7 BC3DC609E7FC8538830B4FF0C0F4929AD5BEB4A59767BE763A7</modulo>

Feito, salve o arquivo e iremos validar, utilizei o nome do arquivo de Active Delphi, veja na figura abaixo :

Vamos validar nosso LeituraMemoriaFiscal.txt :

V no Disco C:\ e selecione o nosso arquivo de memria fiscal, clique em validar e...

Pessoal, por hoje isso, as funes de EspelhoMDF e ArquivoMFD esto no projeto que criamos para baixar no site da Active Delphi, no link : <inserir o link aqui>. Sobre o autor : William Duarte desenvolvedor da Nasajon Sistemas, onde atua no desenvolvimento de sistemas de automao comercial desde 2006. Sendo certificado internacionalmente na ferramenta Retail Pro V9, da Retail Pro Inc. software lder mundial em gesto de varejo. Atuando tambm como instrutor e consultor de PAF-ECF em todo o Brasil pela Digidata Brasil.

Você também pode gostar