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 DeveloperOlá 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âmetrosszArquivo: 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
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!
- Códigos de Barras no ECF Automação Comercial
- Gerando o SPED Automação Comercial
- Gerando o Arquivo MFD (PAF-ECF) Automação Comercial
- Desprogramando o Horário de VerãoAutomação Comercial
- Programando o Horário de VerãoAutomação Comercial