Olá pessoal,
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.
Abrir o arquivo, buscar o campo a ser impresso, controlar a impressão por linhas, tratar os erros nos testes de desligamento, e por ai vai. São varias coisas que você desenvolvedor não necessita mais se preocupar!
É isto ai! Com a DarumaFramework.dll tudo isto muda.
Hoje conheceremos melhor dois recursos que facilitam o trabalho e o controle da operação de impressão do comprovante TEF.
As funções na DarumaFramework.dll responsáveis por estas impressões são:
- iTEF_ImprimirResposta_ECF_Daruma
- iTEF_ImprimirRespostaCartao_ECF_Daruma
Estas funções servem para a impressão do comprovante de crédito/débito, já realizando a leitura do arquivo de resposta do TEF para enviar a impressão apenas o texto que deverá sair no comprovante.
Impressão de uma transação
Função: iTEF_ImprimirResposta_ECF_Daruma
A função iTEF_ImprimirResposta_ECF_Daruma é utilizada para a impressão de apenas uma transação no Cupom Fiscal, seus parâmetros são apenas: PATH (diretório do arquivo da resposta TEF) e travamento de teclado (Sim/Não).
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) para travar o teclado (padrão) durante a impressão do comprovante |
Na prática:
C(Sharp)
[DllImport("DarumaFrameWork.dll")]
public static extern int iTEF_ImprimirResposta_ECF_Daruma(String szArquivo, Boolean bTravarTeclado);
private void BT_Tef_Click(object sender, EventArgs e)
{
Declaracoes.iRetorno = Declaracoes.iCFAbrirPadrao_ECF_Daruma();
Declaracoes.iRetorno = Declaracoes.iCFVenderResumido_ECF_Daruma("F1", "2,00", "9233238923", "Macarrão");
Declaracoes.iRetorno = Declaracoes.iCFTotalizarCupomPadrao_ECF_Daruma();
Declaracoes.iRetorno = Declaracoes.iCFEfetuarPagamento_ECF_Daruma("Cartao", "2,00", "Pagamento em cartão!");
Declaracoes.iRetorno = Declaracoes.iCFEncerrarPadrao_ECF_Daruma();
//Emissão do cupom fiscal utilizando a forma de pagamento cartão.
if (RB_Sim.Checked == true)
{
Declaracoes.iRetorno = Declaracoes.iTEF_ImprimirResposta_ECF_Daruma("C:/Tef_Dial/Resp/Intpos.001", true);
Declaracoes.TrataRetorno(Declaracoes.iRetorno);
}
else
{
Declaracoes.iRetorno = Declaracoes.iTEF_ImprimirResposta_ECF_Daruma("C:/Tef_Dial/Resp/Intpos.001", false);
Declaracoes.TrataRetorno(Declaracoes.iRetorno);
}
// Impressão do comprovante através da função iTEF_ImprimirResposta_ECF_Daruma.
Declaracoes.iRetorno = Declaracoes.iTEF_Fechar_ECF_Daruma();
}
Delphi:
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);
VB6:
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)
Podemos observar que não foi necessária a passagem da forma de utilizada, isto porque utilizamos apenas uma. Porém, caso seja feita a transação de mais de um cartão para a impressão deverá ser feita pelo método:
Impressão de múltiplas transações
Função: iTEF_ImprimirRespostaCartao_ECF_Daruma.
Definição
Esta função nos permite imprimir mais de um comprovante das transações de credito/débito que foram feitas no Cupom Fiscal, passando como parâmetros: PATH (diretório do arquivo da resposta TEF), travamento de teclado (Sim/Não), forma de pagamento e valor da operação.
Os parâmetros da forma de pagamento e valor da operação é para que seja possível a impressão de todos os comprovantes das transações efetuadas no Cupom Fiscal, estes dados devem ser passados exatamente na ordem que consta no cupom fiscal.
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) para travar o teclado (padrão) durante a impressão do comprovante |
Forma de Pagamento |
Função do tipo (Int/Boolean) para travar o teclado (padrão) durante a impressão do comprovante |
Valor do Pagamento |
Valor do pagamento TEF |
Vejamos na prática:
C(Sharp)
private void BT_Tef_Click(object sender, EventArgs e)
{
Declaracoes.iRetorno = Declaracoes.iCFAbrirPadrao_ECF_Daruma();
Declaracoes.iRetorno = Declaracoes.iCFVenderResumido_ECF_Daruma("II", "20,00", "Produto Teste", "789567893456");
Declaracoes.iRetorno = Declaracoes.iCFTotalizarCupomPadrao_ECF_Daruma();
Declaracoes.iRetorno = Declaracoes.iCFEfetuarPagamento_ECF_Daruma("Master Card", "10,00", "");
Declaracoes.iRetorno = Declaracoes.iCFEfetuarPagamento_ECF_Daruma("Visa", "10,00", "");
Declaracoes.iRetorno = Declaracoes.iCFEncerrarPadrao_ECF_Daruma();
// Emissão do cupom fiscal utilizando as formas de pagamento Master Card e Visa.
Declaracoes.iRetorno = Declaracoes.iTEF_ImprimirRespostaCartao_ECF_Daruma("C:/Tef_Dial/Resp/Intpos.001", true, "Master Card", "10,00");
Declaracoes.iRetorno = Declaracoes.iTEF_Fechar_ECF_Daruma();
//Impressão do comprovantereferente a forma de pagamento Master Card
Declaracoes.iRetorno = Declaracoes.iTEF_ImprimirRespostaCartao_ECF_Daruma("C:/Tef_Dial/Resp/Intpos.001", true, "Visa", "10,00");
Declaracoes.iRetorno = Declaracoes.iTEF_Fechar_ECF_Daruma();
}
//Impressão do comprovantereferente a forma de pagamento Visa.
Delphi:
function iTEF_ImprimirRespostaCartao_ECF_Daruma(szArquivo:string; bTravarTeclado:Boolean; szForma:string; szValor:string):Integer; StdCall; External 'DarumaFramework.dll';
Int_Retorno:= iTEF_ImprimirResposta_ECF_Daruma(Str_Path_Arquivo_Resp_TEF, false, ‘Master Card’, ’10,00’);
VB6:
Public Declare Function iTEF_ImprimirRespostaCartao_ECF_Daruma Lib "DarumaFramework.dll" (ByVal szArquivo As String, ByVal bTravarTeclado As Boolean, ByVal szForma As String, ByVal szValor As String)
iRetorno = iTEF_ImprimirResposta_ECF_Daruma(Str_Path_Arquivo_Resp_TEF, True, “Master Card”, “10,00”)
Na homologação TEF é necessário verificar o status da impressora em um determinado intervalo de linhas.
Você deve estar se perguntando se há possibilidade de verificar isto na própria função de impressão não é?
Tem sim, e este intervalo é controlado pelo XML.
Controle de Impressão pelo XML
O XML tem uma chave chamada <LinhasTEF> X </LinhasTEF>
Onde X é o numero de linhas que a impressora imprime antes de verificar seu respectivo status.
O método faz a edição do arquivo automaticamente, faz o tratamento necessário e envia o conteúdo por blocos com uma determinada quantidade de linhas, de acordo com o que está configurado no XML, isto para que a dll verifique o status da impressora entre um determinado bloco de linhas impressas e o próximo. Isto tudo é controlado pela dll, é necessário apenas configurar no XML a quantidade de linhas a serem impressas por vez.
Por exemplo: <LinhasTEF>03</LinhasTEF>
O comando enviará as linhas do arquivo de 3 em 3 linhas.
Será demonstrado abaixo um exemplo de quando a chave no <LinhasTEF> estiver configurada 3, destacada em cada marcação #verifica# que é onde demonstra-se que o estado(ligada/desligada) da impressora é verificado automaticamente pela DarumaFramework.dll.
Caso a impressora seja desligada, em um pontos #verifica# o retorno da função será que a impressora está desligada! Tudo isto para que as software houses não necessitem verificar o estado da impressora a cada linha enviada, deixando que a dll faça todo este trabalho.
Lembrando que as marcações são apenas para exemplo, e o arquivo não deve ser editado, sim enviado ao método da maneira que foi recebido na transação.
Veja a seguir
000-000 = CRT
001-000 = 0000000299
002-000 = 000299
#verifica#
003-000 = 50,00
009-000 = 0
010-000 = AMEX
#verifica#
011-000 = 10
012-000 = 030969
015-000 = 1803111923
#verifica#
022-000 = 18032004
023-000 = 111923
027-000 = 030969
#verifica#
028-000 = 16
029-001 = " AMERICAN EXPRESS"
029-002 = " COMPROVANTE DE OPERACAO"
#verifica#
029-003 = " !!!!! SIMULACAO !!!!!"
029-004 = "AMEX CARD 376472540701007 12/04"
029-005 = "ESTAB. AMERICAN EXPRESS - BRZ "
#verifica#
029-006 = " Av Maria Coelho Aguiar "
029-007 = " 9912801792 "
029-008 = "TERM=70000071 DOC=030969 LOTE=000001"
#verifica#
029-009 = "18/03/04 11:19 AUTORIZ.=123456 ONL-X"
029-010 = "VENDA CREDITO A VISTA"
029-011 = "VALOR VENDA: 50,00"
#verifica#
029-012 = "RECONHECO E PAGAREI A IMPORTANCIA ACIMA."
029-013 = "***TESTE DARUMA***/*/***TESTE DARUMA***"
029-014 = ""
#verifica#
029-015 = " ______________________________"
029-016 = " MARIA DAS GRACAS SOUZA"
030-000 = AUTORIZADO123456
#verifica#
040-000 = AMEX CARD
999-999 = 0
#verifica#
Veja como foi impresso o comprovante através das funções |