Artigo

TEF. Comprovante de Crédito ou Débito

Caso não consiga ver as imagens deste e-mail, clique aqui.

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


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.

Viu como é simples, a DarumaFramework.dll te deixa mais tranquilo em sua homologação e faz com que você ganhe tempo para trabalhar em cima de outras coisas.

Ai vai a dica, um abraço e até o próximo Escovando Bits!

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

E-mails:
daruma.desenvolvedores@daruma.com.br
ddc.suporte@daruma.com.br

suporte.ddc@daruma.com.br
desenvolvedores.suporte@daruma.com.br
suporte.desenvolvedores@daruma.com.br
desenvolvedores.daruma@daruma.com.br
suporte@daruma.com.br
suporte.alexandre@daruma.com.br
claudenir@daruma.com.br
Skypes:
daruma.desenvolvedores
ddc_suporte_daruma
suporte_ddc_daruma
desenvolvedores_suporte_daruma
suporte_desenvolvedores_daruma
desenvolvedores_daruma
suporte_daruma
suporte_alexandre_daruma
claudenir_andrade
 
Twitter facebook Linkedln Youtube Google+

  • Daruma Developer

    Daruma Developer