Anda di halaman 1dari 8

Automao Comercial com VB, VB.

NET e C# (ECF e TEF) PARTE I de IV


Programando para o ECF
Publicado em: 22 de maro de 2007 Por Claudenir Andrade

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

Meu Primeiro Cupom Fiscal


A Emisso de cupom fiscal resume-se basicamente em um documento comprobatrio da realizao de uma venda, onde a impressora fiscal (ECF Emissor de Cupom Fiscal) guarda os valores da venda realizada em memria protegida dentro do ECF para futura fiscalizao da receita estadual. Com isso o Software desenvolvido para controlar estoque, contas a pagar, etc.. Tambm dever ter em seu leque de funes a comunicao com a impressora Fiscal. Para isso incentivamos o uso de Dlls de comunicao ou drivers que seu fabricante venha a fornecer. Neste caso vamos demonstrar a DLL Daruma32.dll e as facilidades envolvidas na emisso do cupom fiscal em VB.NET, VB e C# com esta dll de comunicao. Abra seu Visual Basic, C# ou VB.Net e crie um projeto novo, um projeto Windows application, aps isso voc deve declarar os comandos contidos na dll de comunicao DARUMA32.DLL Declarando a DLL no VB dentro de um Modulo .BAS

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

Declarando a dll dentro do VB.NET em um Class.VB

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

Identificando o Consumidor no Cupom Fiscal


Uma Vez que o cupom fiscal Substitui o uso de notas fiscais formatadas na frente de caixa, como posso ento identificar o consumidor no Cupom Fiscal, com seu nome, Endereo, e numero de CPF ou CNPJ? Muito bem, para isso voce pode fazer uso da Funo IdentificaConsumidor, porem para isso ter de passar pelas trs fases de fechamento de cupom fiscal Inicio, meio e Fim. Vamos substituir a funo FechaCupomResumido pelas Funes de IniciaFechamento, EfetuaFormaPagamento e TerminaFechamenot. Em VB

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

Adicionando Informaes a Venda realizada


Mas o que fazer quando se necessita de espao para inserir informaes relativas a venda realizada, por exemplo, vamos imaginar que voc possui em seu estabelecimento comercial um programa de Fidelizao e aps a venda realizada deseja imprimir um Extrato para seu cliente da posio atual da conta dele, ou vamos imaginar outro caso em que voc necessita imprimir os dados completos de seu cliente para a entrega da

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

.... Daruma_RET = Daruma_TerminaFechamentoCupom(Obrigado Volte Sempre!!) Daruma_RET = Daruma_AbreComprovanteNaoFiscalVinculado(Dinheiro, , )

Daruma_RET = Daruma_UsaComprovanteNaoFiscalVinculado(Blblbl...) Daruma_RET = Daruma_UsaComprovanteNaoFiscalVinculado(Blblbl...) ....

Daruma_RET = Daruma_FI_FechaComprovanteNaoFiscalVinculado() 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_TerminaFechamentoCupom(Obrigado Volte Sempre!!) ECFVBNET.Daruma_AbreComprovanteNaoFiscalVinculado(Dinheiro, , )

ECFVBNET.Daruma_UsaComprovanteNaoFiscalVinculado(Blblbl...) ECFVBNET.Daruma_UsaComprovanteNaoFiscalVinculado(Blblbl...) ....

ECFVBNET.Daruma_FI_FechaComprovanteNaoFiscalVinculado() End Sub

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_UsaComprovanteNaoFiscalVinculado(Blblbl...); DARUMA32.RET = DARUMA32.Daruma_UsaComprovanteNaoFiscalVinculado(Blblbl...); ....

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

Anda mungkin juga menyukai