Business - Automação Comercial

TEF – Comprovante de Crédito ou Débito

Veja neste artigo o TEF – Comprovante de Crédito ou Débito

por Daruma Developer



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: Forma de pagamento referente ao ultimo Cupom Fiscal (no caso de transação com múltiplos cartões, chamar a função na ordem da definição dos pagamentos).

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

Comprovante impresso

Figura 1. Layout do Cupom

Veja como foi impresso o comprovante através das funções demonstradas na DarumaFramework.dll, repare que no Cupom Fiscal impresso acima não constam os códigos que aparecem antes do sinal de “=” como no arquivo editado mais acima. Isso porque a DLL faz a interpretação do arquivo de resposta e imprime apenas o que deve ser emitido para o Comprovante de Crédito/Débito.

Um abraço, e até a próxima!

Daruma Developer

Daruma Developer