Este código usa, a título de exemplo, a ECF Bematech. Poderia ter sido utilizada qualquer outra. Basta substituir os métodos da Bematech pelos métodos da ECF desejada. Passos para encerramento de venda 1 - subtotalizar cupom 2 - tratar pagamento com cartão 3 - iniciar fechamento cupom fiscal 4 - efetuar formas de pagamento (dinheiro, cartao, cheque) 5 - terminar fechamento cupom 6 - tratar consulta de cheque (obrigatorio para redecard) 7 - imprimir cupom(s) tef objetoComEventos EasyTEF // "globais" para serem usadas nos eventos do EasyTEF caracter formaPgto caracter valorPgto // "globais" para serem usadas na consulta de cheque real valorCheque estrutura TipoDadosConsultaCheque logico consultaAprovada generico cupomTEF caracter nomeRede caracter nsu caracter finalizacao real valor fim estrutura TipoDadosConsultaCheque dadosConsultaCheque // procedimentos procedimento carregarEasyTEF() fonte f f.nome = "Tahoma" f.tamanho = 11 EasyTEF = novoObjeto("EasyTEF.EasyTEFDiscado") EasyTEF.fontFormMsgOperador = f se usarAmexRedeCardVisanet() entao EasyTEF.gerenciador = tgGerenciadorPadrao senao usarHipercard() entao EasyTEF.gerenciador = tgHipercard senao usarRedesLocaisTalComoBrasilcard() entao EasyTEF.gerenciador = tgTecban senao usarPay&Go() entao EasyTEF.gerenciador = tgPayGo fim se EasyTEF.ativo = verdadeiro fim procedimento procedimento consultarCheque() // aqui, estamos fazendo uma consulta fixa de cheque. Esses dados devem ser parametrizados de acordo // com o cheque passado pelo cliente valorCheque = valor total em cheque informado no aplicativo EasyTEF.consultarCheque(formatarComVirgula(valorCheque), numeroCupomFiscal(), "", "F", "11111111111", hoje() + 30, "104", "001", "", "001", "", "001", "") //De acordo com a especificação TEF, quando a consulta de cheque é aprovada, //o cupom fiscal deve ser fechado imediatamente se EasyTEF.transacaoAprovada entao dadosConsultaCheque.consultaAprovada = verdadeiro dadosConsultaCheque.cupomTEF = EasyTEF.imagemCupomTEF() dadosConsultaCheque.finalizacao = EasyTEF.valorCampo027_000() dadosConsultaCheque.nomeRede = EasyTEF.valorCampo010_000() dadosConsultaCheque.nsu = EasyTEF.valorCampo012_000() dadosConsultaCheque.valor = EasyTEF.valorCampo003_000() encerrarVenda() senao dadosConsultaCheque.consultaAprovada = falso dadosConsultaCheque.cupomTEF = nulo dadosConsultaCheque.finalizacao = "" dadosConsultaCheque.nomeRede = "" dadosConsultaCheque.nsu = "" dadosConsultaCheque.valor = 0 fim se fim procedimento procedimento vetorParaCaracter(generico a, porReferencia caracter s) inteiro i s = "" para i = limiteInferiorVetor(a) ate limiteSuperiorVetor(a) faca s = ConcatenarCaracter(s, a(i), CARRIAGE_RETURN, LINE_FEED) fim para fim procedimento procedimento encerrarVenda() real valorTotal real valorDinheiro real valorCartao generico parametros caracter desconto caracter tipoDesc caracter valor inteiro i logico primeiroCartao logico ultimoCartao tratarFormasDePagamentoPeloAplicativo() // ****************************** // PASSO 1 - subtotalizar cupom // ****************************** parametros = vetor("") valorTotal = EasyTEF.tratarCupomFiscal(tmeSubTotalizarCupom, parametros) // *************************************** // PASSO 2 - tratar pagamento com cartão // *************************************** se houvePagamentoComCartao() entao valorCartao = 0 EasyTEF.numeroDeCartoes = quantidadeDeCartoesQueFecharaoAVenda() para i = 1 ate EasyTEF.numeroDeCartoes faca valorCartao = valorCartao + valorCartaoCorrente() // esta função deve gerar e gravar um numero sequencial unico no // banco de dados e passa-lo ao componente EasyTEF.identificacao = funcaoGeradoraDeSequenciasUnicos() EasyTEF.imprimirComprovante = falso primeiroCartao = (i == 1) ultimoCartao = (i == EasyTEF.numeroDeCartoes) EasyTEF.pagarNoCartao(valorCartaoCorrente(), primeiroCartao, ultimoCartao) se nao EasyTEF.transacaoAprovada entao abortarFechamentoDeCupom() fim se fim para formaPgto = "Cartao" fim se se valorTotal / 100 == 0 entao levantar excecao com a mensagem "Cupom fiscal sem valor. Operacao cancelada." senao valorDinheiro = valor total em dinheiro informado no aplicativo valorCheque = valor total em cheque informado no aplicativo fim se // ******************************************* // PASSO 3 - iniciar fechamento cupom fiscal // ******************************************* desconto = 'D' tipoDesc = '$' Valor = '0' // neste caso, não estamos dando qualquer desconto para a compra parametros = vetor(desconto, tipoDesc, valor) EasyTEF.tratarCupomFiscal(tmeIniciarFechamentoCupomFiscal, parametros) // ****************************************************************** // PASSO 4 - efetuar formas de pagamento (dinheiro, cartao, cheque) // ****************************************************************** se houvePagamentoComDinheiro() entao parametros = vetor("Dinheiro", formatarComVirgula(valorDinheiro)) EasyTEF.tratarCupomFiscal(tmeEfetuarFormaPagamento, parametros) fim se se houvePagamentoComCheque() entao parametros = vetor("Cheque", formatarComVirgula(valorCheque)) EasyTEF.tratarCupomFiscal(tmeEfetuarFormaPagamento, parametros) fim se se houvePagamentoComCartao() entao se EasyTEF.multiplosCartoes() entao para i = LimiteInferiorVetor(EasyTEF.valoresCartoes) ate LimiteSuperiorVetor(EasyTEF.valoresCartoes) faca parametros = vetor("Cartao", FormatarComVirgula(EasyTEF.valoresCartoes(i))) EasyTEF.tratarCupomFiscal(tmeEfetuarFormaPagamento, parametros) fim para senao parametros = vetor("Cartao", formatarComVirgula(valorCartao)) EasyTEF.tratarCupomFiscal(tmeEfetuarFormaPagamento, parametros) fim se fim se // ************************************* // PASSO 5 - terminar fechamento cupom // ************************************* parametros = vetor("Mensagem desejada de fechamento do cupom...") EasyTEF.tratarCupomFiscal(tmeTerminarFechamentoCupom, parametros) // ***************************************************************** // PASSO 6 - tratar consulta de cheque (obrigatorio para redecard) // ***************************************************************** se houveConsultaAprovadaDeCheque() entao formaPgto = "Cheque" valorPgto = formatarComVirgula(valorCheque) EasyTEF.tratarConsultaCheque(dadosConsultaCheque.cupomTEF, dadosConsultaCheque.nomeRede, dadosConsultaCheque.nsu, dadosConsultaCheque.finalizacao, NumeroCupom)) fim se // ********************************* // PASSO 7 - imprimir cupom(s) tef // ********************************* formaPgto = "Cartao" valorPgto = formatarComVirgula(valorCartao) se houvePagamentoComCartao() e (EasyTEF.numeroDeCartoes == 1) entao EasyTEF.imprimirCupomECF(EasyTEF.imagemCupomTEF, True, True) senao EasyTEF.imprimirCuponsECF() fim se fim procedimento // ********* // EVENTOS // ********* constante BEMA_RETORNO_OK = 1 evento EasyTEF_OnAbrirComprovanteNaoFiscalVinculado(porReferencia logico operacaoECFOk, caracter valorCupomAtual) se valorCupomAtual = "0,00" entao valorCupomAtual = valorPgto fim se operacaoECFOk = Bematech_FI_AbreComprovanteNaoFiscalVinculado(formaPgto, valorCupomAtual, NumeroCupom) == BEMA_RETORNO_OK fim evento evento EasyTEF_OnEfetuarFormaPagamento(porReferencia logico operacaoECFOk, generico params, caracter Retorno) operacaoECFOk = Bematech_FI_EfetuaFormaPagamento(params(0), params(1)) == BEMA_RETORNO_OK fim evento evento EasyTEF_OnEncerrarCupomFiscal() Bematech_FI_FechaComprovanteNaoFiscalVinculado() Bematech_FI_CancelaCupom() fim evento evento EasyTEF_OnFecharComprovanteNaoFiscalVinculado() Bematech_FI_FechaComprovanteNaoFiscalVinculado fim evento evento EasyTEF_OnFecharRelatorioGerencial(porReferencia logico operacaoECFOk) operacaoECFOk = Bematech_FI_FechaRelatorioGerencial == BEMA_RETORNO_OK fim evento evento EasyTEF_OnImpressoraTemPapel(porReferencia logico operacaoECFOk) inteiro a inteiro s1 inteiro s2 a = 0 s1 = 0 s2 = 0 Bematech_FI_VerificaEstadoImpressora(a, s1, s2) operacaoECFOk = nao (s1 >= 128) //fim de papel fim evento evento EasyTEF_OnImprimirRelatorioGerencial(generico imagemCupomTEF, porRefencia logico impressaoOk) caracter s vetorParaCaracter(imagemCupomTEF, s) impressaoOk = Bematech_FI_RelatorioGerencial(s) == BEMA_RETORNO_OK fim evento evento EasyTEF_OnIniciarFechamentoCupomFiscal(porReferencia logico operacaoECFOk, generico params, caracter Retorno) operacaoECFOk = Bematech_FI_IniciaFechamentoCupom(params(0), params(1), params(2)) == BEMA_RETORNO_OK fim evento evento EasyTEF_OnSubTotalizarCupom(porReferencia logico operacaoECFOk, generico params, caracter Retorno) Retorno = gerarEspacos(14) operacaoECFOk = Bematech_FI_SubTotal(Retorno) == BEMA_RETORNO_OK fim evento evento EasyTEF_OnTerminarCancelamentoMultiplosCartoes() limparTela() fim evento evento EasyTEF_OnTerminarFechamentoCupom(porReferencia logico operacaoECFOk, generico params, caracter Retorno) operacaoECFOk = Bematech_FI_TerminaFechamentoCupom(params(0)) == BEMA_RETORNO_OK fim evento evento EasyTEF_OnUsarComprovanteNaoFiscalVinculado(generico imagemCupomTEF, porReferencia logico impressaoOk) caracter s vetorParaCaracter(imagemCupomTEF, s) impressaoOk = Bematech_FI_UsaComprovanteNaoFiscalVinculado(s) == BEMA_RETORNO_OK fim evento evento EasyTEF_OnValorPersonalizadoReq(porReferencia caracter campo, valor) campo = "777-777" Valor = "Teste Redecard" fim evento