art i go paf active delphi

9
Apresentação Olá pessoal, este é o meu primeiro artigo de uma série sobre o tema PAF-ECF, aqui iremos aprender o que mais necessitamos para criarmos um aplicativo pronto para a homologação. Com certeza os desenvolvedores de software voltados para automação comercial estão perderam noites de sono com o PAF-ECF . O intuito desta série de artigos é ajudá-los a trabalhar de forma ágil, utilizando os componentes ACBr, que hoje tornou-se uma ferramenta poderosa para quem trabalha não somente com Delphi mas também com outras linguagens de programação. Primeiro e mais importante : Definindo o aplicativo! O Programa Aplicativo Fiscal, (PAF-ECF), possui pelo menos, três tipos de documentos, adotados pela maioria dos comerciantes varejistas, que após a união dos Estados regulamentou-se : · Auto-serviço – forma de atendimento em que o consumidor escolhe os produtos e leva ao caixa. · Pré-venda – forma de atendimento em que o consumidor escolhe os itens e recebe um código ou senha de identificação e se dirige ao caixa para pagamento. · Documento Auxiliar de Venda (DAV) – é um tipo de documento emitido e impresso antes de terminar a operação de compra, para atender as necessidades operacionais do estabelecimento comercial. Serve para operações como orçamento, pedido, ordem de serviço, etc. O DAV não substitui o Cupom Fiscal, que deverá ser emitido. O DAV não pode ser usado em bares e restaurantes. Antes de começar o desenvolvimento, procure entender que a parte vital para o sucesso na hora de buscar as informações para os inúmeros relatórios está na sua base de dado. Portanto, aqui vão algumas dicas para sua modelagem : - Guarde as informações sobre o seu cliente final, tipo CNPJ, Nome, Endereço, Insc Estadual, Municipal, etc. - Guarde informações sobre o seu sistema e da sua empresa tais como, CNPJ, Denominação, versão do aplicativo, nome do aplicativo, etc. - Guarde o que puder de informação referente as Reduções Z (Fechamento) , emitido pela impressora fiscal. - Procure registrar todas as informações contidas no cabeçalho do cupom fiscal, como número de ordem (COO), número do contador do cupom fiscal (CCF), etc. - Guarde em uma tabela informações sobre a impressora fiscal, como o numero de série, marca, modelo, tipo, contadores de usuario, loja, ecf, etc. - Guarde toda sangria e suprimento.

Upload: william-duarte

Post on 28-Oct-2015

36 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Art i Go Paf Active Delphi

Apresentação

Olá pessoal, este é o meu primeiro artigo de uma série sobre o tema PAF-ECF, aqui iremos aprender o que mais necessitamos para criarmos um aplicativo pronto para a homologação.

Com certeza os desenvolvedores de software voltados para automação comercial estão perderam noites de sono com o PAF-ECF.

O intuito desta série de artigos é ajudá-los a trabalhar de forma ágil, utilizando os componentes ACBr, que hoje tornou-se uma ferramenta poderosa para quem trabalha não somente com Delphi mas também com outras linguagens de programação.

Primeiro e mais importante : Definindo o aplicativo!

O Programa Aplicativo Fiscal, (PAF-ECF), possui pelo menos, três tipos de documentos, adotados pela maioria dos comerciantes varejistas, que após a união dos Estados regulamentou-se :

· Auto-serviço – forma de atendimento em que o consumidor escolhe os produtos e leva ao caixa.

· Pré-venda – forma de atendimento em que o consumidor escolhe os itens e recebe um código ousenha de identificação e se dirige ao caixa para pagamento.

· Documento Auxiliar de Venda (DAV) – é um tipo de documento emitido e impresso antes determinar a operação de compra, para atender as necessidades operacionais do estabelecimentocomercial. Serve para operações como orçamento, pedido, ordem de serviço, etc. O DAV não substitui o Cupom Fiscal, que deverá ser emitido. O DAV não pode ser usado em bares e restaurantes.

Antes de começar o desenvolvimento, procure entender que a parte vital para o sucesso na hora de buscar as informações para os inúmeros relatórios está na sua base de dado. Portanto, aqui vão algumas dicas para sua modelagem :

− Guarde as informações sobre o seu cliente final, tipo CNPJ, Nome, Endereço, Insc Estadual, Municipal, etc.

− Guarde informações sobre o seu sistema e da sua empresa tais como, CNPJ, Denominação, versão do aplicativo, nome do aplicativo, etc.

− Guarde o que puder de informação referente as Reduções Z (Fechamento) , emitido pela impressora fiscal.

− Procure registrar todas as informações contidas no cabeçalho do cupom fiscal, como número de ordem (COO), número do contador do cupom fiscal (CCF), etc.

− Guarde em uma tabela informações sobre a impressora fiscal, como o numero de série, marca, modelo, tipo, contadores de usuario, loja, ecf, etc.

− Guarde toda sangria e suprimento.

Page 2: Art i Go Paf Active Delphi

Após definir o que se irá adotar ao projeto, iremos instalar o componente, que pode ser baixado através do site <http://acbr.sourceforge.net/drupal/>.

Após baixar os fontes para seu computador, instale os pacotes na seguinte ordem :

1 – Synapse.dpk 2 – ACBrSerial.dpk 3 – ACBrComum.dpk4 - ACBrDiversos.dpk5 – ACBrTEFD.dpk6 – ACBrSPED.dpk7 – ACBrPAF.dpk

Após a instalação dos pacotes, insira no Libary Path do Delphi as pastas dos componentes descritos acima, conforme figura 1.0.

Figura 1.0 (Diretórios)

Page 3: Art i Go Paf Active Delphi

- Criando o Aplicativo utilizando impressora fiscal com ACBr.

Abra o RAD Studio, crie um novo projeto e adicione ao formulário o componente ACBrECF, conforme figura abaixo :

Agora iremos selecionar o modelo de impressora fiscal e sua porta de comunicação serial.Utilize o object inspector para alterar o modelo de impressora, conforme ilustrado abaixo :

Defina a porta serial a ser utilizada, por default, a porta serial é COM1.

Agora, temos na tela uma classe que contém uma interface à impressora fiscal definida que está ligada na porta serial COM também pré-definida. No nosso exemplo, iremos utilizar o modelo de ECF (Emissor de Cupom Fiscal) da Bematech.

Page 4: Art i Go Paf Active Delphi

Caso o desenvolvedor não possua uma impressora fiscal, é possível utilizar um Emulador, porém, para o PAF-ECF não recomendo o uso deste, pois algumas funções não estão disponíveis e também não é aceito na homologação. Para baixar o emulador, vá no link:

http://www.bematech.com.br/suporte/dwn_fisc_windows.asp

Perceba que é praticamente isso mesmo, jogar o componente na tela, configurar as propriedades e pronto, você já pode programar seu aplicativo inteiro utilizando o ACBr, fantástico!

Vamos emitir uma Leitura X, que é a abertura da impressora, como teste do nosso aplicativo.

Crie um botão na tela e defina no evento OnClick o seguinte código.

procedure TForm1.btnLeituraXClick(Sender: TObject);begin ACBrECF1.LeituraX;end;

Pronto, seu sistema está pronto para emitir uma leitura x, através da impressora fiscal.

Agora que sabemos a simplicidade do componente ACBrECF, irei falar um pouco sobre a importância do reposítório de dados para a geração dos arquivos exigidos pelo fisco.

− Guarde informações sobre o seu cliente, como CNPJ, IE, IM, Razão Social, entre outros.− Guarde informações da impressora fiscal, como Número Serial, Modelo e Marca da

impressora, número sequencial da impressora, entre outros.

Para buscar estas informações utilizando o ACBr é muito simples. Crie um groupbox e adicione os seguintes botões.

Versão SB – Versão do Software Básico da ECF (Emissor de Cupom Fiscal).

procedure TForm1.btnVersaoSBClick(Sender: TObject);begin ShowMessage(ACBrECF1.NumVersao);end;

Page 5: Art i Go Paf Active Delphi

ModeloECF – Retorna o Modelo do ECF.

procedure TForm1.btnModeloECFClick(Sender: TObject);begin ShowMessage(ACBrECF1.ModeloStr + #13+#10 + ACBrECF1.SubModeloECF);end;

I.Estadual – Retorna a Inscrição Estadual do estabelecimento.

procedure TForm1.btnInscEstadualClick(Sender: TObject);begin ShowMessage(ACBrECF1.IE);end;

Serial e Grande Total – Iremos gravar em um arquivo INI o Serial e Grande Total da impressora fiscal, conforme requisito do PAF. A rotina para criptografia dos dados neste arquivo vocês podem ficar à vontade para escolher.

procedure TForm1.btnGravarSRClick(Sender: TObject);var ArqIni : TIniFile;begin Try ArqIni := TIniFile.Create(ExtractFilePath(Application.Exename)+'serial.ini'); ArqIni.WriteString('ECF','Serial',ACBrECF1.NumSerie); ArqIni.WriteString('ECF','GT',FormatFloat('0.00',ACBRECF1.GrandeTotal)); Finally ArqIni.Free; end;end;

Neste botão programamos que em um arquivo INI, gravamos da impressora fiscal o seu número de serie e o grande total vendido.

Para ler e comparar estas informações, programaremos o botão Validar, conforme função a seguir:

procedure TForm1.btnValidaSerialClick(Sender: TObject);var ArqIni : TIniFile; Serial : String; GT : String; GTNum : Double;begin Try ArqIni := TIniFile.Create(ExtractFilePath(Application.Exename)+'serial.ini'); Serial := ArqIni.ReadString('ECF','Serial',''); GT := ArqIni.ReadString('ECF','GT',''); Finally ArqIni.Free; end;

if not ACBrECF1.Ativo then

Page 6: Art i Go Paf Active Delphi

ACBrECF1.Ativar;

if ACBrECF1.NumSerie = Serial then ShowMessage('Numero de Serie OK') else ShowMessage('Numero de serie invalido');

if FormatFloat('0.00',ACBrECF1.GrandeTotal) = GT then ShowMessage('GT OK') else ShowMessage('GT Invalido');end;

Num do ECF – Apresenta o número seqüencial do emissor de cupom fiscal.

procedure TForm1.btnNumECFClick(Sender: TObject);begin ShowMessage(ACBrECF1.NumECF);end;

Data e Hora SB – Retorna a data e hora do software básico da ecf.

procedure TForm1.btnDtSBClick(Sender: TObject);begin ShowMessage(DateToStr(ACBrECF1.DataHoraSB));end;

CNPJ Usuário – Retorna o CNPJ gravado na impressora fiscal.

procedure TForm1.btnCNPJClick(Sender: TObject);begin ShowMessage(ACBrECF1.CNPJ);end;

Estado ECF – Retorna o estado atual da impressora. Para programarmos este botão, declare na seção Uses do form a unit ACBrDevice.

procedure TForm1.btnEstadoECFClick(Sender: TObject);var EstadoECF : TACBrECFEstado;begin EstadoECF := ACBrECF1.Estado; if EstadoECF = estLivre then ShowMessage('Livre') elsebegin if (EstadoECF = estVenda) OR (EstadoECF = estPagamento) OR (EstadoECF = estRelatorio) then begin

Page 7: Art i Go Paf Active Delphi

ShowMessage('Documento Aberto, vou cancelar o cupom'); ACBrECF1.CancelaCupom; end;end;

Entendendo o código : Criamos a variável EstadoECF do tipo TACBrECFEstado, que contém todos os estados da máquina e quando o estado da impressora fiscal for igual a venda, pagamento ou relatório, deve-se cancelar o cupom fiscal em aberto, se o mesmo existir, no caso de uma interrupção de uso do programa aplicativo fiscal.

Estados da Impressora Fiscal : (estNaoInicializada, { Porta Serial ainda nao foi aberta } estDesconhecido, {Porta aberta, mas estado ainda nao definido} estLivre, { Impressora Livre, sem nenhum cupom aberto, pronta para nova venda, Reducao Z e Leitura X ok, pode ou nao já ter ocorrido 1ª venda no dia...} estVenda, { Cupom de Venda Aberto com ou sem venda do 1º Item} estPagamento, { Iniciado Fechamento de Cupom com Formas Pagto pode ou nao ter efetuado o 1º pagto. Nao pode mais vender itens, ou alterar Subtotal} estRelatorio, { Imprimindo Cupom Fiscal Vinculado ou Relatorio Gerencial } estBloqueada, { Reduçao Z já emitida, bloqueada até as 00:00 } estRequerZ, {Reducao Z dia anterior nao emitida. Emita agora } estRequerX, {Esta impressora requer Leitura X todo inicio de dia. Imprima uma Leitura X para poder vender} estNaoFiscal { Comprovante Nao Fiscal Aberto

Criando Interface Impressora x Venda de Mercadoria.

Nesta parte, iremos adicionar ao nosso projeto um GroupBox, e iremos inserir 5 botões, conforme figura:

Page 8: Art i Go Paf Active Delphi

Abre Cupom – Neste botão, iremos abrir o documento fiscal, identificando através do ACBr o cliente que está associado ao atendimento.

procedure TForm1.btnAbreCupomClick(Sender: TObject);begin ACBrECF1.AbreCupom('11111111111','Cliente Fulano','Rua da Alfandega');end;Entendendo o código : Na procedure AbreCupom, definimos que o CPF ou CNPJ do cliente é '11111111111', que o nome do cliente é 'Cliente Fulano' e que seu endereço é 'Rua da Alfandega'. Estas informações serão impressas no cabeçalho do cupom fiscal.

Vende Item – Após o documento fiscal aberto, iremos imprimir um item na impressora fiscal.

procedure TForm1.BtnVendeItemClick(Sender: TObject);begin Try ACBrECf1.VendeItem('001','Item 1','I',1,1.00,0,'UN'); Except On E: Exception do begin ShowMessage(E.Message); end; end;end;

Entendendo o VendeItem : A procedure VendeItem, nos pede o código da mercadoria ou serviço, a descrição, a aliquota, a quantidade vendida, o valor unitário e a unidade de medida, pois são requisitos mínimos para a venda de um produto na ECF.

Pagamento – Após a abertura do Cupom e do itens impressos, é hora de subtotalizar a compra e efetuar o pagamento, veremos como é fácil a implementação das funções para pagamento do cupom fiscal.

procedure TForm1.btnPagamentoClick(Sender: TObject);var Pgto : TACBrECFFormaPagamento; Pgto2 : TACBrECFFormaPagamento;begin Pgto := ACBrECF1.AchaFPGDescricao('Dinheiro',False,False); Pgto2 := ACBrECF1.AchaFPGDescricao('Cartão',False,True); ACBrECF1.SubtotalizaCupom();

ACBrECF1.EfetuaPagamento(Pgto.Indice,0.5,'',False); ACBrECF1.EfetuaPagamento(Pgto2.Indice,0.5,'',False);end;

Entendendo o Pagamento : Criamos duas variáveis, apenas para nosso exemplo, onde TACBrECFFormaPagamento é um tipo que poderá armazenar todas as informações sobre a forma de pagamento solicitada da impressora fiscal. Na primeira linha, procuramos pela descrição a forma de pagamento 'Dinheiro', e se a busca é exata, ou seja, se irei procurar exatamente a string solicitada ou o mais semelhante.

Page 9: Art i Go Paf Active Delphi

O método SubTotalizaCupom() serve para que o cupom fiscal seja subtotalizado conforme o valor total da venda, acrescido dos descontos ou acréscimos. O parametro entre () nos indica o valor de desconto ao cupom fiscal como um todo.

Na linha ACBrECF1.EfetuaPagamento() , iremos imprimir e processar no emissor de cupom fiscal qual pagamento será realizado e qual o valor será pago. O Indice a que se refere o exemplo é o mesmo índice numérico da forma de pagamento na impressora fiscal. Para quaisquer eventuais dúvidas sobre os índices de pagamento, retire uma “Leitura X”.

Fechar Cupom – Rotina responsável por fechar o cupom fiscal, encerrando o atendimento.

procedure TForm1.btnFecharClick(Sender: TObject);begin ACBrECF1.FechaCupom('Mensagem do Cupom : Active Delphi');end;

Entendendo o Fechar Cupom : O cupom fiscal em aberto será fechado após o efetuar pagemento, podendo ser inserido uma observação que será impressa no rodapé do cupom, no nosso exemplo será impresso “Mensagem do Cupom : Active Delphi”.

Cancela Cupom – Rotina responsável por cancelar o último cupom fiscal ou o cupom fiscal em aberto.

procedure TForm1.btnCancelaCupomClick(Sender: TObject);begin ACBrECF1.CancelaCupom;end;

Entendendo o Cancela Cupom : O cupom fiscal em aberto será cancelado ou o último cupom fiscal emitido será cancelado. Não é possível cancelar um cupom fiscal, quando um outro documento qualquer já estiver sido emitido posteriormente ao cupom fiscal.

Conclusão

− No nosso primeiro artigo, aprendemos a instalar o componente ACBr e utilizá-lo para recuperar insformações sobre a impressora e a vender mercadorias através dos métodos do componente.

No próximo artigo irei abordar uma checagem ao Menu Fiscal, dândo ênfase na Assinatura Digital, o registro EAD e a geração do MD5.

Até a próxima!

Sobre o autor : William Duarte é desenvolvedor da Nasajon Sistemas, onde atua no desenvolvimento de sistemas de automação comercial desde 2006. Sendo certificado mundialmente na ferramenta Retail Pro V9, da Retail Pro Inc. software líder mundial em gestão de varejo. Atuando também como instrutor e consultor de PAF-ECF em todo o Brasil pela Digidata Brasil.