*** Presente de Ano Novo **** Gerenciamento de ECFS
Enviado: 18 Dez 2006 22:43
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:
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.
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.
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 )
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"
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.
