Clipper On Line • Ver Tópico - Bematech - Codigo completo de exemplo de uso. Fivewin 2.3/.4

Bematech - Codigo completo de exemplo de uso. Fivewin 2.3/.4

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Bematech - Codigo completo de exemplo de uso. Fivewin 2.3/.4

Mensagempor rochinha » 12 Dez 2005 20:03

Amiguinhos

O codigo abaixo tem o intuito de ajudar na construção de aplicativos que fazem uso da impressora Fiscal Bematech. Faz uso maciço do Driver Remoto e do Monitor Bematech( Requisitos necessários ).

/* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *
* Procedure_: REMOTO.PRG                                       
* Autor_____: Jose Carlos da Rocha - Konectiva Automacao       
* Cria‡„o___: 30 de Novembro de 2005                           
* Objetivo__: Emissao de Cupom Fiscal - Impressora: BEMATECH   
* Rotina____: M¢dulo de comandos via Monitor e Bemafi32       
* Direitos__: Qualquer alteração neste código pode ser feita deste que
*             seja mantida a autoria principal.
* Alterado__: ___/___/____
* por_______: ___________________________________________
* *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** */
#include "FiveWin.ch"
#include "fileio.ch"
#include "status.ch"

static oWnd, iPorta          := "COM1"
static cDirDoMonitorBematech := "C:\5Vol\ecf"
static cDirDoGerencidorTEF   := "C:\tef_dial"

//----------------------------------------------------------------------------//
function Main()
   SET _3DLOOK ON
   PUBLIC lInit:=.T., oFnt3
   DEFINE FONT oFnt3 NAME "flick bold hollow" SIZE  0,-42 NESCAPEMENT 90*10
   DEFINE WINDOW oWnd FROM 0, 0 TO 600, 800 PIXEL ;
      TITLE "Bematech Monitor" MENU BuildMenu() ;
      MDI
   SET MESSAGE OF oWnd TO FWVERSION CLOCK DATE KEYBOARD NOINSET
   ACTIVATE WINDOW ownd MAXIMIZED ;
            ON PAINT ( Refr_Wnd(hDC,235,0,"© Konectiva Development",oFnt3), SCLogo(hDC, "5Volution Legacy", oFnt3, oWnd ) )
   RETURN NIL

//----------------------------------------------------------------------------//
function BuildMenu()
   local oMenu
   MENU oMenu
        MENUITEM "Inicializacao" // Comandos_Inicializacao()
                MENU
                   MENUITEM "Altera Simbolo da Moeda para R$" ACTION ( ;
                                Comunica_Impressora_Fiscal( "006", " R" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Adiciona uma Aliquota de 17,00%" ACTION ( ;
                                Comunica_Impressora_Fiscal( "063", "17,00|1" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Ativa/Desativa Horario de Verao" ACTION ( ;
                                Comunica_Impressora_Fiscal( "066", "" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Grava Totalizador 'Duplicata'" ACTION ( ;
                                Comunica_Impressora_Fiscal( "053", "15|Duplicata" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Programa Arredondamento" ACTION ( ;
                                Comunica_Impressora_Fiscal( "064", "" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Programa Truncamento" ACTION ( ;
                                Comunica_Impressora_Fiscal( "069", " R" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Programa salto de 8 linhas entre cupons" ACTION ( ;
                                Comunica_Impressora_Fiscal( "047", "8" ),;
                                Retorno_Impressora_Fiscal() )
                ENDMENU
        MENUITEM "Cupom Fiscal"               // Comandos_Cupom_Fiscal()
                MENU
                   MENUITEM "Abre Cupom Fiscal" ACTION ( ;
                                Comunica_Impressora_Fiscal( "003", "" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Vende o Item 'Coca-cola'" ACTION ( ;
                                Comunica_Impressora_Fiscal( "089", "1234567890123|Coca-cola|FF|I|1|2|1,00|%|00,00" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Cancela o Item Vendido" ACTION ( ;
                                Comunica_Impressora_Fiscal( "011", "" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Inicia o Fechamento do Cupom" ACTION ( ;
                                Comunica_Impressora_Fiscal( "040", "A|%|00,00" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Efetua a Forma de Pagamento 'Ticket'" ACTION ( ;
                                Comunica_Impressora_Fiscal( "023", "Ticket|1,00" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Termina o Fechamento do Cupom" ACTION ( ;
                                Comunica_Impressora_Fiscal( "082", "Obrigado, volte sempre !" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Cancela o Cupom Fiscal" ACTION ( ;
                                Comunica_Impressora_Fiscal( "009", "" ),;
                                Retorno_Impressora_Fiscal() )
                ENDMENU
        MENUITEM "Operacoes Nao Fiscais"      // Comandos_Operacoes_Nao_Fiscais()
                MENU
                   MENUITEM "Relatorio Gerencial" ACTION ( ;
                                Comunica_Impressora_Fiscal( "072", "TESTE DE IMPRESSAO..." ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Fecha Relatorio Gerencial" ACTION ( ;
                                Comunica_Impressora_Fiscal( "031", "" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Efetua Suprimento de '50,00'" ACTION ( ;
                                Comunica_Impressora_Fiscal( "081", "50,00|Dinheiro" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Efetua Sangria de '30,00'" ACTION ( ;
                                Comunica_Impressora_Fiscal( "078", "30,00" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Efetua Recebimento no Totalizador '01'" ACTION ( ;
                                Comunica_Impressora_Fiscal( "070", "01|1,00|Dinheiro" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Abre Comprovante Vinculado ao 'Ticket'" ACTION ( ;
                                Comunica_Impressora_Fiscal( "002", "Ticket" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Imprime Texto no Comprovante Vinculado" ACTION ( ;
                                Comunica_Impressora_Fiscal( "084", "TESTE DE IMPRESSAO LINHA 1" + chr( 13 ) + chr( 10 ) + "TESTE DE IMPRESSAO LINHA 2" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Fecha Comprovante Vinculado" ACTION ( ;
                                Comunica_Impressora_Fiscal( "027", "" ),;
                                Retorno_Impressora_Fiscal() )                     
                ENDMENU
        MENUITEM "Relatorio Fiscais"          // Comandos_Relatorios_Fiscais()
                MENU
                   MENUITEM "Emite Leitura X" ACTION ( ;
                                Comunica_Impressora_Fiscal( "045", "" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Emite Reducao Z" ACTION ( ;
                                Comunica_Impressora_Fiscal( "071", "" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Emite a Leitura da M. F. por Data" ACTION ( ;
                                Comunica_Impressora_Fiscal( "041", "01/12/03|31/12/03" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Emite a Leitura da M. F. por Reducao" ACTION ( ;
                                Comunica_Impressora_Fiscal( "042", "0001|0010" ),;
                                Retorno_Impressora_Fiscal() )

                ENDMENU
        MENUITEM "Informacoes da Impressora"  // Comandos_das_Informacoes_Impressora()
                MENU
                   MENUITEM "Retorna as Aliquotas Cadastradas" ACTION ( ;
                                Comunica_Impressora_Fiscal( "076", "" ),;
                                Retorno_Impressora_Fiscal(),;
                                Retorno_Dados_Impressora_Fiscal() )
                   MENUITEM "Retorna o Numero do Ultimo Cupom" ACTION ( ;
                                Comunica_Impressora_Fiscal( "055", "" ),;
                                Retorno_Impressora_Fiscal(),;
                                Retorno_Dados_Impressora_Fiscal() )
                   MENUITEM "Retorna o Subtotal do Cupom Fiscal" ACTION ( ;
                                Comunica_Impressora_Fiscal( "080", "" ),;
                                Retorno_Impressora_Fiscal(),;
                                Retorno_Dados_Impressora_Fiscal() )
                   MENUITEM "Retorna o Numero de Serie do ECF" ACTION ( ;
                                Comunica_Impressora_Fiscal( "061", "" ),;
                                Retorno_Impressora_Fiscal(),;
                                Retorno_Dados_Impressora_Fiscal() )
                   MENUITEM "Retorna o GT (Grande Total)" ACTION ( ;
                                Comunica_Impressora_Fiscal( "034", "" ),;
                                Retorno_Impressora_Fiscal(),;
                                Retorno_Dados_Impressora_Fiscal() )
                   MENUITEM "Retorna o Valor de Cancelamentos" ACTION ( ;
                                Comunica_Impressora_Fiscal( "013", "" ),;
                                Retorno_Impressora_Fiscal(),;
                                Retorno_Dados_Impressora_Fiscal() )
                   MENUITEM "Retorna o Valor de Descontos" ACTION ( ;
                                Comunica_Impressora_Fiscal( "022", "" ),;
                                Retorno_Impressora_Fiscal(),;
                                Retorno_Dados_Impressora_Fiscal() )
                   MENUITEM "Retorna o Valor de Acrescimos" ACTION ( ;
                                Comunica_Impressora_Fiscal( "005", "" ),;
                                Retorno_Impressora_Fiscal(),;
                                Retorno_Dados_Impressora_Fiscal() )
                   MENUITEM "Outras..."
                           MENU
                              MENUITEM "Retorna a Data da Ultima Reducao Z" ACTION ( ;
                                                        Comunica_Impressora_Fiscal( "018", "" ),;
                                                        Retorno_Impressora_Fiscal(),;
                                                        Retorno_Dados_Impressora_Fiscal() )
                              MENUITEM "Retorna a Data do Movimento" ACTION ( ;
                                                        Comunica_Impressora_Fiscal( "021", "" ),;
                                                        Retorno_Impressora_Fiscal(),;
                                                        Retorno_Dados_Impressora_Fiscal() )
                              MENUITEM "Retorna os Flags Fiscais" ACTION ( ;
                                                        Comunica_Impressora_Fiscal( "032", "" ),;
                                                        Retorno_Impressora_Fiscal(),;
                                                        Retorno_Dados_Impressora_Fiscal() )
                              MENUITEM "Retorna a Data e a Hora do ECF" ACTION ( ;
                                                        Comunica_Impressora_Fiscal( "019", "" ),;
                                                        Retorno_Impressora_Fiscal(),;
                                                        Retorno_Dados_Impressora_Fiscal() )
                              MENUITEM "Retorna o Numero de Reducoes Z" ACTION ( ;
                                                        Comunica_Impressora_Fiscal( "060", "" ),;
                                                        Retorno_Impressora_Fiscal(),;
                                                        Retorno_Dados_Impressora_Fiscal() )
                              MENUITEM "Retorna o Valor da Forma 'Dinheiro'" ACTION ( ;
                                                        Comunica_Impressora_Fiscal( "086", "Dinheiro" ),;
                                                        Retorno_Impressora_Fiscal(),;
                                                        Retorno_Dados_Impressora_Fiscal() )
                              MENUITEM "Retorna os Dados do Mapa Resumo" ACTION ( ;
                                                        Comunica_Impressora_Fiscal( "048", "" ),;
                                                        Retorno_Impressora_Fiscal(),;
                                                        Retorno_Dados_Impressora_Fiscal() )
                              MENUITEM "Retorna o Relatorio Tipo60 Mestre" ACTION ( ;
                                                        Comunica_Impressora_Fiscal( "074", "" ),;
                                                        Retorno_Impressora_Fiscal(),;
                                                        Retorno_Dados_Impressora_Fiscal() )
                              MENUITEM "Retorna o Relatorio Tipo60 Analitico" ACTION ( ;
                                                        Comunica_Impressora_Fiscal( "073", "" ),;
                                                        Retorno_Impressora_Fiscal(),;
                                                        Retorno_Dados_Impressora_Fiscal() )
                           ENDMENU
                ENDMENU
        MENUITEM "Autenticacao e Gaveta"      // Comandos_Autenticacao_Gaveta()
                MENU
                   MENUITEM "Autentica Documento" ACTION ( ;
                                Comunica_Impressora_Fiscal( "008", "" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Abre Gaveta de Dinheiro" ACTION ( ;
                                Comunica_Impressora_Fiscal( "004", "" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Verifica Estado Gaveta de Dinheiro" ACTION ( ;
                                Comunica_Impressora_Fiscal( "094", "" ),;
                                Retorno_Impressora_Fiscal(),;
                                Retorno_Dados_Impressora_Fiscal() )
                ENDMENU
        MENUITEM "Integracao TEF"      // Comandos_Autenticacao_Gaveta()
                MENU
                   MENUITEM "Verifica Gerenciador" ACTION ( ;
                                MsgStop( "Gerenciador Padrao se encontra "+iif(VerificaGerenciador()=1,"ATIVO","INATIVO") ) )
                   MENUITEM "Abre Cupom Fiscal" ACTION ( ;
                                Comunica_Impressora_Fiscal( "003", "" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Vende o Item 'Coca-cola'" ACTION ( ;
                                Comunica_Impressora_Fiscal( "089", "1234567890123|Coca-cola|FF|I|1|2|1,00|%|00,00" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Inicia o Fechamento do Cupom" ACTION ( ;
                                Comunica_Impressora_Fiscal( "040", "A|%|00,00" ),;
                                Retorno_Impressora_Fiscal() )
                   MENUITEM "Venda Cartao"       ACTION VendaCartao()
                   MENUITEM "Confirma Venda"     ACTION FUN() // ACTION ConfirmaVenda()
                   MENUITEM "Nao Confirma Venda" ACTION FUN() // ACTION NaoConfirmaVenda()
                   MENUITEM "Cancela Venda"      ACTION FUN() // ACTION CancelaVenda()
                   MENUITEM "Administrativo"     ACTION FUN() // ACTION ADM()
                   MENUITEM "Imprime Relat¢rio"  ACTION FUN() // ACTION Relatorio()
                ENDMENU
   ENDMENU
   return oMenu

function fun()
   return .t.

/////////////////////////////////////////////////////////////////////////////
// Descricao.: Funcao que comunica com a impressora fiscal Bematech, via
//             Driver Remoto
// Parâmetros: STRING com o indice do comando
//             STRING com os dados a serem enviados
/////////////////////////////////////////////////////////////////////////////
function Comunica_Impressora_Fiscal( cIndice, cDados )
         if empty(cFileName( cDirDoMonitorBematech+"BematechMonitor.exe" ))
            MsgStop( "Monitor da Bematech nao encontrado em "+cDirDoMonitorBematech )
            return .t.
         endif
         oWnd:SetMsg( "Aguarde, acionando o monitor..." )
         if file( "BemaFI32.cmd" )
            delete file( "BemaFI32.cmd" )
         endif
         cArquivo := fcreate( "BemaFI32.cmd" )
         if len( cDados ) = 0
            cBuffer := cIndice + "|"
         else
            cBuffer := cIndice + "|" + cDados + "|"
         endif
         fwrite( cArquivo, @cBuffer, len( cBuffer ) )
         fclose( "BemaFI32.cmd" )
         __CopyFile( "BemaFI32.cmd", cDirDoMonitorBematech+"\BemaFI32.tmp" )
         FRename( cDirDoMonitorBematech+"\BemaFI32.tmp", cDirDoMonitorBematech+"\BemaFI32.cmd" )
         MyWait(5)
         return .t.

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

/////////////////////////////////////////////////////////////////////////////
// Descricao.: Funcao que retorno o status da impressora fiscal
// Parâmetros: nenhum
/////////////////////////////////////////////////////////////////////////////
function Retorno_Impressora_Fiscal
         _vezes_ := 5
         do while _vezes_>0
                  // Verifica se o arquivo Status.txt existe.
                  // Este arquivo que contém o estado de execução do comando
                  // enviado.
                  if file( cDirDoMonitorBematech+"\Status.txt" ) .and. freadstr( file( cDirDoMonitorBematech+"\Status.txt" ) ) <> "0"
                     cArquivo        := fopen( cDirDoMonitorBematech+"\Status.txt" )
                     cArquivoTamanho := fseek( cArquivo, 0, 2 )
                     fclose( cArquivo )
                     if cArquivoTamanho <> 0
                        cArquivo := fopen( cDirDoMonitorBematech+"\Status.txt" )
                        cRetorno := " "
                        cACK     := ""
                        do while .T.
                           for cProcura := 1 to 3
                               fread( cArquivo, @cRetorno, 1 )
                               if cRetorno = ","
                                  cProcura := 4
                               else
                                  cACK = cACK + cRetorno
                               endif
                           next cProcura
                           if cACK = "0"
                              MsgStop( "Erro de comunicacao com a impressora fiscal..." )
                              exit
                           else
                              exit
                           endif
                        enddo
                        cST1 := ""
                        for cProcura := 1 to 3
                            fread( cArquivo, @cRetorno, 1 )
                            if cRetorno = ","
                               cProcura := 4
                            else
                               cST1 = cST1 + cRetorno
                            endif
                        next cProcura
                        cST2 := ""
                        for cProcura := 1 to 3
                            fread( cArquivo, @cRetorno, 1 )
                            if cRetorno = "," .or. asc( cRetorno ) = 13
                               cProcura := 4
                            else
                               cST2 = cST2 + cRetorno
                            endif
                        next cProcura
                        fclose( cArquivo )
                        delete file( cDirDoMonitorBematech+"\Status.txt" )
                        cST1 := val( cST1 )
                        cST2 := val( cST2 )
                        if cST1 <> 0 .or. cST2 <> 0
                           cMsgRetorno := ""
                           cMsgRetorno := cMsgRetorno + ST1_BIT_7 + CRLF
                           cMsgRetorno := cMsgRetorno + ST1_BIT_6 + CRLF
                           cMsgRetorno := cMsgRetorno + ST1_BIT_5 + CRLF
                           cMsgRetorno := cMsgRetorno + ST1_BIT_4 + CRLF
                           cMsgRetorno := cMsgRetorno + ST1_BIT_3 + CRLF
                           cMsgRetorno := cMsgRetorno + ST1_BIT_2 + CRLF
                           cMsgRetorno := cMsgRetorno + ST1_BIT_1 + CRLF
                           cMsgRetorno := cMsgRetorno + ST1_BIT_0 + CRLF
                           cMsgRetorno := cMsgRetorno + ST2_BIT_7 + CRLF
                           cMsgRetorno := cMsgRetorno + ST2_BIT_6 + CRLF
                           cMsgRetorno := cMsgRetorno + ST2_BIT_5 + CRLF
                           cMsgRetorno := cMsgRetorno + ST2_BIT_4 + CRLF
                           cMsgRetorno := cMsgRetorno + ST2_BIT_3 + CRLF
                           cMsgRetorno := cMsgRetorno + ST2_BIT_2 + CRLF
                           cMsgRetorno := cMsgRetorno + ST2_BIT_1 + CRLF
                           cMsgRetorno := cMsgRetorno + ST2_BIT_0 + CRLF
                           // Verificando o ST1
                           if cSt1 >= 128; cMsgRetorno := cMsgRetorno + ST1_BIT_7 + CRLF ; cSt1 = cSt1 - 128; endif
                           if cSt1 >= 64;  cMsgRetorno := cMsgRetorno + ST1_BIT_6 + CRLF ; cSt1 = cSt1 - 64;  endif
                           if cSt1 >= 32;  cMsgRetorno := cMsgRetorno + ST1_BIT_5 + CRLF ; cSt1 = cSt1 - 32;  endif
                           if cSt1 >= 16;  cMsgRetorno := cMsgRetorno + ST1_BIT_4 + CRLF ; cSt1 = cSt1 - 16;  endif
                           if cSt1 >= 8;   cMsgRetorno := cMsgRetorno + ST1_BIT_3 + CRLF ; cSt1 = cSt1 - 8;   endif
                           if cSt1 >= 4;   cMsgRetorno := cMsgRetorno + ST1_BIT_2 + CRLF ; cSt1 = cSt1 - 4;   endif
                           if cSt1 >= 2;   cMsgRetorno := cMsgRetorno + ST1_BIT_1 + CRLF ; cSt1 = cSt1 - 2;   endif
                           if cSt1 >= 1;   cMsgRetorno := cMsgRetorno + ST1_BIT_0 + CRLF ; cSt1 = cSt1 - 1;   endif
                           // Verificando o ST2
                           if cSt2 >= 128; cMsgRetorno := cMsgRetorno + ST2_BIT_7 + CRLF ; cSt2 = cSt2 - 128; endif
                           if cSt2 >= 64;  cMsgRetorno := cMsgRetorno + ST2_BIT_6 + CRLF ; cSt2 = cSt2 - 64;  endif
                           if cSt2 >= 32;  cMsgRetorno := cMsgRetorno + ST2_BIT_5 + CRLF ; cSt2 = cSt2 - 32;  endif
                           if cSt2 >= 16;  cMsgRetorno := cMsgRetorno + ST2_BIT_4 + CRLF ; cSt2 = cSt2 - 16;  endif
                           if cSt2 >= 8;   cMsgRetorno := cMsgRetorno + ST2_BIT_3 + CRLF ; cSt2 = cSt2 - 8;   endif
                           if cSt2 >= 4;   cMsgRetorno := cMsgRetorno + ST2_BIT_2 + CRLF ; cSt2 = cSt2 - 4;   endif
                           if cSt2 >= 2;   cMsgRetorno := cMsgRetorno + ST2_BIT_1 + CRLF ; cSt2 = cSt2 - 2;   endif
                           if cSt2 >= 1;   cMsgRetorno := cMsgRetorno + ST2_BIT_0 + CRLF ; cSt2 = cSt2 - 1;   endif
                           MsgStop( cMsgRetorno, "Retorno da Impressora" )
                           exit
                        else
                           exit
                        endif
                     else
                        loop
                     endif
                  endif
                  MyWait(1)
                  _vezes_--
   enddo   
return

/////////////////////////////////////////////////////////////////////////////
// Descricao.: Funcao que retorno dados da impressora fiscal
// Parâmetros: nenhum
/////////////////////////////////////////////////////////////////////////////
function Retorno_Dados_Impressora_Fiscal
         _vezes_ := 5
         cArquivo:= ""
         do while _vezes_>0
                oWnd:SetMsg( "Verificando a existencia do arquivo Retorno.txt..." )
                if file( cDirDoMonitorBematech+"\Retorno.txt" ) .and. freadstr( file( cDirDoMonitorBematech+"\Retorno.txt" ) ) <> "0"
                        cArquivo        := fopen( cDirDoMonitorBematech+"\Retorno.txt" )
         cArquivoTamanho := fseek( cArquivo, 0, 2 )
         fclose( cArquivo )
         if cArquivoTamanho <> 0
                                cArquivo := fopen( cDirDoMonitorBematech+"\Retorno.txt" )
            cRetorno := " "
            cDados   := ""
            for cProcura := 1 to cArquivoTamanho
               fread( cArquivo, @cRetorno, 1 )
               cDados = cDados + cRetorno
            next cProcura
            exit
         endif
      endif
                MyWait(1)
                _vezes_--
   enddo
        if !empty(cArquivo)
           fclose( cArquivo )
           MsgStop( cDados, "Retorno dos Dados da Impressora" )
        else
           MsgStop( "Nenhum retorno foi encontrado", "Retorno dos Dados da Impressora" )
        endif
return

/////////////////////////////////////////////////////////////////////////////
// Descricao: Funcoes de perfumaria
/////////////////////////////////////////////////////////////////////////////
Function SCLogo(hDC,cPrompt,oFont,oWnd) // oWnd:nHeight-300
   DrawRotated(hDC, cPrompt, (oWnd:nHeight-110)+1, 1, CLR_WHITE, CLR_BLACK, oFont)
   DrawRotated(hDC, cPrompt, (oWnd:nHeight-110)-1, 0, CLR_GRAY , CLR_BLACK, oFont)
   return

Function SayRotated(oWnd,Y,X,cPrompt,oFont,nClrText,nClrPane,l3D)
   Local hDC:=oWnd:hDC
   DEFAULT nClrText:=CLR_BLUE, l3D:=.T.
   IF l3D
      DrawRotated(hdc, cPrompt, Y + 1, X + 1, CLR_BLACK,nClrPane,oFont)
      DrawRotated(hdc, cPrompt, Y - 1, X - 1, nClrText,nClrPane,oFont)
   ENDIF
   DrawRotated(hdc, cPrompt, Y , X , nClrText,nClrPane,oFont)
   return

Function DrawRotated(hDC,cPrompt,Y,X,nClrText,nClrPane,oFont)
   Local hOldFont, nOldMode, nOldClrText, nOldClrPane
   nOldClrText:=SetTextColor(hDC,nClrText)
   if nClrPane<>nil
      nOldClrPane:=SetBkColor(hDC,nClrPane)
   else
      nOldBkMode:=SetBkMode(hDC,1)
   endif
   hOldFont:=SelectObject(hDC,oFont:hFont)
   TextOut(hDC,Y,X,cPrompt,Len(cPrompt))
   SelectObject(hDC,hOldFont)
   if nClrPane<>nil
      SetBkColor(hDC,nOldClrPane)
   else
      SetBkMode(hDC,nOldBkMode)
   endif
   SetTextColor(hDC,nOldClrText)
   return

Function DrawLogo( oWnd, cBitMap )
  local hBmp := LoadBitmap( GetResources(), cBitmap )
  DrawBitmap( oWnd:hDC, hBmp, 20, 20 )
  DeleteObject( hBmp )
  return nil

Function Refr_Wnd(hDC, Y , X, cPrompt , oFont)
   LOCAL hWnd, nColor:=255
   LOCAL aRect, nSteps
   LOCAL oBrush, nI
   LOCAL aCoor
   IF lInit
      aCoor:=GetCoors(GetDeskTopWindow()) // Coordenadas de ventana
      IF aCoor[3]>=768                    // si > 600x800 la centra
         aCoor[1]:=(aCoor[3]-768)/2
         aCoor[2]:=(aCoor[4]-1024)/2
         aCoor[3]:=600
         aCoor[4]:=800
         oWnd:Move(aCoor[1],aCoor[2],aCoor[4],aCoor[3])
      ELSE
         oWnd:Maximize()
      ENDIF
      lInit:=.F.
   ENDIF
   hWnd  :=oWnd:hWnd
   aRect :=GetClientRect(hWnd)
   nSteps:=(aRect[3]-aRect[1])/3
   aRect[3]=0
   FOR nI=1 to nSteps
       aRect[3]+=3
       DEFINE BRUSH oBrush COLOR RGB(nColor,nColor,nColor)
       FillRect(hDC,aRect,oBrush:hBrush)
       RELEASE BRUSH oBrush
       aRect[1]+=3
       nColor-=1
   NEXT nI
   SetBkMode(hDC,1)
   SetTextColor(hDC,CLR_WHITE)
   DrawText(hDC,cPrompt,{oWnd:nHeight-135+1,oWnd:nWidth-180+1,oWnd:nHeight-10,oWnd:nWidth-10})
   SetTextColor(hDC,CLR_GRAY)
   DrawText(hDC,cPrompt,{oWnd:nHeight-135-1,oWnd:nWidth-180-1,oWnd:nHeight-10,oWnd:nWidth-10})
   //DrawRotated(hDC, "5Volution", Y+250+2, X+2, CLR_GRAY , CLR_BLACK, oFnt3)
   //DrawRotated(hDC, "5Volution", Y+250-2, X-2, CLR_WHITE, CLR_BLACK, oFnt3)
   RETURN (NIL)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Exemplo para a utilização das Funções do TEF, utilizando a LIB
// BEMAFI.LIB
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#define FileTop(nHandle) (FSEEK(nHandle, 0, 1))
#define FileSize(nHandle, tam) ( tam := FSEEK(nHandle, 0, FS_END) ) //Escreve em tam o tamanho do arquivo
#define FilePos (nHandle, pos) ( pos := FSEEK(nHandle, 0, 1)      ) //Escreve em pos a posicao atual
#define FileaPos(nHandle, pos) ( FSEEK(nHandle, pos, FS_SET)      ) //Vai para a pos

/////////////////////////////////////////////////////////////////////////////
// Fun‡„o: VerificaGerenciador
// Verifica se o Gerenciador Padr„o est  ativo.
/////////////////////////////////////////////////////////////////////////////
function VerificaGerenciador
         if empty( cDirDoGerencidorTEF+"\tef_dial.exe" )
            MsgStop( "Gerenciador Padrao nao encontrado em "+cDirDoGerencidorTEF )
            return 0
         endif
         oWnd:SetMsg( "Aguarde, acionando o gerenciador padrao..." )
         iVezes      := 7
         sArq        := fcreate( "INTPOS.001" )
         sPathOrigem := ".\INTPOS.001"
         do while iVezes<>0
            if file( cDirDoGerencidorTEF+"\RESP\ATIVO.001" )
               return 1
               exit
            else
               iVezes--
               sLinhas := "000-000 = ATV"        + chr( 13 ) + chr( 10 ) + ;
                          "001-000 = 0000000001" + chr( 13 ) + chr( 10 ) + ;
                          "999-999 = 0"
               fwrite( sArq, @sLinhas, len( sLinhas ) )
               __copyfile( sPathOrigem, cDirDoGerencidorTEF+"\RESP\INTPOS.tmp" )
               FRename( cDirDoGerencidorTEF+"\RESP\INTPOS.tmp", cDirDoGerencidorTEF+"\RESP\INTPOS.001" )
               MyWait(3)
               if file( cDirDoGerencidorTEF+"\RESP\INTPOS.STS" )
                  return 1
                  exit
               endif
            endif
         enddo
         return 0

/////////////////////////////////////////////////////////////////////////////
// Fun‡„o: VendaCartao
// Ativa o Gerenciador Padr„o, gerando o arquivo INTPOS.001, efetuando a
// transa‡„o.
/////////////////////////////////////////////////////////////////////////////
function VendaCartao
         delete file( cDirDoGerencidorTEF+"\RESP\INTPOS.001" )
         sArq        := fcreate( "INTPOS.001" )
         sPathOrigem := ".\INTPOS.001"
         //////////////////////////////////////
         // Recebendo o N£mero do Cupom Fiscal
         ////////////////////////////////////// 
         Comunica_Impressora_Fiscal( "055", "" )
         sNCupom  := ""
         sDados   := ""
         sRetorno := " "
         for iConta := 1 to 9
             fread_bema( iPorta, @sRetorno, 1 )
             sDados += sRetorno
         next
         sNCupom := right( sDados, 6 )
         ////////////////////////////////////////
         // Recebendo o Subtotal do Cupom Fiscal
         ////////////////////////////////////////
         Comunica_Impressora_Fiscal( "080", "" )
         sSubtotal := ""
         sDados    := ""
         sRetorno  := " "
         for iConta := 1 to 17
             fread_bema( iPorta, @sRetorno, 1 )
             sDados += sRetorno
         next
         sSubtotal2 := right( sDados, 14 )
         sSubtotal  := right( sDados, 12 )
         ////////////////////////////////
         // Prepara o arquivo INTPOS.001
         ////////////////////////////////
         sLinhas     := "000-000 = CRT"          + chr( 13 ) + chr( 10 ) + ;
                        "001-000 = 0000000001"   + chr( 13 ) + chr( 10 ) + ;
                        "002-000 = " + sNCupom   + chr( 13 ) + chr( 10 ) + ;
                        "003-000 = " + sSubtotal + chr( 13 ) + chr( 10 ) + ;
                        "004-000 ="              + chr( 13 ) + chr( 10 ) + ;
                        "999-999 = 0"            + chr( 13 ) + chr( 10 )
         fwrite( sArq, @sLinhas, len( sLinhas ) )
         __copyfile( sPathOrigem, cDirDoGerencidorTEF+"\RESP\INTPOS.tmp" )
         FRename( cDirDoGerencidorTEF+"\RESP\INTPOS.tmp", cDirDoGerencidorTEF+"\RESP\INTPOS.001" )
         //////////////////////////////////////////////////////////////////
         // Recebendo o arquivo INTPOS.001 com as informacoes da Transacao
         //////////////////////////////////////////////////////////////////
         iVezes      := 7
         do while iVezes<>0
            oWnd:SetMsg( "Recebendo o retorno da transacao..." )
            if file( cDirDoGerencidorTEF+"\RESP\INTPOS.001" ) .and. freadstr( file( cDirDoGerencidorTEF+"\RESP\INTPOS.001" ) ) <> "0"
               sArq    := fopen( cDirDoGerencidorTEF+"\RESP\INTPOS.001" )
               iTamArq := fseek( sArq, 0, 2 )
               fclose( sArq )
               sArq        := fopen( cDirDoGerencidorTEF+"\RESP\INTPOS.001" )
               sRetorno    := " "
               sDadosTEF   := ""
               sDados      := ""
               for iConta := 1 to iTamArq
                   sRetorno := " "
                   fread( sArq, @sRetorno, 1 )
                   if asc( sRetorno ) = 10
                      if left( sDados, 3 ) = "029"
                         sDados := stuff( sDados, 1, 10, "" )
                         sDados := strtran( sDados, '"', "" )
                         sDadosTEF += sDados + chr( 10 )
                      endif 
                      sDados := sRetorno := ""
                   endif
                   sDados += sRetorno
               next
               fclose( sArq )
               oWnd:SetMsg( "Imprimindo o TEF..." )
               //////////////////////////////////////////////////
               // Programa a Forma de Pagamento "Cartao credito"
               //////////////////////////////////////////////////
               Comunica_Impressora_Fiscal( "053", "15|Cartao credito" )
               sRetorno := " "
               sDados   := ""
               for iConta := 1 to 5
                   fread_bema( iPorta, @sRetorno, 1 )
                   sDados += sRetorno
               next
               sIndiceForma := right( sDados, 2 )
               ////////////////////////////////////////////////
               // Efetua a Forma de Pagamento "Cartao credito"
               ////////////////////////////////////////////////
               Comunica_Impressora_Fiscal( "023",  sIndiceForma+"|"+sSubtotal2 )
               ////////////////////////////////////////
               // Termina o Fechamento do Cupom Fiscal
               ////////////////////////////////////////
               Comunica_Impressora_Fiscal( "082", "Obrigado, volte sempre !" )
               /////////////////////////////////////////////////////////////////
               // Simula um retorno do TEF
               /////////////////////////////////////////////////////////////////
               SimulaTEF()
               /////////////////////////////////////////////////////////////////
               // Abre Comprovante N„o Fiscal Vinculado para a impress„o do TEF
               /////////////////////////////////////////////////////////////////
               Comunica_Impressora_Fiscal( "002", "Cartao" )
               //////////////////////////
               // Imprime o texto do TEF
               //////////////////////////
               Comunica_Impressora_Fiscal( "200", sDadosTEF )
               //////////////////////////////
               // Fecha o Comprovante do TEF
               //////////////////////////////
               Comunica_Impressora_Fiscal( "027", "" )
               exit
            else
               iVezes--
               loop
            endif
         enddo
         return

/////////////////////////////////////////////////////////////////////////////
// Fun‡„o: ADM
// Abre a tela Administrativa da Bandeira
/////////////////////////////////////////////////////////////////////////////
function ADM
         sArqR        := fcreate( "INTPOS.001" )
         sPathOrigem  := ".\INTPOS.001"
         sLinhas := "000-000 = ADM"        + chr( 13 ) + chr( 10 ) + ;
                    "001-000 = 0000000001" + chr( 13 ) + chr( 10 ) + ;
                    "999-999 = 0"
         fwrite( sArqR, @sLinhas, len( sLinhas ) )
         __copyfile( sPathOrigem, cDirDoGerencidorTEF+"\RESP\INTPOS.tmp" )
         FRename( cDirDoGerencidorTEF+"\RESP\INTPOS.tmp", cDirDoGerencidorTEF+"\RESP\INTPOS.001" )
         return

function SimulaTEF()
         sArq        := fcreate( "INTPOS.001" )
         sPathOrigem := ".\INTPOS.001"
         sLinhas1    := "000-000 = CRT                             " + chr( 13 ) + chr( 10 ) + ;
                        "001-000 = 000005                          " + chr( 13 ) + chr( 10 ) + ;
                        "002-000 =                                 " + chr( 13 ) + chr( 10 ) + ;
                        "003-000 = 1590                            " + chr( 13 ) + chr( 10 ) + ;
                        "004-000 = 0                               " + chr( 13 ) + chr( 10 ) + ;
                        "009-000 = 0                               " + chr( 13 ) + chr( 10 ) + ;
                        "010-000 = REDECARD                        " + chr( 13 ) + chr( 10 ) + ;
                        "011-000 = 10                              " + chr( 13 ) + chr( 10 ) + ;
                        "012-000 = 000000000007                    " + chr( 13 ) + chr( 10 ) + ;
                        "015-000 = 2611155308                      " + chr( 13 ) + chr( 10 ) + ;
                        "022-000 = 26112003                        " + chr( 13 ) + chr( 10 ) + ;
                        "023-000 = 155308                          " + chr( 13 ) + chr( 10 ) + ;
                        "027-000 = 261103000000260007RD01          " + chr( 13 ) + chr( 10 ) + ;
                        "028-000 = 33                              " + chr( 13 ) + chr( 10 ) + ;
                        "029-001 = ' REDECARD'                     " + chr( 13 ) + chr( 10 ) + ;
                        "029-002 = ''                              " + chr( 13 ) + chr( 10 ) + ;
                        "029-003 = ''                              " + chr( 13 ) + chr( 10 ) + ;
                        "029-004 = ''                              " + chr( 13 ) + chr( 10 )
         sLinhas2    := "029-005 = 'TERMINAL No. RD000000'         " + chr( 13 ) + chr( 10 ) + ;
                        "029-006 = 'ESTAB. No. 000000009999999'    " + chr( 13 ) + chr( 10 ) + ;
                        "029-007 = '------------------------------'" + chr( 13 ) + chr( 10 ) + ;
                        "029-008 = 'MASTERCARD VENDA-CR'           " + chr( 13 ) + chr( 10 ) + ;
                        "029-009 = '5390581381691605'              " + chr( 13 ) + chr( 10 ) + ;
                        "029-010 = 'DATA/HORA VALIDADE'            " + chr( 13 ) + chr( 10 ) + ;
                        "029-011 = '26/11/03 15:53:08 05/09'       " + chr( 13 ) + chr( 10 ) + ;
                        "029-012 = 'AUTENT:'                       " + chr( 13 ) + chr( 10 ) + ;
                        "029-013 = '260007'                        " + chr( 13 ) + chr( 10 ) + ;
                        "029-014 = 'C.V.: AUTORIZ.'                " + chr( 13 ) + chr( 10 ) + ;
                        "029-015 = '7 123456'                      " + chr( 13 ) + chr( 10 ) + ;
                        "029-016 = '------------------------------'" + chr( 13 ) + chr( 10 ) + ;
                        "029-017 = ''                              " + chr( 13 ) + chr( 10 ) + ;
                        "029-018 = '### OPERACAO SIMULADA ###'     " + chr( 13 ) + chr( 10 ) + ;
                        "029-019 = '### NENHUM VALOR SERA ###'     " + chr( 13 ) + chr( 10 )
         sLinhas3    := "029-020 = '### CREDITADO OU DEBITADO ###' " + chr( 13 ) + chr( 10 ) + ;
                        "029-021 = ''                              " + chr( 13 ) + chr( 10 ) + ;
                        "029-022 = 'APROVADO'                      " + chr( 13 ) + chr( 10 ) + ;
                        "029-023 = ''                              " + chr( 13 ) + chr( 10 ) + ;
                        "029-024 = 'VALOR: 1590'                   " + chr( 13 ) + chr( 10 ) + ;
                        "029-025 = ''                              " + chr( 13 ) + chr( 10 ) + ;
                        "029-026 = ''                              " + chr( 13 ) + chr( 10 ) + ;
                        "029-027 = ''                              " + chr( 13 ) + chr( 10 ) + ;
                        "029-028 = 'ASSINATURA DO CLIENTE'         " + chr( 13 ) + chr( 10 ) + ;
                        "029-029 = ''                              " + chr( 13 ) + chr( 10 ) + ;
                        "029-030 = 'RECONHECO E PAGAREI A'         " + chr( 13 ) + chr( 10 ) + ;
                        "029-031 = 'DIVIDA AQUI APRESENTADA'       " + chr( 13 ) + chr( 10 ) + ;
                        "029-032 = ''                              " + chr( 13 ) + chr( 10 ) + ;
                        "029-033 = ' (SiTef)'                      " + chr( 13 ) + chr( 10 ) + ;
                        "030-000 = Transacao OK                    " + chr( 13 ) + chr( 10 ) + ;
                        "999-999 = 0                               " + chr( 13 ) + chr( 10 )
         sLinhas     := sLinhas1 + sLinhas2 + sLinhas3
         fwrite( sArq, @sLinhas, len( sLinhas ) )
         __copyfile( sPathOrigem, cDirDoGerencidorTEF+"\RESP\INTPOS.tmp" )
         FRename( cDirDoGerencidorTEF+"\RESP\INTPOS.tmp", cDirDoGerencidorTEF+"\RESP\INTPOS.001" )
         return .t.


@braços :?)
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4544
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 806 vezes
Mens.Curtidas: 245 vezes



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro