Imprimir Cupom Fiscal

14/02/2006

0

Salve galera ...

Um de meus clientes disse que daqui um tempo ele vai querer emitir cupom fiscal na empresa dele e me perguntou se tinha como meu sistema fazer isso. (delphi + firebird)

Bom, dando uma garimpada no forum achei varios topicos relacionados e aproveitei muita coisa deles, a primeira coisa que fiz foi entrar no site da bematech e baixar o exemplo, a DLL e o emulador da impressora (pra não gastar dinheiro comprando uma :lol: ).

Do exemplo tirei algumas conclusões e aqui está o ponto G ... hehehe ... me corrijam se eu estiver errado por favor.

Para impressão de um cupom fiscal percebi os seguintes passos:

1º - Abre o cupom fiscal
2º - Vende Itens
3º - Inicia fechamento do cupom
4º - Efetua forma de pagamento do cupom
5º - Finaliza o cupom

Notei tb que existem alguns relatórios como:

Leitura X
Redução Z

Queria saber de vcs que tem experiência na área quais os processos que uma empresa que emite cupom fiscal deve seguir, por ex:

A impressão do cupom é naquela ordem mesmo ou tem mais algum passo?
No final do dia é necessário tirar a Redução Z?
Quando se emite a Leitura X?

Vi tb que o sistema deve ser homologado pela receita estadual, como é feita essa homologação? Eles verificam o sistema pra ver se tudo está correto?

Agradeço antecipadamente


Armando.boza

Armando.boza

Responder

Posts

01/03/2006

Andremuller

só mais uma coisa, então tu cria uma classe concreta pra cada tipo de ECF que tu vai dando suporte aos poucos. Também o código que postei escrevi direto aqui na mensagem, então desculpem-me erros de sintaxe.


Responder

01/03/2006

Dopi

É exatamente assim que o ACBrECF trabalha...

A unit ACBrECFClass é praticamente toda abstrata, cada classe especifica para modelo/marca de um ECF é filha de ACBrECFClass, e implementa os métodos abstratos da classe mãe, que sejam compatíveis com a marca/modelo do ECF em questão... O componente ACBrECF possui uma proriedade que é do tipo ACBrECFClass... Essa propriedade é destruida/criada a cada mudança de modelo de ECF com o mesmo case que vc citou.

Portanto ACBrECF.LeituraX irá emitir uma Leitura X em qualquer modelo de ECF suportado pelo ACBr, basta apenas especificar o modelo no componente...

O problema de fazer uma interface generica baseada em DLLs para mais de 10 ECFs pode ser justamente as DLLs... pois:
- DLLs apenas rodam no Windows e nem todos fabricantes possuem DLLs para Linux (.SO) ( O ACBr é multiplataforma, rodando no Delphi, Kylix e Lazarus)
- O Inferno das DLLs... Se o usuário instalar outro programa que sobreponha a sua DLL no SYSTEM32 vc poderá ter problemas de dificil diagnóstico
- Numero extenso de DLLs... Acredito que atualmente, para suportar todos os equipamentos que o ACBr suporta (entre ECFs, Balanças, Impres.Cheques, Leitores, etc) seriam necessárias mais 30 DLLs diferentes !!!
- Falta de controle da aplicação. Sempre que vc chama a DLL não é o seu programa que está no comando... E nem todas as DLLs são bem escritas... Já vi empresas terem problemas na homologação TEF por causa de DLLs que não detectavam que o ECF foi desligado no meio da operação

Por fim, assim que vc estudar um pouco mais outros modelos de ECFs vc notará que existem diferenças enormes para executar a mesma tarefa...
Exemplo: O ECF DataRegis não possui uma função para abrir o cupom, ele é aberto automaticamente assim que a Venda de Item é comandada.. Ele tb não tem comando para Fechar o cupom, ele é fechado assim que o Pagamento atingiu o Total a pagar


Responder

01/03/2006

Andremuller

Daniel obrigado pela informação. Concordo com boa parte do que foi por ti dito. Porém:
1. Uma coisa não é empecilho: a diferença para executar uma tarefa. Nas minhas classes me confrontei com isso. O que acontece se ele não abre cupom? Na classe concreta a função devolve result True, sem fazer mais nada. Tem mais, se isso for empecilho pra mim vai ser pra ACBr também, pois no caso do componente eu também vou executar um AbrirCupom indiferente de saber ou não se o modelo suporta. Dessa forma é só tratar, da mesma forma como a ACBr fez.
2. Utilizando as DLLs do fabricante (minha aplicação só roda em windows, isso é uma restrição e um pré-requisito) a impressão é mais rápida, isso é fato, testei no mesmo equipamento das duas formas. Ocorre que meus clientes não emitem ítem a ítem no cupom conforme vão passando, eles querem emitir todo cupom ao final da compra, dessa forma pra mim é muito mais requisito a impressão ser rápida do que ser multi plataforma.
3. As DLLs não ficam no System32 e sim na pasta da minha aplicação.


Responder

01/03/2006

Andremuller

complementando:
Achei a iniciativa da ACBr louvável. Também achei os componentes muito simples de serem utilizados e bons. Para as pessoas que não possuem como uns dos principais requisitos imprimir cupons com 200 ítens com vários terminais enviando solicitações, quer dizer, o mais rápido possível, não desaconselho a utilização dos componentes.


Responder

01/03/2006

Dopi

No ACBr prefiri usar o mecanismo de exceções do Delphi ao invez de retornar True / False como nas DLLs... Optei dessa maneira pois, é o ´jeitão´ do Delphi tratar erros... mas concordo que esse ponto é um dos que mais causa ´estranheza´ para quem está migrando das DLLs para o ACBrECF...

Também temos preocupação quanto a performance no ACBr... e procuramos otimiza-lo ao máximo, sempre que possível... Como disse antes, gostaria de fazer um comparativo...
Se não for muito trabalhoso, gostaria de saber o tempo que vc tem para a execução de um cupom completo com 50 itens e apenas 1 pagamento... Qual a Marca, Modelo e versão do ECF ?


Responder

01/03/2006

Andremuller

Não tenho um tempo específico para a impressão do cupom. Tenho o mínimo tempo possível porque o cliente estará esperando o cupom e o terminal estará ´bloqueado´ enquanto a impressão não termina, e outro cliente estará esperando para passar os ítens nesse terminal momentaneamente bloqueado.
Então porque não imprimir os ítens enquanto vão passando? Para o empresário poder cancelar tudo e dar baixa no estoque sem pagar imposto.

O modelo que usei para o teste de rapidez foi uma Shalter SPrint 3.01


Responder

01/03/2006

Dopi

Ok Andre, entendo... em alguns tipos de comercio a impressão concomitânte (imprimir item a item durante a venda) realmente não é possível... Como por exemplo em materiais de construção... não dá pra passar sacos de cimento pelo CAIXA... :)

Mas a lei que normatiza o ECF e o seu uso é clara em exigir a concomitância. Para imprimir sem concomitância é necessária uma autorização do posto fiscal...

Mas quanto ao tempo eu realmene me referia a impressão sem concomitância... No [b:e36d608f8f]ECFTeste.exe[/b:e36d608f8f] temos uma rotina que imprime um cupom completo, e cronometra... Veja o código dela:
procedure TForm1.TestedeVelocidade1Click(Sender: TObject);
Var cItens : String ;
    nItens, I : Integer ;
    tIni,tFim : TDateTime ;
    Parcela   : Double ;
begin
  ACBrECF1.CarregaFormasPagamento ;
  if ACBrECF1.FormasPagamento.Count < 1 then
     raise Exception.Create(´Nenhuma Forma de Pagamento programada no ECF´);

  cItens := ´10´ ;
  if not InputQuery(´Teste de Velocidade´,
                ´Numero de Itens a imprimir:´, cItens ) then
     exit ;

  nItens := StrToIntDef(cItens,0) ;
  if nItens < 1 then
     exit ;

  tIni := Now ;
  mResp.Lines.Add(´Iniciando Cupom: ´+DateTimeToStr(tIni)) ;
  ACBrECF1.AbreCupom();

  For i := 1 to nItens do
     ACBrECF1.VendeItem( IntToStrZero(i,6),
                         ´DESCRICAO NUM.: ´+IntToStrZero(i,6),
                         ´NN´,i,i/100,0,´UN´) ;

  ACBrECF1.SubtotalizaCupom();

  ACBrECF1.EfetuaPagamento(ACBrECF1.FormasPagamento[0].Indice,
     (ACBrECF1.Subtotal - ACBrECF1.TotalPago), ´ZERANDO SALDO A PAGAR RESTANTE´);

  ACBrECF1.FechaCupom(´TESTE DE CUPOM´);
  tFim := Now ;
  mResp.Lines.Add(´Finalizado em: ´+DateTimeToStr(tFim)) ;
  mResp.Lines.Add(´Diferença: ´+ FloatToStr(SecondSpan(tIni,tFim))+´ segundos´ ) ;
  mResp.Lines.Add(´---------------------------------´);



Responder

07/03/2006

Dopi

Ola Andre

aproveitei que apareceu uma Schalter por aqui e rodei o teste de velocidade nela... O desempenho foi muito bom para um ECF tão antigo...

Modelo: S Print ECF Ver. 3.01 (antiga)

Imprimindo 10 items
 + - + - + - + - + - + - + - + - + - + - + -
Iniciando Cupom: 7/3/2006 11:08:11
Finalizado em: 7/3/2006 11:08:24
Diferença: 13,3279999019578 segundos
---------------------------------



Responder

13/03/2006

Andremuller

Ok Daniel, obrigado pelo retorno.
O modelo de impressora que um cliente meu tem é esse mesmo. Vou fazer um teste e retorno assim que possível.


Responder

29/05/2006

M@gnun

Fiz alguns sistemas com a seguinte estrutura: (nada fiscal)

Tab Vendas
Cod_Venda, Cod_Item, Valor, Dt_Pag, Forma_Pag, etc ...

Tabela Intens
Cod_Iten, Cod_Produto, Qtde, Valor_Unit, Valor, Total, etc ...

Não uso uma tabela para caixa. Apenas faço uma pesquisa nessas tabelas, (e em algumas outras como poe ex: Contas a pagar, Receber, Manutenções, etc ...)com o usuario digitando algum periodo.

Aí monto um layout com Credito, Debito, etc ... com opções para ver os detalhes, vendas, despesas escritório, manutenções em equipamentos, etc ..

Gostaria de saber se esta forma é correta, e caso não for, gostaria de saber +- a estrutura de um caixa.

Obrigado.


Responder

29/05/2006

M@gnun

ops, desculpa ae, cliquei no botao responder ao inves de novo tópico.
algum admim, por favor apague este post.

Desculpa.


Responder

09/07/2011

Alexandre

Por que consigo emitir a redução z, a leitura x e até ler dados do Sintegra na impressora mas o cupom fiscal não abre e não dá erro algum? Alguém sabe? Talvez seja algo simples.Com o emulador tudo funciona.
Bematech MP-4000 TH FI.
Obrigado.
Responder

12/07/2011

José Curdo

Uma boa dica, entre tantas apresentadas aqui, é ver os artigos do Wuillian Duarte no site www.activedelphi.com.br.
sds.
Responder

23/02/2015

Francisco Aurino

Bom Dia Pessoal

Alguém sabe dizer se existe um simulador de impressora fiscal que imprime os comprovantes direto em uma impressora não fiscal!?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar