Quando o assunto é Homologação de TEF, passam varias preocupações na cabeça do desenvolvedor, uma delas é a impressão da resposta da operadora do cartão (bandeira). Abrir o arquivo, buscar o campo a ser impresso, controlar a impressão por linhas em um relatório gerencial, tratar os erros nos testes de desligamento etc... São varias coisas que você desenvolvedor não necessita mais se preocupar!

Hoje conheceremos melhor o recurso, ou a função iTEF_ImprimirResposta_ECF_Daruma. Com esta função você passa apenas o PATH onde este arquivo de resposta “IntPos.001” se encontra, e a função iTEF_ImprimirResposta_ECF_Daruma imprime pra você o arquivo! Esta função também lhe permite travar o teclado e devolve se a impressão foi realizada com sucesso ou não.

Caso não tenha tido sucesso no envio você deverá proceder os passos do TEF, continuar impressão sim, ou não... E pode verificar os erros com nosso tratamento de retornos.

Parâmetros

szArquivo = Caminho completo + nome do arquivo que você deseja imprimir: C:\TEF_DIAL\RESP\INTPOS.001

bTravarTeclado = Função do tipo: Int/Boolean

1 - True - Trava Teclado 
0 - False - Não Trava Teclado

Forma de Pagamento = Forma de Pagamento referente ao ultimo Cupom Fiscal (No caso de transação com múltiplos cartões chamar a função na ordem)

Vejamos na prática

C#

[DllImport("DarumaFrameWork.dll")]
	public static extern int iTEF_ImprimirResposta_ECF_Daruma(String szArquivo, 
	Boolean bTravarTeclado);
Declaração
private void BT_CupomFiscal_Click(object sender, EventArgs e)
 
{
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = 
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iCFAbrirPadrao_ECF_Daruma();
	 
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = 
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iCFVenderResumido_ECF_Daruma
	("II", "0,10", "Produto Teste", "789567893456");
	 
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = 
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iCFTotalizarCupomPadrao_ECF_Daruma();
	 
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = 
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp
	.iCFEfetuarPagamentoFormatado_ECF_Daruma("MasterCard", "00000100");
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = 
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iCFEncerrarPadrao_ECF_Daruma();
	 
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.
	DarumaFramework_Mostrar_Retorno(DarumaFramework_DLL.DarumaFramework_
	Declaracoes_CSharp.iRetorno);
}
Emissão do Cupom Fiscal
private void BT_Tef_Click(object sender, EventArgs e)
{
String diretorio= "C:/Tef_Dial/Resp/Intpos.001";
 
DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = 
DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.
iTEF_ImprimirRespostaCartao_ECF_Daruma(diretorio, true, "MasterCard", "00000100");
}
No código acima foi emitido um cupom fiscal, onde utilizei a forma de pagamento MasterCard para o pagamento de 1,00R$
private void BT_FecharDocumento_Click(object sender, EventArgs e)
 
{
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = 
	DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iTEF_Fechar_ECF_Daruma();
}
Encerramento
function iTEF_ImprimirResposta_ECF_Daruma(szArquivo:String; 
bTravarTeclado:Boolean):Integer; StdCall; External 'DarumaFramework.dll';
 
Int_Retorno:= iTEF_ImprimirResposta_ECF_Daruma(Str_Path_Arquivo_Resp_TEF,false);
Delphi
Public Declare Function iTEF_ImprimirResposta_ECF_Daruma Lib "DarumaFramework.dll" 
(ByVal szArquivo As String, ByVal bTravarTeclado As Boolean) As Integer
 
iRetorno = iTEF_ImprimirResposta_ECF_Daruma(Str_Path_Arquivo_Resp_TEF, 
True, "2", "00000100")
VB6

Controle de Impressão pelo XML

Quando se vai homologar TEF e é necessário a impressão da resposta da operadora só que em um determinado intervalo de linhas para que possa ser verificado o Status da Impressora.

Você deve estar se perguntando se há possibilidade de verificar isto na função iTEF_ImprimirResposta_ECF_Daruma? Tem sim... e isto é controlado pelo XML!

No XML tem uma chave chamada X onde X é o numero de linhas na impressão do TEF, ou seja em intervalos “de X em X”..

O comando enviará as linhas do arquivo de 3 em 3 linhas.

000-000 = CRT
001-000 = 0000000299
002-000 = 000299
003-000 = 50,00
009-000 = 0
010-000 = AMEX
011-000 = 10
012-000 = 030969
015-000 = 1803111923
022-000 = 18032004
023-000 = 111923
027-000 = 030969
028-000 = 16
029-001 = "            AMERICAN EXPRESS"
029-002 = "        COMPROVANTE DE OPERACAO"
029-003 = "         !!!!! SIMULACAO !!!!!"
029-004 = "AMEX CARD  376472540701007         12/04"
029-005 = "ESTAB.     AMERICAN EXPRESS - BRZ "
029-006 = "           Av Maria Coelho Aguiar "
029-007 = "           9912801792     "
029-008 = "TERM=70000071   DOC=030969   LOTE=000001"
029-009 = "18/03/04 11:19   AUTORIZ.=123456   ONL-X"
029-010 = "VENDA CREDITO A VISTA"
029-011 = "VALOR VENDA:               50,00"
029-012 = "RECONHECO E PAGAREI A IMPORTANCIA ACIMA."
029-013 = "***TESTE DARUMA***/*/***TESTE DARUMA***"
029-014 = ""
029-015 = "     ______________________________"
029-016 = "      GUILHERME SILVEIRA DE MORAES"
030-000 = AUTORIZADO123456
040-000 = AMEX CARD
999-999 = 0