Array
(
)

Imprimir Cupom Fiscal

Armando.boza
   - 14 fev 2006

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


Dopi
   - 14 fev 2006

Ola,

Permita-me indicar esse forum específico sobre [url=http://www.forumweb.com.br/foruns/index.php?showforum=416]Automação Comercial[/url]

No forum acima posso recomendar os seguinte tópicos:
http://www.forumweb.com.br/foruns/index.php?showtopic=38345
http://www.forumweb.com.br/foruns/index.php?showtopic=38700


Marcosrodias
   - 14 fev 2006

Ola

Eu tenho uma aplicacao em dephi 7 e firebird. E roda tudo bem.

Vc deve estar atento ao seguinte.

1) A sequencia de venda que vc colocou esta correta. Só lembre que pode dar desconto ou acrescimo e pode ter mais de uma forma de pagamentol Por exemplo voce pode pagar o cupom com dinheiro e cheque por exemplo.

2) Leitura x geralmente é usado para tirar relatorios voce tem até 10 minutos para a impressao. Caso passe deste tempo a impressora fecha o relatorio automaticamente.

3) A reduzao é obrigatario. No caso da bematech se voce nao tirar a reducao no dia quando voce ligar a ecf no proximo dia ele vair tirar a reducao sozinha.

4) Leve em conta os status da impressora. Se esta ligada se tem papel, se tem erro na memoria fiscal. Voce tem que monitorar essas informações.

5) Se quiser colocar tef tem os comando espcificos para isso mas voce vai ter que homologar junto a adminitradores de cartao de credito e ai vc vai ter que ter ter uma impressora e ir para sao paulo, caso voce seja de outra localidade e ainda vai pagar pela homologacao. Entçao pense nisso

6) Por causa do sintegra voce tem que gerar as vendas corretamente. Aqui em salvador/ba o fisco exigiu que todos os softwares fossem certificados por ela. Se voce quiser vender seu software aquie me salvaodr por exemplo vai ter que viar aqui para certificar. Mais uma vez voce paga para isso.

7) Geralmente as empressas fabricantes da ecf tem um driver para comunicação com a ecf e um exemplo em varias linguagems que vai lhe auxilir. Só é baixar e ver.


Qualquer coisa estout a disposicao.

Marcos Roberto / SSA BA


Marcosrodias
   - 14 fev 2006

Mas uma coisa. Use as dlls de cada fabricante. Eu usei um dias desses uma dll da afreac e nao tive suporte.

Agora só uso das proprias ecfs;


Dopi
   - 14 fev 2006

Marcos,

Se vc quer uma opção que seja Multi-ECF experimente conhecer o componente ACBrECF do [URL=http://acbr.sf.net]Projeto ACBr[/url]... Veja [url=http://acbr.sourceforge.net/wiki/index.php/ECF]aqui os modelos suportados[/url] (mais de 10)

- Não usa nenhuma DLL, apenas a comunicação direta com o ECF via Serial
- É multi-plataforma (Delphi / Kylix)
- É OpenSource
- Suporte á vários outros equipamentos, como Impressoras de Cheques, Balanças, Display de Msgs, Gavetas, Micro-Terminais, etc...
- Componente para válidar CPF, CNPJ, I.E. (todos Estados do Brasil), Cheque, Cartao, PIS, CEP


Armando.boza
   - 14 fev 2006


Citação:
Ola

Eu tenho uma aplicacao em dephi 7 e firebird. E roda tudo bem.

Vc deve estar atento ao seguinte.

1) A sequencia de venda que vc colocou esta correta. Só lembre que pode dar desconto ou acrescimo e pode ter mais de uma forma de pagamentol Por exemplo voce pode pagar o cupom com dinheiro e cheque por exemplo.

2) Leitura x geralmente é usado para tirar relatorios voce tem até 10 minutos para a impressao. Caso passe deste tempo a impressora fecha o relatorio automaticamente.

3) A reduzao é obrigatario. No caso da bematech se voce nao tirar a reducao no dia quando voce ligar a ecf no proximo dia ele vair tirar a reducao sozinha.

4) Leve em conta os status da impressora. Se esta ligada se tem papel, se tem erro na memoria fiscal. Voce tem que monitorar essas informações.

5) Se quiser colocar tef tem os comando espcificos para isso mas voce vai ter que homologar junto a adminitradores de cartao de credito e ai vc vai ter que ter ter uma impressora e ir para sao paulo, caso voce seja de outra localidade e ainda vai pagar pela homologacao. Entçao pense nisso

6) Por causa do sintegra voce tem que gerar as vendas corretamente. Aqui em salvador/ba o fisco exigiu que todos os softwares fossem certificados por ela. Se voce quiser vender seu software aquie me salvaodr por exemplo vai ter que viar aqui para certificar. Mais uma vez voce paga para isso.

7) Geralmente as empressas fabricantes da ecf tem um driver para comunicação com a ecf e um exemplo em varias linguagems que vai lhe auxilir. Só é baixar e ver.


Qualquer coisa estout a disposicao.

Marcos Roberto / SSA BA


Valew .. ja me clareou bastante ...

O que seria esse SINTEGRA ???


Dberlese
   - 22 fev 2006


Citação:


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
Agradeço antecipadamente


Estou tentando utilizar os componentes da ACBr, assim como disse nosso amigo acima tem uma ´regra´ a ser seguida, no meu caso tenho uma impressora mecaf IM113I, é uma impressora não fiscal, gostaria apenas de imprimir um cupom com os itens da venda, nome do cliente e nada mais, porem nao estou conseguindo fazer isso, pois é registrado itens vendidos, tem q abir cupom, leiturax, reducao Z... fazer uma serie de coisas q sera desnecesario no meu caso.
Alguem sugere uma ideia?

Obrigado


Edilcimar
   - 22 fev 2006

para impressora não fiscal vc não pode usar os comandos de uma impressora fiscal, use o writeln()


Andremuller
   - 22 fev 2006

estava tentando utilizar os componentes da ACBr e eles se mostraram bem complicados no controle de excessão e com execussão muito lenta se comparado a utilização das interfaces disponibilizadas pelos fabricantes.
Voltei atrás e estou utilizando as interfaces dos fabricantes, onde algumas vem com exemplos e até aplicações que captam as saídas enviadas pelo teu programa e simulam a existência de um impressora, o que facilita pra quem não tem a impressora no local.

Basta organização, eu criei um pattern factory que instancia a classe da impressora a partir do modelo utilizado. Então numa Custom criei os métodos abstratos necessários para manipulação da impressora. Aí é só especializar a Custom de acordo com os modelos que vou disponibilizando de acordo com a necessidade dos clientes.

Essa é uma idéia de diversas possíveis


Edilcimar
   - 22 fev 2006

eu não tenho nada contra a afrac ou a acbr, mas também prefiro usar as dll do próprio fabricante, faço uma configuração sobre qual a máquina que está instalada e depois faço a chamada da dll desejada


Kitsystem
   - 22 fev 2006

Se o software for apenas para Bematech como são a grande maioria pode embarcar na Dll do Fabricante, mas se for para outros voos nada de DLL amarrada a um fabricante e um monte de Case no software

ACbr faz isto para vc


Andremuller
   - 22 fev 2006

não precisa de um monte de cases.
É só criar uma Abstact Factory. Media dúzia de linhas e foi.


Zumbi
   - 28 fev 2006

teria como postar ou me enviar um exemplo dessa classe eu gostaria de tentar implementa-la tb..


vlw..


Dopi
   - 28 fev 2006


Citação:
não precisa de um monte de cases.
É só criar uma Abstact Factory. Media dúzia de linhas e foi.

Acredito que o amigo não tenha conhecimento da diversidade de ´linguagens´ e maneiras de funcionamento entre os diversos ECFs utilizados no Brasil... Suportar 2 ou 3 ECFs até é possível com um monte de IFs e ELSEs, mas para suportar vários fabricantes e modelos acredito que o mais indicado seja usar os recursos da O.O. (herança e polimorfismo)


Dopi
   - 28 fev 2006


Citação:
estava tentando utilizar os componentes da ACBr e eles se mostraram bem complicados no controle de excessão e com execussão muito lenta se comparado a utilização das interfaces disponibilizadas pelos fabricantes.

Estranho, pois tenho e-mails de usuários que tiveram um ganho real de performance usando o ACBr... Mas é claro que tudo depende da Marca, Modelo de ECF e do teste que vc fez... Gostaria de mais informações se possível.. No projeto: \ACBr\Source\Pascal\Demo\VCL\ECFTeste.dpr, existe a opção CupomFiscal, Teste de Velocidade, que cronometra a impressão de um cupom completo de 1 a n itens

No Inicio do tópico vc citou que está usando uma Mecaf NAO FISCAL, ou seja, uma impressora comum, e não um ECF... O ACBr possui um Emulador de ECF interno, que é o modelo ecfNaoFiscal... Ele é um programa em Delphi que imita um ECF em todas as operações, até mesmo com necessidade de Redu.Z e Leit.X... é muito útil para escrever um programa com suporte a ECFs para quem não tem um ECF para testes... se vc reparar no código fonte, verá que ele usa writeln para imprimir...


Citação:
Voltei atrás e estou utilizando as interfaces dos fabricantes, onde algumas vem com exemplos e até aplicações que captam as saídas enviadas pelo teu programa e simulam a existência de um impressora, o que facilita pra quem não tem a impressora no local.

O ACBr apenas cresce graças a coperação de usuários que estão dispostos a ajudar... ainda não temos manual dos componentes... Mas se vc procurasse um pouco mais, veria que todos os componentes possuem excelentes Demos na pasta
\ACBr\Source\Pascal\Demo\VCL\


Andremuller
   - 01 mar 2006


Citação:
Suportar 2 ou 3 ECFs até é possível com um monte de IFs e ELSEs, mas para suportar vários fabricantes e modelos acredito que o mais indicado seja usar os recursos da O.O. (herança e polimorfismo)


Trabalhar com design patterns é a coisa mais OO que existe. E Abstract Factory é implementação pura de herança e polimorfismo.

Então o que você faz. Cria uma classe abstrata com os principais métodos de uma ECF. Depois cria uma classe concreta para cada ECF. Então cria uma ClassControl que instancie a classe concreta dentro de um objeto declarado como com o tipo da classe abstrata, pronto, esta aí a interface com a ECF.

Tipo assim:

#Código

TCustomECF = class(TObject)
public
AvancarLinha; abstract virtual;
end;


#Código
TECFShalter = class(TCustomECF)
public
AvancarLinha; override; //aqui você coloca a Dll do fabricante
end;


#Código
TControlECF = class(TObject)
public
property ECF: TCustomECF read FECF write FECF;
constructor Create; reintroduce;
end;

TControlECF.Create;
begin
//aqui vai o único case de todo código, nada de monte de ifs e elses
case GetModeloECF do
ECF := TECFShalter.Create;
end;
end;


o que acontece então, em toda tua aplicação tu acessa o oControl.ECF.AvancarLinha que ele vai executar o método na classe concreta onde consta o real comando com a DLL.
Tá aí, esse é um pattern, porém existem diversos patterns que deixam o código mais limpo, organizado e OO. Pra quem tem interece procurar sobre o assunto, os principais autores são GOMS (The Gang of Four)


Andremuller
   - 01 mar 2006

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.


Dopi
   - 01 mar 2006

É 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


Andremuller
   - 01 mar 2006

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.


Andremuller
   - 01 mar 2006

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.


Dopi
   - 01 mar 2006

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 ?