Página 1 de 2

*** Presente de Ano Novo **** Gerenciamento de ECFS

Enviado: 18 Dez 2006 22:43
por rochinha
Amiguinhos

A rotina do Vagner veio bem a calhar, pena que não tive tempo de implementar ainda. Mas quando temos tempo?

Mexendo em um pequeno sisteminha de PONTO DE VENDA me deparei com o dilema de te-lo para várias ECF e o saco que era programar cada rotina e blablabla.

Foi então que criei uma biblioteca de funções genéricas, ou seja, bem no esquema ACBR, bem simplório e muito prática.

Meu código para Bematech por exemplo é assim:

Código: Selecionar todos

ECF_AbreCupom( cCNPJ )
do while not. eof()
     ECF_VendeItem( cCodigo, cDescricao, cAliquota, cTipoQtde, 
     skip
enddo
ECF_IniciaFechamentoCupom( cTipo, cEspecie, cValor )
ECF_EfetuaFormaPagamento( cForma, cValor )
ECF_FechaCupom( cForma, cValor )
E para usar o mesmo código com uma Urano, Daruma, etc basta seta a variavel ECF_Driver com o nome da ECF(veja em ECF_Version).

Um código varias funções.

Pode ser pretensão colocar com PRESENTE DE ANO NOVO pois ainda assim é necessário algumas verificações para tornar este projeto como totalmente pronto e liberado.

Conto com o apoio dos amigos que possuem as ECFs relacionadas e que disponham-se a postar suas ajudas para tirar quaisquer erros.

Código: Selecionar todos

#include "fivewin.ch"

///////////////////////////////////////////////////////////////////////////// 
// 
// Funcoes Compativeis com todos os drivers ECFs 
// 
///////////////////////////////////////////////////////////////////////////// 

FUNCTION ECF_Version() 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_Version() 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_Version() 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_Version() 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_Version() 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_Version() 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_Version() 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_Version() 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_Version() 
         endcase 
         return retorno 

FUNCTION ECF_AbreCupom( cCNPJ ) 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_AbreCupom( cCNPJ ) 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_AbreCupom( cCNPJ ) 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_AbreCupom( cCNPJ ) 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_AbreCupom( cCNPJ ) 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_AbreCupom( cCNPJ ) 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_AbreCupom( cCNPJ ) 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_AbreCupom( cCNPJ ) 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_AbreCupom( cCNPJ ) 
         endcase 
         return retorno 

FUNCTION ECF_VendeItem( cCodigo, cDescricao, cAliquota, cTipoQtde, cQtde, nCasasDecimais, cValor, cTipoDesconto, cValoresconto ) 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_VendeItem( cCodigo, cDescricao, cAliquota, cTipoQtde, cQtde, nCasasDecimais, cValor, cTipoDesconto, cValoresconto ) 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_VendeItem( cCodigo, cDescricao, cAliquota, cTipoQtde, cQtde, nCasasDecimais, cValor, cTipoDesconto, cValoresconto ) 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_VendeItem( cCodigo, cDescricao, cAliquota, cTipoQtde, cQtde, nCasasDecimais, cValor, cTipoDesconto, cValoresconto ) 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_VendeItem( cCodigo, cDescricao, cAliquota, cTipoQtde, cQtde, nCasasDecimais, cValor, cTipoDesconto, cValoresconto ) 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_VendeItem( cCodigo, cDescricao, cAliquota, cTipoQtde, cQtde, nCasasDecimais, cValor, cTipoDesconto, cValoresconto ) 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_VendeItem( cCodigo, cDescricao, cAliquota, cTipoQtde, cQtde, nCasasDecimais, cValor, cTipoDesconto, cValoresconto ) 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_VendeItem( cCodigo, cDescricao, cAliquota, cTipoQtde, cQtde, nCasasDecimais, cValor, cTipoDesconto, cValoresconto ) 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_VendeItem( cCodigo, cDescricao, cAliquota, cTipoQtde, cQtde, nCasasDecimais, cValor, cTipoDesconto, cValoresconto ) 
         endcase 
         return retorno 

FUNCTION ECF_IniciaFechamentoCupom( cTipo, cEspecie, cValor ) 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_IniciaFechamentoCupom( cTipo, cEspecie, cValor ) 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_IniciaFechamentoCupom( cTipo, cEspecie, cValor ) 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_IniciaFechamentoCupom( cTipo, cEspecie, cValor ) 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_IniciaFechamentoCupom( cTipo, cEspecie, cValor ) 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_IniciaFechamentoCupom( cTipo, cEspecie, cValor ) 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_IniciaFechamentoCupom( cTipo, cEspecie, cValor ) 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_IniciaFechamentoCupom( cTipo, cEspecie, cValor ) 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_IniciaFechamentoCupom( cTipo, cEspecie, cValor ) 
         endcase 
         return retorno 

FUNCTION ECF_EfetuaFormaPagamento( cForma, cValor ) 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_EfetuaFormaPagamento( cForma, cValor ) 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_EfetuaFormaPagamento( cForma, cValor ) 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_EfetuaFormaPagamento( cForma, cValor ) 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_EfetuaFormaPagamento( cForma, cValor ) 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_EfetuaFormaPagamento( cForma, cValor ) 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_EfetuaFormaPagamento( cForma, cValor ) 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_EfetuaFormaPagamento( cForma, cValor ) 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_EfetuaFormaPagamento( cForma, cValor ) 
         endcase 
         return retorno 

FUNCTION ECF_FechaCupom( cMensagem ) 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_FechaCupom( cMensagem ) 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_FechaCupom( cMensagem ) 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_FechaCupom( cMensagem ) 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_FechaCupom( cMensagem ) 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_FechaCupom( cMensagem ) 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_FechaCupom( cMensagem ) 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_FechaCupom( cMensagem ) 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_FechaCupom( cMensagem ) 
         endcase 
         return retorno 

FUNCTION ECF_CancelaCupom() 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_CancelaCupom() 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_CancelaCupom() 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_CancelaCupom() 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_CancelaCupom() 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_CancelaCupom() 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_CancelaCupom() 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_CancelaCupom() 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_CancelaCupom() 
         endcase 
         return retorno 

FUNCTION ECF_CancelaItemGenerico( cItem ) 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_CancelaItemGenerico( cItem ) 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_CancelaItemGenerico( cItem ) 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_CancelaItemGenerico( cItem ) 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_CancelaItemGenerico( cItem ) 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_CancelaItemGenerico( cItem ) 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_CancelaItemGenerico( cItem ) 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_CancelaItemGenerico( cItem ) 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_CancelaItemGenerico( cItem ) 
         endcase 
         return retorno 

FUNCTION ECF_LeituraX() 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_LeituraX() 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_LeituraX() 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_LeituraX() 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_LeituraX() 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_LeituraX() 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_LeituraX() 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_LeituraX() 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_LeituraX() 
         endcase 
         return retorno 

FUNCTION ECF_ReducaoZ() 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_ReducaoZ() 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_ReducaoZ() 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_ReducaoZ() 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_ReducaoZ() 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_ReducaoZ() 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_ReducaoZ() 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_ReducaoZ() 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_ReducaoZ() 
         endcase 
         return retorno 

FUNCTION ECF_Comando() 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_Comando() 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_Comando() 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_Comando() 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_Comando() 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_Comando() 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_Comando() 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_Comando() 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_Comando() 
         endcase 
         return retorno 

FUNCTION ECF_Retorno() 
         retorno := "" 
         do case 
            case ECF_Driver = "MATRICIAL" 
                 retorno := ""
            case ECF_Driver = "URANO" 
                 retorno := URANO_ECF_Retorno() 
            case ECF_Driver = "DARUMA" 
                 retorno := DARUMA_ECF_Retorno() 
            case ECF_Driver = "BEMATECH" 
                 retorno := BEMATECH_ECF_Retorno() 
            case ECF_Driver = "MECAF" 
                 retorno := MECAF_ECF_Retorno() 
            case ECF_Driver = "SWEDA" 
                 retorno := SWEDA_ECF_Retorno() 
            case ECF_Driver = "SCHALTER" 
                 retorno := SCHALTER_ECF_Retorno() 
            case ECF_Driver = "QUATTRO" 
                 retorno := QUATTRO_ECF_Retorno() 
            case ECF_Driver = "ACBR" 
                 retorno := ACBR_ECF_Retorno() 
         endcase 
         return retorno 

FUNCTION MyCopyFile( cDeOnde, cPraOnde ) 
         __CopyFile( cDeOnde, cPraOnde ) 
         return .t. 

FUNCTION MyAlltrim( cDeOnde ) 
         return Alltrim( cDeOnde ) 

FUNCTION AlinhaParametro( Param, Tamanho, Tipo ) 
   Do Case 
      Case Tipo == "C" 
           Param := AllTrim(Param) 
           Param := PadR( Param, Tamanho, " ") 
      Case Tipo == "N" 
           Param := AllTrim(Param) 
           Param := PadL( Param, Tamanho, "0") 
      Otherwise 
           Param := AllTrim(Param) 
   EndCase 
   Return Param 

FUNCTION MyWait(_tempo_) 
   _tempo_ := _tempo_*60000 
   for i = 1 to _tempo_ 
       next 
   return .t. 

#include "ECFurano.prg" 
#include "ECFdaru.prg" 
#include "ECFmekf.prg" 
#include "ECFxalt.prg" 
#include "ECFquatr.prg" 
#include "ECFbema.prg" 
#include "ECFsweda.prg" 
#include "ECFACBr.prg"
O fato de chamar a FIVEWIN.CH não quer dizer que só possa ser usado com a mesma, ok?

Para usar com Clipper basta retirar o prefixo de cada função, exemplo: BEMATEC_ECF_AbreCupom() ficando Abre_Cupom().

O restante do projeto esta em:

http://www.5volution.com.br/downloads/forum/ecfs.zip

Este projeto é regido por uma GPL portanto usem com critério e com sentimento de comunidade.

Enviado: 19 Dez 2006 02:57
por And
Amigo Rochinha,

Primeiramente fico grato pelo presente e sinceramente espero que diante desta iniciativa sua e do Vagner eu possa ser presenteado ou presentear em outras datas comemorativas (de preferencia diariamente). :)Pos



Abraço,

Enviado: 19 Dez 2006 13:03
por rochinha
Amiguinho

O nosso presente, meu, do Vagner, do Maligno, do Vailtom, do Toledo, do Stanis, do Dudu, do And(oopops, este é voce) e todos os forenses de qual não lembro o nome é o feedback e a atenção aos nossos posts e respostas.

Mas todo desbravador, refaz o caminho menos perigosos para os próximos bandeirantes.

Estamos ai! ;)

Enviado: 20 Dez 2006 02:50
por And
Valeu mestre!

:{


Abraço,

Enviado: 20 Dez 2006 16:16
por vagucs
Show de bola rochinha!

Enviado: 22 Dez 2006 19:38
por Sergio_ASSilva
Valeu Garoto,

Um grande axé pra voce. :|<

Enviado: 28 Dez 2006 11:41
por clebermano
MUITO BOM GOSTEI

Enviado: 29 Dez 2006 15:45
por momente
Legal mesmo!!!

Obrigado! :)Pos

Enviado: 13 Jan 2007 21:04
por rochinha
Amiguinhos

Inseri no projeto o codigo para contemplar a impressora Quattro.

Sugiro analisarem os codigos antes de utilizar e fazer as modificações e correções necessárias para o uso.

O link para baixar ainda é o mesmo do primeiro post.

Obrigado pela atenção e ajuda recebida.

preciso do ecfs.zip

Enviado: 20 Out 2007 08:24
por jose.juca
amigos,
Vagner, do Maligno, do Vailtom, do Toledo, do Stanis, do Dudu
se um de vcs pode me enviar o projeto das ecfs.zip fico muito grato muito mesmo

abraço


Josá Jucá.

Enviado: 20 Out 2007 19:05
por rochinha
Amiguinhos

O link acima esta ok agora.

Enviado: 07 Dez 2007 00:58
por rochinha
Amiguinhos

Fiz uma retificação em um dos .PRGs do projeto ECFs em relação a Bematech.

O módulo usa BEMAFI32.EXE e arquivos .CMD para se comunicar com a ECF e não estava liberando o arquivo .CMD gerado para o proximo comando.

Agora esta ok.

Tomo a liberdade de apresentar o visual que consegui para deixar o meu PDV mais atraente.

Imagem

Enviado: 11 Dez 2007 21:08
por RamonXHB
[Como vc conseguiu essa aparencia ?

Enviado: 12 Dez 2007 01:41
por rochinha
Amiguinho

É um trabalho gráfico usando como base aparecencia do site download.com e outras imagens encontradas na net, em formato bitmap, colocado em um dialogo sem bordas, titulos, etc e controles listbox estrategicamente colocados sobre o desenho.

A imagem bitmap atua como skin, e quando eu ficar de saco cheio faço outra arte e envio ao cliente.

Enviado: 31 Jan 2008 01:52
por rochinha
Amiguinhos

Agora o projeto vem contemplar o monitor ACBr.

O mesmo ja trabalhava com outros monitores como Bematech e Daruma e agora com este reforço acho que as impressoras não tem mais fronteiras.

O projeto ACBr é um verdadeiro achado e dentre os projetos que auxiliam o usuario talvez o melhor.

Espero que o meu projeto agora nosso também possa nos ajudar neste arduao trabalho de programar impressoras.

Como sempre, sugiro analisarem os codigos antes de utilizar e fazer as modificações e correções necessárias para o vosso uso e quaisquer modificações ou remoções de bugs deem seu retorno aqui mesmo.

O link para baixar ainda é o mesmo:

http://www.5volution.com.br/downloads/forum/ecfs.zip

Obrigado pela atenção e ajuda recebida.