Página 1 de 3

ACBr - xHarbour

Enviado: 30 Nov 2007 16:00
por TerraSoftware
Caros colegas, andei pesquisando um pouco sobre o projeto ACBr, achei bastante interessante, mas tive algumas duvidas. Me parece que o sub-projeto ACBrECF é direcionado para delphi, ou seja, ele é um componente que pode ser incluido em projetos desenvolvidos em delphi. Para quem usa outras linguagens, como nós, existe o sub-projeto ACBrMonitor que pode ser usado atraves de troca de informaçoes via arquivos TXT. Existe tambem o sub-projeto ACBrTEF, este, me parece, só em delphi.

Pergunto aos colegas: é realmente assim?? Não conseguimos usar os componentes do ACBrECF e do ACBrTEF em nossos programas desenvolvidos em xHarbour??

Enviado: 04 Dez 2007 22:47
por dopi
Neste caso, é recomendado o ACBrMonitor com Sockets (muito rápido e pode ser remoto)... Veja esse post:
https://pctoledo.org/forum/viewtopic.php?t=6691

Re: ACBr - xHarbour

Enviado: 30 Mar 2009 13:12
por rochinha
Amiguinho,

Fiz um teste recente com ACBrECFDLL e obtive sucesso usando uma Bematech e o antigo emulador Bematech.

Não tive problemas para integra-lo.

Quanto ao monitor fiz funções em meu sistema para interagir com o mesmo e obtive muito sucesso.

Já comunicação direta, TelNet, etc, nunca testei.

Se o componente for liberado em formato .DLL ou .OCX acho que exista uma grande possibilidade de uso do mesmo no mundo Harbour.

Re: ACBr - xHarbour

Enviado: 30 Mar 2009 13:34
por TerraSoftware
Caro colega rochinha.
Já utilizo o AcbrMonitor com comunicação TCP/IP, que, por sinal, funciona muito bem.
Acredito que via dll seria melhor ainda, o amigo tem algum exemplo de como utilizar a referida dll?

Outra coisa: sinceramente, as vezes (muitas vezes), penso em iniciar projetos novos em delphi, cara!! existe tanto componente ja pronto para delphi!! e no harbour é um tal de estica-e-puxa... de versao, de com X, de sem X, de lib gráfica, de rdd, de banco relacional, de .COM, de .ORG, de vai, de vem, de etc e tal. Cara! é dificil heim. Mas de qualquer forma a gente ainda continua na "peleja".

Obrigado.

Re: ACBr - xHarbour

Enviado: 07 Abr 2009 10:37
por pauloa1
Concondo também, toda vez que surge uma mudança mais drástica, os usuários de delphi são os primeiros a ter os componentes, basta instalar o pacote e pronto , e Harbour...... sem falar de incompatibildades quando trocam de versão, uso WVW e agora não posso atualizar para a nova versão, porque da incompatibilidade. Assim fico com um pé atras sobre harbour.
Paulo

Re: ACBr - xHarbour

Enviado: 11 Abr 2009 15:02
por sygecom
Olá Paulo,
Sobre a incompatibilidade da GTWVW com as versões recente, isso não é problema do xharbour ou harbour, isso foi uma contribuição de terceiro que disponibilizou gratuitamente para quem quiser usar por conta e risco, agora como o xharbour e o harbour esta cada vez evoluindo e não podem parar no tempo por causa de contribuições de terceiros você tem que entrar em contato com quem fez essa contribuição e ver se a mesma vai acompanhar os projetos xharbour e harbour.
Agora se não queres mais esse tipo de preocupação, procure migrar para uma LIB visual que use por exemplo as API direto do windows, como Hwgui, Fivewin e etc...

Re: ACBr - xHarbour

Enviado: 06 Mai 2009 17:24
por rochinha
Amiguinhos,

Desculpem a demora, ai esta o exemplo:

Esta foi a adapatação que fiz de um código Pascal para usar em xBase:

Código: Selecionar todos

/////////////////////////////////////////////////////////////////////////////
//
// ACBR - Funcoes Compativeis com ACBrECFDLL.DLL
//
//         Autor: Jose Carlos da Rocha
//          Data: 24/03/2009
//         Email: irochinha@itelefonica.com.br
//           MSN: fivolution@hotmail.com
//     Linguagem: xBase / Fivewin
//   Plataformas: DOS, Windows
// Requerimentos: Harbour/xHarbour
//
/////////////////////////////////////////////////////////////////////////////
#include "fivewin.ch"
#include "dll.ch"

#define ACBrDLL "ACBrECFDLL.dll"

function main()

   public hDLL := LoadLibrary( ACBrDLL )

   if hDLL > 0

      if DefineModelo( "Bematech", "COM6", 3 )

         nRetorno := AbreCupom()
         if nRetorno > 0
            ? "Cupom nao pode ser aberto."
         endif

         cTipoQtde      := "I"
         nCasasDecimais := "2"
         cCodigo        := "123456"
         cDescricao     := "PRODUTO TESTE"
         cAliquotaICMS  := "II"
         nQtdes         := 1
         nValorUnitario := 2.50
         nValorDesconto := 0
         cUnidade       := "UN"
         cTipoDesconto  := "%"

         nRetorno := VendeItem( cCodigo, cDescricao, cAliquotaICMS, nQtdes, nValorUnitario ) //, nValorDesconto, cUnidade, cTipoDesconto )
         if nRetorno > 0
            MsgRun( "Cancelando cupom. Erro ("+str(nRetorno)+")" )
            CancelaCupom()
         endif  
         nRetorno := VendeItem( cCodigo, cDescricao, cAliquotaICMS, nQtdes, nValorUnitario*2 ) //, nValorDesconto, cUnidade, cTipoDesconto )
         if nRetorno > 0
            MsgRun( "Cancelando cupom. Erro ("+str(nRetorno)+")" )
            CancelaCupom()
         endif  
         nRetorno := VendeItem( cCodigo, cDescricao, cAliquotaICMS, nQtdes*3, nValorUnitario, 10, "LT", "%" )
         if nRetorno > 0
            MsgRun( "Cancelando cupom. Erro ("+str(nRetorno)+")" )
            CancelaCupom()
         endif  

         *  Desconto := StrToFloatDef(InputBox('SubTotal','Digite o Desconto/Acréscimo:', '' ),0);
         *  Obs      := InputBox('SubTotal','Digite a Observação:', '' );
         *  Retorno := SubtotalizaCupom( Desconto, Obs ) ;
         nRetorno := SubTotalizaCupom( 0, "" )
         if nRetorno > 0
            MsgRun( "SubTotalizaCupom. Erro ("+str(nRetorno)+")" )
         endif

         *  CodForma := InputBox('Pagamento','Digite o código da forma:', '' );
         *  Valor    := StrToFloatDef(InputBox('Pagamento','Digite o Valor:', '' ),0);
         *  Obs      := InputBox('Pagamento','Digite a Observação:', '' );
         *  Retorno := EfetuaPagamento( CodForma, Valor, Obs ) ;
         nRetorno := EfetuaPagamento( "01", 100, "DEVE VOLTAR TROCO DE 1,25" )
         if nRetorno > 0
            MsgRun( "EfetuaPagamento. Erro ("+str(nRetorno)+")" )
         endif

         *  Obs := InputBox('Fechamento','Digite a Observação Final:', '' );
         *  Retorno := FechaCupom( Obs ) ;
         nRetorno := FechaCupom( "5Volution Fenix|http://www.5volution.com" )
         if nRetorno > 0
            MsgRun( "FechaCupom. Erro ("+str(nRetorno)+")" )
         endif

         if MsgYesNo( "Deseja cancelar este cupom?" )
            nRetorno := CancelaCupom()
         endif

         * nRetorno := ReducaoZ( date() )

         if MsgYesNo( "Deseja imprimir Leitura X?" )
            nRetorno := LeituraX()
         endif

         if MsgYesNo( "Deseja visualizar log?" )
            WinExec( "NOTEPAD LOG.TXT" )
         endif

         *  Item := StrToInt(InputBox('Cancela Item','Digite a Número do Item:', '' ));
         *  nRetorno := CancelaItemVendido( Item )

      else
         MsgStop('Não foi possível ativar o ECF')
      endif

      FreeLibrary( hDLL )
   else
      MsgInfo( "ACBrECFDLL.dll nao foi carregada." )
   endif

return nil
                                                                                                           
DLL32 FUNCTION DefineModelo( cModeloStr AS STRING, cPorta AS STRING, nTimeout AS _INT ) AS BOOL PASCAL FROM "DefineModelo" LIB ACBrDLL
DLL32 FUNCTION IdentificaConsumidor( cCPF_CNPJ AS STRING, cNome AS STRING, cEndereco AS STRING ) AS _INT PASCAL FROM "IdentificaConsumidor" LIB ACBrDLL
DLL32 FUNCTION AbreCupom( cCPF_CNPJ AS STRING, cNome AS STRING, cEndereco AS STRING ) AS _INT PASCAL FROM "AbreCupom" LIB ACBrDLL
DLL32 FUNCTION VendeItem( cCodigo AS STRING, ;
                          cDescricao AS STRING, ;
                          cAliquotaICMS AS STRING, ;
                          nQtd AS _DOUBLE, ;
                          nValorUnitario AS _DOUBLE, ; 
                          nDescontoPorc AS _DOUBLE, ;
                          cUnidade AS STRING, ;
                          cTipoDescontoAcrescimo AS STRING ) AS _INT PASCAL FROM "VendeItem" LIB ACBrDLL
DLL32 FUNCTION FechaCupom( cObservacao AS STRING ) AS _INT PASCAL FROM "FechaCupom" LIB ACBrDLL
DLL32 FUNCTION SubtotalizaCupom( DescontoAcrescimo AS _DOUBLE, MensagemRodape AS STRING ) AS _INT PASCAL FROM "SubtotalizaCupom" LIB ACBrDLL
DLL32 FUNCTION EfetuaPagamento( cCodFormaPagto AS STRING, ;
                                nValor AS _DOUBLE, ;
                                cObservacao AS STRING, ; 
                                lImprimeVinculado AS BOOL ) AS _INT PASCAL FROM "EfetuaPagamento" LIB ACBrDLL
DLL32 FUNCTION LeituraX() AS _INT PASCAL FROM "LeituraX" LIB ACBrDLL
DLL32 FUNCTION ReducaoZ( DataHora AS DATE ) AS _INT PASCAL FROM "ReducaoZ" LIB ACBrDLL
DLL32 FUNCTION CancelaCupom() AS _INT PASCAL FROM "CancelaCupom" LIB ACBrDLL
DLL32 FUNCTION CancelaItemVendido( NumItem AS _INT ) AS _INT PASCAL FROM "CancelaItemVendido" LIB ACBrDLL
Caso possua uma Impressora real faça o teste e verifique qual porta COM esta instalada.

Fiz testes com uma Bematech real e com o Emulador DOS Bematech, funcionou legal.

O unico problema desta DLL é que ela possui os comandos básicos que estão exemplificados acima.

O link de download desta DLL ficará em http://www.5volution.com.br/downloads/f ... ecfdll.dll

Re: ACBr - xHarbour

Enviado: 09 Mar 2010 09:32
por anfm
Desculpe retomar um tópico antigo, mas gostaria de pedir a colaboração de vcs.

Eu comecei a desenvolver esta DLL, mas por falta de interesse(nunca recebi o retorno de alguém que tivesse testado) parei de desenvolver.

Caso alguém se disponha a testar e também a dar sugestões de como seriam os tipos de retorno da DLL posso continuar o desenvolvimento desta DLL e acrescentar todos os comandos do componente ACBrECF, deixando mais uma opção para quem não desejar usar o ACBrMonitor usar diretamente esta DLL.

Re: ACBr - xHarbour

Enviado: 09 Mar 2010 20:40
por rochinha
Amiguinho,

Talvez voce tenha encontrado não só aqui neste forum mas no outro forum que voce monitora que coloquei postagens referentes ao uso de sua .DLL e recentemente disponibilizei testes e material referente a ela.

Acho até que ela nem precise ser muito profunda, mas que possua alguns comandos a mais como geração de arquivos de memória e cupons não fiscais.

Se não me engano foi também de seu site que baixei algo relacionado a TEF, se não for esqueça.

Sinceramente cheguei a adaptar sua .DLL em um de meus PDVs mas só pude fazer testes com Bematech real.

No que puder ajudar estarei à disposição. Tenho uma Bematech Real a minha disposição.

Re: ACBr - xHarbour

Enviado: 10 Mar 2010 08:20
por TerraSoftware
Caro colega, eu tambem tenho todo o interese, no que eu puder, estou a disposicao para ajudar. Aqui na empresa temos 2 daruma para teste (FS 345 e FS 600).

Re: ACBr - xHarbour

Enviado: 10 Mar 2010 21:38
por anfm
Nova DLL disponível em http://acbr.svn.sourceforge.net/viewvc/ ... vision=793

A lista de comandos mapeados pode ser vista no link http://acbr.svn.sourceforge.net/viewvc/ ... vision=793

Re: ACBr - xHarbour

Enviado: 12 Mar 2010 10:38
por MARINI
Bom dia,
Estou tentando adaptar o exemplo do Rochinha acima para converter para Xailer,
pois o exemplo dele está para Fivewin e não estou conseguiu passar isto para apenas xHarbour:

DLL32 FUNCTION DefineModelo( cModeloStr AS STRING, cPorta AS STRING, nTimeout AS _INT ) AS BOOL PASCAL FROM "DefineModelo" LIB ACBrDLL

nHandle := LoadLibrary( ACBrDLL ) -> foi bem sucedido


DefineModelo( "Daruma", "COM1", 3 ) -> não consigo usar esta função mesmo declarando em REQUEST

Alguém sabe como fazer isto?

Re: ACBr - xHarbour

Enviado: 12 Mar 2010 10:45
por anfm
Neste link vc encontra a descrição de alguns comandos da DLL - http://www.forumweb.com.br/foruns/index ... 95-acbrdll

Por enquanto vc deve passar o nome da impressora como Daruma, com o D maiúsculo e o resto minúsculo. Depois irei ajustar para ajustar para aceitar com qualquer case.

Re: ACBr - xHarbour

Enviado: 12 Mar 2010 11:15
por MARINI
André:

nHandle := LoadLibrary( ACBrDLL ) -> foi bem sucedido
DllCall(nHandle,DC_CALL_STD,"DefineModelo","Daruma", "COM1" , 3 ) -> foi bem sucedido

Mas para pegar o retorno da data assim:

nData:=SPACE(16)
DllCall(nHandle,DC_CALL_STD,"DataHora",nData ) ->

nData retorna 3 caracteres estranhos.


Como faço para pegar um retorno?

Re: ACBr - xHarbour

Enviado: 12 Mar 2010 11:27
por anfm
Os retornos estão sendo usados os tipos do delphi (TDateTime, Float, Integer, etc), provavelmente vou ter q mudar para retornar tudo como pchar.

Vou mudar os retornos e assim que tiver uma nova versão disponível, aviso aqui no fórum.