Introduo Em quase toda Amrica Latina obrigatrio o Uso de ECFs, ou de Emissores de Comprovantes Fiscais. Em nosso Pas, incluindo nesta lista Venezuela e Argentina, a legislao fiscal todavia mais rgida e no somos o nico pas a adotar leis que envolvam ns Os Desenvolvedores. Esta sria de quatro artigos em parceria com a Frum Access visa esclarecer e levar ao publico desenvolvedor o uso de ECFs e a transao eletrnica de Fundos.Este primeiro artigo explicar a interface com o ECF e como operacionalizar isso em trs linguagens, VB, VB.NET e C#.
Nesta pgina
Meu Primeiro Cupom Fiscal Identificando o Consumidor no Cupom Fiscal Adicionando Informaes a Venda realizada
Public Declare Function Daruma_FI_VendeItem Lib "Daruma32.dll" (ByVal Codigo As String, ByVal Descricao As String, ByVal Aliquota As String, ByVal TipoQuantidade As String, ByVal quantidade As String, ByVal CasasDecimais As Integer, ByVal ValorUnitario As String, ByVal TipoDesconto As String, ByVal Desconto As String) As Integer Public Declare Function Daruma_FI_FechaCupomResumido Lib "Daruma32.dll" (ByVal FormaPagamento As String, ByVal Mensagem As String) As Integer Public Declare Function Daruma_FI_IdentificaConsumidor Lib "Daruma32.dll" (ByVal Nome As String, ByVal Endereco As String, ByVal Doc As String) As IntegerPublic Declare Function Daruma_FI_IniciaFechamentoCupom Lib "Daruma32.dll" (ByVal AcrescimoDesconto As String, ByVal TipoAcrescimoDesconto As String, ByVal ValorAcrescimoDesconto As String) As Integer
Public Declare Function Daruma_FI_EfetuaFormaPagamento Lib "Daruma32.dll" (ByVal FormaPagamento As String, ByVal ValorFormaPagamento As String) As Integer Public Declare Function Daruma_FI_TerminaFechamentoCupom Lib "Daruma32.dll" (ByVal Mensagem As String) As Integer Public Declare Function Daruma_FI_AbreComprovanteNaoFiscalVinculado Lib "Daruma32.dll" (ByVal FormaPagamento As String, ByVal Valor As String, ByVal NumeroCupom As String) As Integer Public Declare Function Daruma_FI_UsaComprovanteNaoFiscalVinculado Lib "Daruma32.dll" (ByVal texto As String) As Integer Public Declare Function Daruma_FI_FechaComprovanteNaoFiscalVinculado Lib "Daruma32.dll" () As Integer
Module Funcoes_ECF Public Declare Function Daruma_FI_VendeItem Lib "Daruma32.dll" (ByVal Codigo As String, ByVal Descricao As String, ByVal Aliquota As String, ByVal TipoQuantidade As String, ByVal Quantidade As String, ByVal CasasDecimais As Integer, ByVal ValorUnitario As String, ByVal TipoDesconto As String, ByVal Desconto As String) As Integer Public Declare Function Daruma_FI_IniciaFechamentoCupom Lib "Daruma32.dll" (ByVal AcrescimoDesconto As String, ByVal TipoAcrescimoDesconto As String, ByVal ValorAcrescimoDesconto As String) As Integer Public Declare Function Daruma_FI_EfetuaFormaPagamento Lib "Daruma32.dll" (ByVal FormaPagamento As String, ByVal ValorFormaPagamento As String) As Integer Public Declare Function Daruma_FI_EfetuaFormaPagamentoDescricaoForma Lib "Daruma32.dll" (ByVal FormaPagamento As String, ByVal ValorFormaPagamento As String, ByVal DescricaoOpcional As String) As Integer Public Declare Function Daruma_FI_TerminaFechamentoCupom Lib "Daruma32.dll" (ByVal Mensagem As String) As Integer Public Declare Function Daruma_FI_IdentificaConsumidor Lib "Daruma32.dll" (ByVal Nome As String, ByVal Endereco As String, ByVal Doc As String) As Integer Public Declare Function Daruma_FI_AbreComprovanteNaoFiscalVinculado Lib "Daruma32.dll" (ByVal FormaPagamento As String, ByVal Valor As String, ByVal NumeroCupom As String) As Integer Public Declare Function Daruma_FI_UsaComprovanteNaoFiscalVinculado Lib "Daruma32.dll" (ByVal texto As String) As Integer Public Declare Function Daruma_FI_FechaComprovanteNaoFiscalVinculado Lib "Daruma32.dll" () As Integer End Module
Declarando a dll em C#.NET em um Class.cs
using System; using System.Runtime.InteropServices; using System.IO; namespace DARUMA_CSharp { public class DARUMA32 { [DllImport("Daruma32.dll")]
public static extern int Daruma_FI_VendeItem(System.String Codigo, System.String Descricao, System.String Aliquota, System.String TipoQuantidade, System.String Quantidade, int CasasDecimais, System.String Vr_Unitario, System.String TipoDesconto, System.String Desconto); [DllImport("Daruma32.dll")] public static extern int Daruma_FI_IniciaFechamentoCupom(System.String AcrescimoDesconto,System.String Tipo_AcrescimoDesconto, System.String Valor_AcrescimoDesconto); [DllImport("Daruma32.dll")] public static extern int Daruma_FI_EfetuaFormaPagamento(System.String FormaPagamento, System.String Valor_FormaPagamento); [DllImport("Daruma32.dll")] public static extern int Daruma_FI_TerminaFechamentoCupom(System.String MensagemPromocional); [DllImport("Daruma32.dll")] public static extern int Daruma_FI_FechaCupomResumido(System.String FormaPagamento, System.String Mensagem); [DllImport("Daruma32.dll")] public static extern int Daruma_FI_AbreComprovanteNaoFiscalVinculado (System.String FormaPagamento, System.String Valor , System.String NumeroCupom ); [DllImport("Daruma32.dll")] public static extern int Daruma_FI_UsaComprovanteNaoFiscalVinculado (System.String texto); [DllImport("Daruma32.dll")] public static extern int Daruma_FI_FechaComprovanteNaoFiscalVinculado (); } }
Uma vez que a dll foi declarada em sua respectiva linguagem, agora basta copiar a dll DARUMA32.DLL para o diretrio em que est seu projeto ou o diretrio Windows ou o System32, o que for de sua preferncia. Note que no VB.NET e no C# criamos uma classe para controlar os mtodos da dll, e os mesmos foram declarados dentro da classe. No caso do C# necessrio a declarao do using System.Runtime.InteropServices; - que permite o uso de DLLs no geradas dentro do .NET. Com o uso da DARUMa32.DLL voc no necessita se preocupar com o caso de Abertura, Fechamento e escrita na Porta serial, no necessita se preocupar com isso porque a dll j contem todo o trabalho de administrao da porta, sem nem mesmo a necessidade de abrir o cupom fiscal porque o mtodo VendeItem j o faz caso o cupom fiscal esteja fechado, tornando todavia mais fcil a programao para o ECF. Sem efetuar nenhum tipo de configurao apenas adicione a seguinte linha de Cdigo em seu programa. Em VB
Private Sub Cupom_Click() Daruma_RET = Daruma_FI_VendeItem("1234", "Leite", "FF", "F", "10", 2, "1,00", "%", "0") Daruma_RET = Daruma_FI_FechaCupomResumido("Dinheiro", "Obrigado Volte Sempre!!") End Sub
Em VB.NET
Private Sub Cupom_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ECFVBNET.Daruma_FI_VendeItem("1234", "Leite", "FF", "I", "10", 2, "1,00", "%", "0") ECFVBNET.Daruma_FI_FechaCupomResumido("Dinheiro", "Obrigado Volte Sempre!!") End Sub
Em C#
private void Cupom_Click(object sender, System.EventArgs e) { DARUMA32.RET = DARUMA32.Daruma_FI_VendeItem("12345","Leite","0001","I","10",2,"10,00" ,"%","000"); DARUMA32.Daruma_FI_FechaCupomResumido("Cheque","Espero que Funcione"); }
Ao executar as funes acima esteja certo que se ter com resultado final um Cupom Fiscal Completo com apenas duas linhas de cdigo Vende Item e Fecha Cupom Resumido. Sem a necessidade de indicar em que porta serial o ECF esta plugado, sem a necessidade de controlar comunicao ou outro tipo de programao mais Baixo Nvel. O Interessante e um valor agregado ao cliente o fato da Funo VendeItem vender o item passado em uma nica linha, ou seja, no faz uso de duas linha no cupom fiscal para vender o item. Esta funo possui uma inteligncia para identificar se o item cabe em uma nica linha, se couber vender este item em uma linha, caso contrario ser em duas linhas como fazem os ECFs convencionais isso significa mais de 40% de economia de Bobina que seu cliente ter no ECF utilizado por seu software. O Uso de Emuladores para ECF esta sendo fiscalizado com rigor, por isso incentivamos que voce procure seu fabricante de ECF para que voc possa adquirir um ECF com valores subsidiados para que voce possa efetuar testes de desenvolvimento, demonstraes para seu cliente de seu software com o ECF, homologao de seu software, etc.. tudo isso melhor e mais preciso quando realizado com o ECF real ao lado de seu computador de desenvolvimento. No caso da Daruma voce pode adquirir um ECF para desenvolver pelo valor de 3 x 220 reais apenas. Inicio da pagina
Private Sub Cupom_Click() Daruma_RET = Daruma_FI_VendeItem("1234", "Leite", "FF", "F", "10", 2, "1,00", "%", "0")
COMENTADO Daruma_RET = Daruma_FI_FechaCupomResumido("Dinheiro", "Obrigado Volte Sempre!!") Daruma_RET = Daruma_FI_IniciaFechamentoCupom(A, %, 0,00) Daruma_RET = Daruma_FI_EfetuaFormaPagametno(Dinheiro, 10,00) Daruma_RET = Daruma_FI_IndentificaConsumidor(Claudenir Campos Andrade, Blblbl, 123456 Texto) Daruma_RET = Daruma_TerminaFechamentoCupom(Obrigado Volte Sempre!!) End Sub
Em VB.NET
Private Sub Cupom_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ECFVBNET.Daruma_FI_VendeItem("1234", "Leite", "FF", "I", "10", 2, "1,00", "%", "0") COMENTADO ECFVBNET.Daruma_FI_FechaCupomResumido("Dinheiro", "Obrigado Volte Sempre!!") ECFVBNET.Daruma_FI_IniciaFechamentoCupom("A", "%", "0,00") ECFVBNET.Daruma_FI_EfetuaFormaPagametno("Dinheiro", "10,00") ECFVBNET.Daruma_FI_IndentificaConsumidor("Claudenir Campos Andrade", "Blblbl", "123456 Texto") ECFVBNET.Daruma_TerminaFechamentoCupom("Obrigado Volte Sempre!! ") End Sub
Em C#
private void Cupom_Click(object sender, System.EventArgs e) { DARUMA32.RET = DARUMA32.Daruma_FI_VendeItem("12345","Leite","0001","I","10",2,"10,00" ,"%","000"); // COMENTADO DARUMA32.Daruma_FI_FechaCupomResumido("Cheque","Espero que Funcione"); DARUMA32.RET = DARUMA32.Daruma_FI_IniciaFechamentoCupom("A", "%", "0,00"); DARUMA32.RET = DARUMA32.Daruma_FI_EfetuaFormaPagametno("Dinheiro", "10,00"); DARUMA32.RET = DARUMA32.Daruma_FI_IndentificaConsumidor("Claudenir Andrade", "Blblbl", "123456 Texto"); DARUMA32.RET = DARUMA32.Daruma_TerminaFechamentoCupom("Obrigado Volte Sempre!! "); }
A Funo de identificao do Consumidor uma funo genrica que permite o uso de trs parmetros que so eles: Nome, DOC, e Numero. Porem o texto nestes trs campos so livres permitindo que voc coloque a informao que voc desejar nestas trs linhas e com isso voc ganha um espao dentro do cupom fiscal para colocar dados referente o consumidor e a venda realizada, local de entrega etc.. sem a necessidade de utilizarse do espao da mensagem promocional para fazer isso. Inicio da pagina
mercadoria, com endereos com pontos de referencia, nome de uma ou duas pessoas para a entrega da mercadoria, ou at mesmo horrio de entrega definido e as taxas de entrega. Claro que no espao Mensagem Promocional ( da funo TerminaFechamentoCupom) ou no espao da funo de IdentificaConsumidor, voc no conseguira fazer isso, porem nesta hora entra em cena um novo cupom, que chamamos de Comprovante No Fiscal Vinculado. O Comprovante No Fiscal Vinculado que aqui chamaremos de CNFV - faz com que o ECF entre em modo Normal , ou seja, que aceite texto livre qualquer texto que seja enviado para o ECF ele ser aceito e impresso e leva o nome de Vinculado porque s pode ser utilizado aps um cupom fiscal, sem qualquer restrio de forma de pagamento realizado anteriormente, se fechou o cupom com Dinheiro, cheque, etc..voc poder utilizar este recurso para emitir mais informao do cliente que realizou a compra. Lembrado que a partir da abertura deste comprovante voc ter 2(dois) minutos para enviar todos os textos necessrios. Vamos ao Cdigo Aos o Fechamento do Cupom Fiscal com Dinheiro adicione as seguintes linhas de cdigo em seu programa: Em VB
Em VB.NET
Private Sub Cupom_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ... ECFVBNET.Daruma_TerminaFechamentoCupom(Obrigado Volte Sempre!!) ECFVBNET.Daruma_AbreComprovanteNaoFiscalVinculado(Dinheiro, , )
Em C#
private void Cupom_Click(object sender, System.EventArgs e) { ... DARUMA32.RET = DARUMA32.Daruma_TerminaFechamentoCupom(Obrigado Volte Sempre!!); DARUMA32.RET = DARUMA32.Daruma_AbreComprovanteNaoFiscalVinculado(Dinheiro, , );
DARUMA32.RET = DARUMA32.Daruma_FI_FechaComprovanteNaoFiscalVinculado(); }
Note que os parmetros da Funo AbreComprovanteNaoFiscalVinculado foram: Forma de Pagamento (que se voce utiliza a DARUMA32.dll pode ser Dinheiro) e os dois outros parmetros so Parmetros Nulos, passe os parmetros nulos, pois aqui seriam indicados o numero do cupom fiscal anterior e o valor, mas isso DARUMA32.DLL j resolve pra voc! Bem com isso voc aprendeu o caminho das pedras. No prximo artigo vamos ver como resolver os erros e tratar os erros do ECF, Vamos fazer um TEF e voc ver como fcil fazer TEF com a DARUMA32.DLL e tambm ver como Utilizar XML para se comunicar com o ECF. Um Help interativo com todas as funes e quais so os parmetros a serem usados e exemplos em VB C# e VB.Net voc poder encontrar no site www.daruma.com.br