Você está na página 1de 17

Attribute VB_Name = "Bematech"

Option Explicit
'Declarao das Funes Bematech de comunicao com a Impressora.
Public Declare Function FormataTX Lib "MP20FI32.DLL" (ByVal Retorna As String) A
s Integer
Public Declare Function IniPortaStr Lib "MP20FI32.DLL" (ByVal Abre As String) As
Integer
Public Declare Function FechaPorta Lib "MP20FI32.DLL" () As Integer
Public Declare Function Status_Mp20FI Lib "MP20FI32.DLL" (ByRef retorno As Integ
er, ByRef Ack As Integer, ByRef St1 As Integer, ByRef St2 As Integer) As Integer
Public Declare Function Le_Variaveis Lib "MP20FI32.DLL" (ByVal Variavel As Strin
g) As Integer
Public Declare Function Retorna_ASCII Lib "MP20FI32.DLL" (ByVal Flag As Integer)
As Integer
'================================================================
'=========================================================================
'Mdulo de Gerenciamento, Configurao e Impresso de Impressoras Bematech
'Desenvolvido por:
'
Rafael Botelho
'
rafael@versii.com.br
'Data ltima Alterao: 04/01/2001
'=========================================================================
'Variaveis de Configurao da Impressora
Global g_strPorta As String
'=======================================
'Variaveis de Configurao do Protocolo
Global g_strIniCmd As String
Global g_strFimCmd As String
'======================================
'Variaveis com mensagens de erros
Const c_strErroAbre As String = "No foi possvel abrir uma conexo com a impressora"
& vbCrLf & _
"Verifique se a impressora esta conectada na por
ta especificada."
Const c_strErroFecha As String = "Problemas ao tentar liberar a porta."
Const c_strErroStatus As String = "No foi possvel fazer a leitura de status da imp
ressora." & vbCrLf & _
"Verifica se a impressora esta conectada."
'Variaveis de Controle do Status da Impressora
'Const Ack As Byte = "06H"
'Const Nak as Byte =
Private l_intStsFTX As Integer
Private l_intStsAckNak As Integer
Private l_intStsSt1 As Integer
Private l_intStsSt2 As Integer
Global g_strMsgStatus As String
Global g_strUltCmd As String
Global
Global
Global
Global

g_strStsFTX As String
g_strStsAck As String
g_strStsNak As String
g_bitStsSt1(0 To 7) As Boolean

Global g_bitStsSt2(0 To 7) As Boolean


'=============================================
'Variavel de Retorno das Leituras de Variavel
Private l_strLeituraVar As String
'============================================
Global t1 As Integer
Global t2 As Integer
'Rotina de Configurao da Impressora
Sub BmtConfig(Porta As String)
g_strPorta = UCase(Porta)
g_strIniCmd = Chr(27) + "|"
g_strFimCmd = "|" + Chr(27)
Call Retorna_ASCII(1)
End Sub
'Funo de Envio de Comandos para Impressora
'Rotorna True se o comando foi enviado com sucesso
Function BmtEnvia(Comando As String) As Boolean
Dim l_intRetorno As Integer
Dim l_strMensagem As String
Dim l_bitRetorno As Boolean
BmtEnvia = False
'Abre comunicao com a impressora
l_intRetorno = IniPortaStr(g_strPorta)
If l_intRetorno <> 1 Then
MsgBox c_strErroAbre
Exit Function
End If
'Envia o Comando
l_intRetorno = FormataTX(g_strIniCmd & Comando & g_strFimCmd)
'Configura variavel do ltimo comando
g_strUltCmd = Comando
If l_intRetorno = 1 Then
l_strMensagem = l_strMensagem & "Erro de comunicao fsica." & vbCrLf
ElseIf l_intRetorno = -2 Then
l_strMensagem = l_strMensagem & "Parmetro invlido." & vbCrLf
ElseIf l_intRetorno = -3 Then
l_strMensagem = l_strMensagem & "Verso antiga do firmware (no suporta o novo
comando)." & vbCrLf
ElseIf l_intRetorno = 0 Then
BmtEnvia = True
End If
If Len(l_strMensagem) > 0 Then
MsgBox l_strMensagem
End If
'Fecha a comunicao com a impressora
l_intRetorno = FechaPorta()
'Verifica o Status da impressora
BmtStatus
End Function

'Funo de Leitura de Varivel


Function LeVariavel() As String
Dim l_intRetorno As Integer
Dim l_strRetorno As String
l_strRetorno = Space(3000)
'Abre comunicao com a impressora
l_intRetorno = IniPortaStr(g_strPorta)
If l_intRetorno <> 1 Then
MsgBox c_strErroAbre
Exit Function
End If
l_intRetorno = Le_Variaveis(l_strRetorno)
LeVariavel = Trim(l_strRetorno)
End Function
'Rotina de Leitura de Status da Impressora
Sub BmtStatus()
Dim l_intRetorno As Integer
'Abre comunicao com a impressora
l_intRetorno = IniPortaStr(g_strPorta)
If l_intRetorno <> 1 Then
MsgBox c_strErroAbre
Exit Sub
End If
l_intRetorno = Status_Mp20FI(l_intStsFTX, l_intStsAckNak, l_intStsSt1, l_intS
tsSt2)
If l_intRetorno < -10 Then
MsgBox "Problemas na leitura do Status." & vbCrLf & _
"Verifique se a porta em que a impressora esta conectada realmente
na " & g_strPorta
Exit Sub
End If
'Define as variaveis de status para "sem erros" (false)
g_bitStsSt1(0) = False: g_bitStsSt1(1) = False: g_bitStsSt1(2) = False: g_bit
StsSt1(3) = False
g_bitStsSt1(4) = False: g_bitStsSt1(5) = False: g_bitStsSt1(6) = False: g_bit
StsSt1(7) = False
g_bitStsSt2(0) = False: g_bitStsSt2(1) = False: g_bitStsSt2(2) = False: g_bit
StsSt2(3) = False
g_bitStsSt2(4) = False: g_bitStsSt2(5) = False: g_bitStsSt2(6) = False: g_bit
StsSt2(7) = False
'Limpa variavel global de mensagem de status
g_strMsgStatus = ""
'Verifica o Status de St1
If l_intStsSt1 >= 128 Then
g_bitStsSt1(7) = True: g_strMsgStatus = g_strMsgStatus & "Fim de Papel." &
vbCrLf
ElseIf l_intStsSt1 >= 64 Then
g_bitStsSt1(6) = True: g_strMsgStatus = g_strMsgStatus & "Pouco Papel." &

vbCrLf
ElseIf l_intStsSt1 >= 32 Then
g_bitStsSt1(5) = True: g_strMsgStatus
& vbCrLf
ElseIf l_intStsSt1 >= 16 Then
g_bitStsSt1(4) = True: g_strMsgStatus
ro." & vbCrLf
ElseIf l_intStsSt1 >= 8 Then
g_bitStsSt1(3) = True: g_strMsgStatus
comando no foi ESC." & vbCrLf
ElseIf l_intStsSt1 >= 4 Then
g_bitStsSt1(2) = True: g_strMsgStatus
nte." & vbCrLf
ElseIf l_intStsSt1 >= 2 Then
g_bitStsSt1(1) = True: g_strMsgStatus
vbCrLf
ElseIf l_intStsSt1 >= 1 Then
g_bitStsSt1(0) = True: g_strMsgStatus
de comando invlido." & vbCrLf
End If
'Verifica o Status de St2
If l_intStsSt2 >= 128 Then
g_bitStsSt2(7) = True: g_strMsgStatus
de comando invlido" & vbCrLf
ElseIf l_intStsSt2 >= 64 Then
g_bitStsSt2(6) = True: g_strMsgStatus
ada." & vbCrLf
ElseIf l_intStsSt2 >= 32 Then
g_bitStsSt2(5) = True: g_strMsgStatus
M CMOS No Voltil.." & vbCrLf
ElseIf l_intStsSt2 >= 16 Then
g_bitStsSt2(4) = True: g_strMsgStatus
ada." & vbCrLf
ElseIf l_intStsSt2 >= 8 Then
g_bitStsSt2(3) = True: g_strMsgStatus
uota programveis lotada." & vbCrLf
ElseIf l_intStsSt2 >= 4 Then
g_bitStsSt2(2) = True: g_strMsgStatus
ermitido." & vbCrLf
ElseIf l_intStsSt2 >= 2 Then
g_bitStsSt2(1) = True: g_strMsgStatus
etrio no programados." & vbCrLf
ElseIf l_intStsSt2 >= 1 Then
g_bitStsSt2(0) = True: g_strMsgStatus
ado." & vbCrLf
End If

= g_strMsgStatus & "Erro no Relgio."


= g_strMsgStatus & "Impressora em er
= g_strMsgStatus & "Primeiro dado de
= g_strMsgStatus & "Comando inexiste
= g_strMsgStatus & "Cupom aberto." &
= g_strMsgStatus & "Nmero de parmetros

= g_strMsgStatus & "Tipo de parmetro


= g_strMsgStatus & "Memria Fiscal lot
= g_strMsgStatus & "Erro na Memria RA
= g_strMsgStatus & "Alquota no program
= g_strMsgStatus & "Capacidade de Alq
= g_strMsgStatus & "Cancelamento no p
= g_strMsgStatus & "CGC/IE do propri
= g_strMsgStatus & "Comando no execut

'Fecha a comunicao com a impressora


l_intRetorno = FechaPorta()
g_strMsgStatus = "ltimo Comando:" & g_strUltCmd & vbCrLf & g_strMsgStatus
g_strMsgStatus = "Click nesta caixa de texto para fech-la." & vbCrLf & g_strMs
gStatus
End Sub
'===================================================
'COMANDOS QUE NO BUSCAM NENHUM VALOR NA IMPRESSORA.
'Somente envia comando para impresso.

'Todas as funes abaixo retorna True ou False


' True -> Comando Realizado com Sucesso
' False -> Problemas na execuo do camando. Verificar status.
'Leitura X
Function bmtLeituraX() As Boolean
bmtLeituraX = False
If BmtEnvia("06") Then
bmtLeituraX = True
End If
End Function
'Reduo Z
Function bmtReducaoZ() As Boolean
bmtReducaoZ = False
If BmtEnvia("05") Then
bmtReducaoZ = True
End If
End Function
'===================================================
'Comandos de Configurao (Inicializao)
'========================================
'Alterao do Simbolo da Moeda
Function BmtAltSblMoeda(Simbolo As String) As Boolean
Dim l_strMoeda As String
BmtAltSblMoeda = False
If Len(l_strMoeda) > 2 Then
MsgBox "O Smbolo para moeda corrente deve ter no mximo 2 caracteres", , "Alt
erao do Smbolo da Moeda Corrente"
Exit Function
End If
l_strMoeda = UCase(Simbolo)
If BmtEnvia("01|" & l_strMoeda) Then
BmtAltSblMoeda = True
End If
End Function
'Truncamento e Arredondamento das casas decimais.
Function BmtArredondamento(Arredonda As Boolean) As Boolean
Dim l_strArredonda As Integer
BmtArredondamento = False
If Arredonda Then
l_strArredonda = "1"
Else
l_strArredonda = "0"
End If
If BmtEnvia("39|" & l_strArredonda) Then

BmtArredondamento = True
End If
End Function
'Espaamento entre linha de impresso em dots.
Function BmtEspacoLinhas(Espaco As Integer) As Boolean
BmtEspacoLinhas = False
If Espaco < 0 Or Espaco > 9 Then
MsgBox "O espao entre uma linha e outra deve ser no intervalo de 0 a 9."
Exit Function
End If
If BmtEnvia("60|" & Trim(CStr(Espaco))) Then
BmtEspacoLinhas = True
End If
End Function
'Espaamento entre cupons fiscais em linhas.
Function BmtEspacoCupons(Linhas As Integer) As Boolean
BmtEspacoCupons = False
If Linhas < 0 Or Linhas > 9 Then
MsgBox "O espao entre um cupom e outro deve ser no intervalo de 0 a 9."
Exit Function
End If
If BmtEnvia("61|" & Trim(CStr(Linhas))) Then
BmtEspacoCupons = True
End If
End Function
'Nomes de Departamentos
Function BmtNomeDpto(Codigo As Integer, Descricao As String) As Boolean
Dim l_strMensagem As String
BmtNomeDpto = False
If Codigo < 1 Or Codigo > 20 Then
l_strMensagem = "O intervalo para o cdigo do departamento de 01 at 20." & vb
CrLf
End If
If Len(Descricao) > 20 Then
l_strMensagem = l_strMensagem & "O nome do departamento pode ter no mximo 1
0 caracteres."
End If
If Len(l_strMensagem) > 0 Then
MsgBox l_strMensagem
Exit Function
End If
If BmtEnvia("65|" & Trim(CStr(Codigo)) & "|" & Descricao & Space(10 - Len(Des
cricao))) Then
BmtNomeDpto = True
End If
End Function

'Habilita Cupom Adicional


Function BmtCupomAdicional(Habilita As Boolean) As Boolean
Dim l_strCupom As Integer
BmtCupomAdicional = False
If Habilita = True Then
l_strCupom = "1"
Else
l_strCupom = "0"
End If
If BmtEnvia("68|" & l_strCupom) Then
BmtCupomAdicional = True
End If
End Function
'Reset da Impressora fiscal
Function BmtReset() As Boolean
BmtReset = False
If BmtEnvia("70") Then
BmtReset = True
End If
End Function
'Comandos de Cupom Fiscal
'========================
'Abertura de Cupom Fiscal
Function BmtAbreCF(Optional CnpjCpf As String) As Boolean
Dim l_strCnpjCpf As String
BmtAbreCF = False
If Len(CnpjCpf) = 0 Then
l_strCnpjCpf = ""
Else
l_strCnpjCpf = "|" & CnpjCpf
End If
If BmtEnvia("00" & l_strCnpjCpf) Then
BmtAbreCF = True
End If
End Function
'Venda de Item
'Observacao:
' Quando o desconto for em porcentagem colocar o simbolo de '%' no incio da stri
ng.
Function BmtVendaItem(Codigo As String, Descricao As String, Tributo As String,
Quantidade As Double, ValorUnitario As Double, Desconto As String) As Boolean
'Variaveis Formatadas
Dim l_strCodigo As String
Dim l_strDescricao As String
Dim l_strTributo As String
Dim l_strQuantidade As String
Dim l_strVrUnit As String
Dim l_strDesconto As String
Dim l_strMensagem As String
BmtVendaItem = False

'Formatao das Variaveis


If Len(Codigo) > 13 Then
'l_strMensagem = "O cdigo do produto no pode ultrapassar a 13 caracteres." &
vbCrLf
'Codigo = Left(Codigo, 13)
Descricao = Codigo & "-" & Descricao
Codigo = Left(Codigo, 13)
End If
l_strCodigo = Codigo & Space(13 - Len(Codigo))
If Len(Descricao) > 29 Then
'l_strMensagem = l_strMensagem & "A descrio no ter mais de 29 caracteres." &
vbCrLf
Descricao = Left(Descricao, 29)
End If
l_strDescricao = Descricao & Space(29 - Len(Descricao))
If IsNumeric(Tributo) Then
If CInt(Tributo) < 1 Or CInt(Tributo) > 16 Then
l_strMensagem = l_strMensagem & "O cdigo do tributo deve ser no interval
o de 01 a 16, 'II', 'FF' ou 'NN'." & vbCrLf
Else
l_strTributo = Format(CInt(Tributo), "00")
End If
ElseIf UCase(Tributo) = "II" Or UCase(Tributo) = "FF" Or UCase(Tributo) = "NN
" Then
l_strTributo = UCase(Tributo)
Else
l_strMensagem = l_strMensagem & "O cdigo do tributo deve ser no intervalo d
e 01 a 16, 'II', 'FF' ou 'NN'." & vbCrLf
End If
l_strQuantidade = Trim(CStr(Quantidade))
If InStr(l_strQuantidade, ",") > 0 Or InStr(l_strQuantidade, ".") > 0 Then
l_strQuantidade = Format$(Quantidade, "0000.000")
l_strQuantidade = Replace(l_strQuantidade, ".", "")
If Len(l_strQuantidade) > 7 Then
l_strMensagem = l_strMensagem = "A quantidade no pode ultrapassar 4 digi
tos na parte inteira e 3 digitos na parte decimal." & vbCrLf
End If
ElseIf Len(l_strQuantidade) <= 4 Then
l_strQuantidade = Format$(Quantidade, "0000")
Else
l_strMensagem = l_strMensagem = "A quantidade no pode ultrapassar 4 digitos
na parte inteira e 3 digitos na parte decimal." & vbCrLf
End If
l_strVrUnit = Format$(ValorUnitario, "000000.00")
If Len(l_strVrUnit) > 9 Then
l_strMensagem = l_strMensagem & "O valor unitrio no pode ultrapassar a 8 dig
itos." & vbCrLf
Else
l_strVrUnit = Replace(l_strVrUnit, ".", "")
l_strVrUnit = Replace(l_strVrUnit, ",", "")
End If
If Mid$(Desconto, 1, 1) = "%" Then
l_strDesconto = Mid$(Desconto, 2)
l_strDesconto = Format$(Val(l_strDesconto), "00.00")
l_strDesconto = Replace(l_strDesconto, ".", "")

l_strDesconto = Replace(l_strDesconto, ",", "")


If Len(l_strDesconto) > 4 Then
l_strMensagem = l_strMensagem = "A quantidade de digitos para o descont
o em porcentagem excedeu a 4."
End If
Else
l_strDesconto = Format$(Val(l_strDesconto), "000000.00")
l_strDesconto = Replace(l_strDesconto, ".", "")
l_strDesconto = Replace(l_strDesconto, ",", "")
If Len(l_strDesconto) > 8 Then
l_strMensagem = l_strMensagem = "A quantidade de digitos para o descont
o em valor excedeu a 8."
End If
End If
'Verifica se existe alguma mensagem de erro.
If Len(l_strMensagem) > 0 Then
MsgBox l_strMensagem
Exit Function
End If
'Envia o comando a impressora fiscal e verifica se houve erro.
If BmtEnvia("09|" & l_strCodigo & "|" & l_strDescricao & "|" & l_strTributo &
"|" & l_strQuantidade & "|" & l_strVrUnit & "|" & l_strDesconto) Then
BmtVendaItem = True
End If
End Function
'Venda de Item com 3 casas no valor unitrio
'Observacao:
' Quando o desconto for em porcentagem colocar o simbolo de '%' no incio da stri
ng.
Function BmtVendaItem3C(Codigo As String, Descricao As String, Tributo As String
, Quantidade As Double, ValorUnitario As Double, Desconto As String) As Boolean
'Variaveis Formatadas
Dim l_strCodigo As String
Dim l_strDescricao As String
Dim l_strTributo As String
Dim l_strQuantidade As String
Dim l_strVrUnit As String
Dim l_strDesconto As String
Dim l_strMensagem As String
BmtVendaItem3C = False
'Formatao das Variaveis
If Len(Codigo) > 13 Then
l_strMensagem = "O cdigo do produto no pode ultrapassar a 13 caracteres." &
vbCrLf
Else
l_strCodigo = Codigo & Space(13 - Len(Codigo))
End If
If Len(Descricao) > 29 Then
l_strMensagem = l_strMensagem & "A descrio no ter mais de 29 caracteres." & v
bCrLf
Else
l_strDescricao = Descricao & Space(29 - Len(Descricao))
End If

If IsNumeric(Tributo) Then
If CInt(Tributo) < 1 Or CInt(Tributo) > 16 Then
l_strMensagem = l_strMensagem & "O cdigo do tributo deve ser no interval
o de 01 a 16, 'II', 'FF' ou 'NN'." & vbCrLf
Else
l_strTributo = Format(CInt(Tributo), "00")
End If
ElseIf UCase(Tributo) = "II" Or UCase(Tributo) = "FF" Or UCase(Tributo) = "NN
" Then
l_strTributo = UCase(Tributo)
Else
l_strMensagem = l_strMensagem & "O cdigo do tributo deve ser no intervalo d
e 01 a 16, 'II', 'FF' ou 'NN'." & vbCrLf
End If
l_strQuantidade = Trim(CStr(Quantidade))
If InStr(l_strQuantidade, ",") > 0 Or InStr(l_strQuantidade, ".") > 0 Then
l_strQuantidade = Format$(Quantidade, "0000.000")
l_strQuantidade = Replace(l_strQuantidade, ".", "")
l_strQuantidade = Replace(l_strQuantidade, ",", "")
If Len(l_strQuantidade) > 7 Then
l_strMensagem = l_strMensagem = "A quantidade no pode ultrapassar 4 digi
tos na parte inteira e 3 digitos na parte decimal." & vbCrLf
End If
ElseIf Len(l_strQuantidade) <= 4 Then
l_strQuantidade = Format$(Quantidade, "0000")
Else
l_strMensagem = l_strMensagem = "A quantidade no pode ultrapassar 4 digitos
na parte inteira e 3 digitos na parte decimal." & vbCrLf
End If
l_strVrUnit = Format$(ValorUnitario, "00000.000")
If Len(l_strVrUnit) > 9 Then
l_strMensagem = l_strMensagem & "O valor unitrio no pode ultrapassar a 8 dig
itos." & vbCrLf
Else
l_strVrUnit = Replace(l_strVrUnit, ".", "")
l_strVrUnit = Replace(l_strVrUnit, ",", "")
End If
If Mid$(Desconto, 1, 1) = "%" Then
l_strDesconto = Mid$(Desconto, 2)
l_strDesconto = Format$(Val(l_strDesconto), "00.00")
l_strDesconto = Replace(l_strDesconto, ".", "")
l_strDesconto = Replace(l_strDesconto, ",", "")
If Len(l_strDesconto) > 4 Then
l_strMensagem = l_strMensagem = "A quantidade de digitos para o descont
o em porcentagem excedeu a 4."
End If
Else
l_strDesconto = Format$(Val(l_strDesconto), "000000.00")
l_strDesconto = Replace(l_strDesconto, ".", "")
l_strDesconto = Replace(l_strDesconto, ",", "")
If Len(l_strDesconto) > 8 Then
l_strMensagem = l_strMensagem = "A quantidade de digitos para o descont
o em valor excedeu a 8."
End If
End If

'Verifica se existe alguma mensagem de erro.


If Len(l_strMensagem) > 0 Then
MsgBox l_strMensagem
Exit Function
End If
'Envia o comando a impressora fiscal e verifica se houve erro.
If BmtEnvia("56|" & l_strCodigo & "|" & l_strDescricao & "|" & l_strTributo &
"|" & l_strQuantidade & "|" & l_strVrUnit & "|" & l_strDesconto) Then
BmtVendaItem3C = True
End If
End Function
'Cancelamento do Item Anterior
Function BmtCancelaItemAnterior() As Boolean
BmtCancelaItemAnterior = False
If BmtEnvia("13") Then
BmtCancelaItemAnterior = True
End If
End Function
'Cancelamento do cupon Anterior
Function BmtCancelaCupomAnterior() As Boolean
BmtCancelaCupomAnterior = False
If BmtEnvia("14") Then
BmtCancelaCupomAnterior = True
End If
End Function
'Venda de Item com entrada de Departamento, Desconto e Unidade de Medida
Function BmtVendaItemDDU(Tributo As String, ValorUnitario As Double, Quantidade
As Double, Desconto As String, _
Acrescimo As Double, Departamento As Integer, Unidade A
s String, Codigo As String, _
Descricao As String) As Boolean
'Variaveis Formatadas
Dim l_strTributo As String
Dim l_strVrUnit As String
Dim l_strQuantidade As String
Dim l_strDesconto As String
Dim l_strAcrescimo As String
Dim l_strDepto As String
Dim l_strP7 As String
Dim l_strUnidade As String
Dim l_strCodigo As String
Dim l_strDescricao As String
Dim l_strMensagem As String
Dim l_strDepartamento As String
BmtVendaItemDDU = False
'Formatao das Variaveis
If IsNumeric(Tributo) Then

If CInt(Tributo) < 1 Or CInt(Tributo) > 16 Then


l_strMensagem = l_strMensagem & "O cdigo do tributo deve ser no interval
o de 01 a 16, 'II', 'FF' ou 'NN'." & vbCrLf
Else
l_strTributo = Format(CInt(Tributo), "00")
End If
ElseIf UCase(Tributo) = "II" Or UCase(Tributo) = "FF" Or UCase(Tributo) = "NN
" Then
l_strTributo = UCase(Tributo)
Else
l_strMensagem = l_strMensagem & "O cdigo do tributo deve ser no intervalo d
e 01 a 16, 'II', 'FF' ou 'NN'." & vbCrLf
End If
l_strVrUnit = Format$(ValorUnitario, "000000.000")
If Len(l_strVrUnit) > 10 Then
l_strMensagem = l_strMensagem & "O valor unitrio no pode ultrapassar a 8 dig
itos." & vbCrLf
Else
l_strVrUnit = Replace(l_strVrUnit, ".", "")
l_strVrUnit = Replace(l_strVrUnit, ",", "")
End If
l_strQuantidade = Format$(Quantidade, "0000.000")
l_strQuantidade = Replace(l_strQuantidade, ".", "")
l_strQuantidade = Replace(l_strQuantidade, ",", "")
If Len(l_strQuantidade) > 7 Then
l_strMensagem = l_strMensagem = "A quantidade no pode ultrapassar 4 digitos
na parte inteira e 3 digitos na parte decimal." & vbCrLf
End If
l_strDesconto = Format$(Desconto, "00000000.00")
l_strDesconto = Replace(l_strDesconto, ".", "")
l_strDesconto = Replace(l_strDesconto, ",", "")
If Len(l_strDesconto) > 10 Then
l_strMensagem = l_strMensagem = "A quantidade de digitos para o desconto e
m valor excedeu a 10."
End If
l_strAcrescimo = Format$(Acrescimo, "00000000.00")
l_strAcrescimo = Replace(l_strAcrescimo, ".", "")
l_strAcrescimo = Replace(l_strAcrescimo, ",", "")
If Len(l_strAcrescimo) > 10 Then
l_strMensagem = l_strMensagem = "A quantidade de digitos para o acrescimo
em valor excedeu a 10."
End If
If Departamento < 1 Or Departamento > 20 Then
l_strMensagem = l_strMensagem = "O cdigo para o departamento tem que estar
na faixa de 01 at 20."
Else
l_strDepto = Format$(Departamento, "00")
End If
l_strP7 = Format(0, "00000000000000000000")
If Len(Unidade) > 2 Then
l_strMensagem = l_strMensagem & "Valores para unidade de medida devem ser
00, 10 ou 11."
Else

l_strUnidade = Unidade
End If
If Len(Codigo) > 49 Then
l_strMensagem = "O cdigo do produto no pode ultrapassar a 49 caracteres." &
vbCrLf
Else
l_strCodigo = Codigo & Space(49 - Len(Codigo))
End If
If Len(Descricao) > 201 Then
l_strMensagem = l_strMensagem & "A descrio no ter mais de 201 caracteres." &
vbCrLf
Else
l_strDescricao = Descricao & Space(201 - Len(Descricao))
End If
'Verifica se existe alguma mensagem de erro.
If Len(l_strMensagem) > 0 Then
MsgBox l_strMensagem
Exit Function
End If
'Envia o comando a impressora fiscal e verifica se houve erro.
If BmtEnvia("63|" & l_strTributo & "|" & l_strVrUnit & "|" & l_strQuantidade
& "|" & l_strDesconto & "|" & _
l_strAcrescimo & "|" & l_strDepartamento & "|" & l_strP7
& "|" & l_strUnidade & "|" & _
l_strCodigo & "|" & l_strDescricao) Then
BmtVendaItemDDU = True
End If
End Function
'Cancelamento de Item Genrico
Function BmtCancelaItemGenerico(Item As Integer) As Boolean
Dim l_strItem As String
BmtCancelaItemGenerico = False
l_strItem = Format$(Item, "0000")
If Len(l_strItem) > 4 Then
MsgBox "O nmero de dgitos para o item ultrapassou 4 digitos."
Exit Function
End If
If BmtEnvia("31|" & l_strItem) Then
BmtCancelaItemGenerico = True
End If
End Function
'Inicia o Fechamento do Cupom
Function BmtIniFechamentoCF(Acrescimo As String, Desconto As Double) As Boolean
Dim l_strDesconto As String
Dim l_strMensagem As String
BmtIniFechamentoCF = False
If UCase(Acrescimo) = "A" Or UCase(Acrescimo) = "D" Then

If Acrescimo = "a" Or Acrescimo = "d" Then


l_strDesconto = Format(Desconto, "00.00")
l_strDesconto = Replace(l_strDesconto, ".", "")
If Len(l_strDesconto) > 4 Then
l_strMensagem = "O desconto ou acrescimo em porcentagem no pode ultra
passar a 99%."
End If
Else
l_strDesconto = Format(Desconto, "000000000000.00")
l_strDesconto = Replace(l_strDesconto, ".", "")
l_strDesconto = Replace(l_strDesconto, ",", "")
If Len(l_strDesconto) > 14 Then
l_strMensagem = "O desconto ou acrescimo em porcentagem no pode ultra
passar a 14 digitos."
End If
End If
Else
l_strMensagem = "O valor informado para o parmetro deve ser 'a','d','A' ou
'D'."
End If
If Len(l_strMensagem) > 0 Then
MsgBox l_strMensagem
Exit Function
End If
If BmtEnvia("32|" & Acrescimo & "|" & l_strDesconto) Then
BmtIniFechamentoCF = True
End If
End Function
'Efetua Forma de Pagamento
Function BmtEfetuaFrmPgto(CodigoFrmPgto As Integer, Valor As Double, Optional De
scricao As String) As Boolean
Dim l_strCodigo As String
Dim l_strValor As String
Dim l_strDescricao As String
Dim l_strMensagem As String
BmtEfetuaFrmPgto = False
'Verifica parmetros
If CodigoFrmPgto < 1 Or CodigoFrmPgto > 50 Then
l_strMensagem = l_strMensagem & "O Cdigo para forma de pagamento tem de est
ar entre 01 e 50." & vbCrLf
Else
l_strCodigo = Format$(CodigoFrmPgto, "00")
End If
l_strValor = Format(Valor, "000000000000.00")
l_strValor = Replace(l_strValor, ",", "")
l_strValor = Replace(l_strValor, ".", "")
If Len(l_strValor) > 14 Then
l_strMensagem = l_strMensagem & "O Valor do Pagamento ultrapassou aos 14 d
igitos permitiveis." & vbCrLf
End If
If Len(Descricao) > 0 Then
If Len(Descricao) > 80 Then
l_strMensagem = l_strMensagem & "A descrio da forma de pagamento no pode t

er mais que 80 caracteres." & vbCrLf


Else
l_strDescricao = "|" & Descricao
End If
End If
'Verifica se tem alguma mensagem de erro
If Len(l_strMensagem) > 0 Then
MsgBox l_strMensagem
Exit Function
End If
If BmtEnvia("72|" & l_strCodigo & "|" & l_strValor & l_strDescricao) Then
BmtEfetuaFrmPgto = True
End If
End Function
'Termina o Fechamento do Cupom com Formas de Pagamento
Function BmtFechaCF(MensagemPromocional As String) As Boolean
BmtFechaCF = False
If Len(MensagemPromocional) > 492 Then
MsgBox "O nmero mximo de caracteres para a Mensagem Promocional de 492."
Exit Function
End If
If BmtEnvia("34|" & MensagemPromocional) Then
BmtFechaCF = True
End If
End Function
'Grava Descrio das Formas de Pagamento
Function BmtDescricaoFrmPgto(Descricao As String, ParamArray ODescricao()) As Bo
olean
Dim l_strMensagem As String
Dim l_bitErro As Boolean
Dim l_strComando As String
Dim l_intSize As Integer
Dim l_intX As Integer
BmtDescricaoFrmPgto = False
l_intSize = UBound(ODescricao)
If l_intSize > 49 Then
l_strMensagem = "A quantidade de descries ultrapassou a 50 posies"
End If
If Len(Descricao) > 16 Then
l_bitErro = True
l_strMensagem = l_strMensagem & "A Descrio da Forma de Pagamento no pode ultr
apassar a 16 caracteres." & vbCrLf & _
"Erro no parmetro 1"
Else
l_strComando = "|" & Descricao
End If

If l_intSize > 0 Then


For l_intX = 1 To l_intSize
If Len(ODescricao(l_intX)) > 16 Then
If l_bitErro Then
l_strMensagem = l_strMensagem & ", " & (l_intX + 1)
Else
l_bitErro = True
l_strMensagem = "A Descrio da Forma de Pagamento no pode ultrapassar
a 16 caracteres." & vbCrLf & _
"Erro no parmetro " & (l_intX + 1)
End If
Else
l_strComando = l_strComando & "|" & ODescricao(l_intX)
End If
Next l_intX
End If
If l_bitErro Then
MsgBox l_strMensagem
Exit Function
End If
If BmtEnvia("73" & l_strComando) Then
BmtDescricaoFrmPgto = True
End If
End Function
'===================================================
'COMANDOS QUE CONSULTAM E RETORNAM VALORES.
'Todas as funes abaixo retorna um valor
'===================================================
'Verifica forma de Pagamento
'Retorna a Posio que foi gravado a forma de pagamento.
'Se retornar '0' porque houve um erro.
Function BmtVerificaFrmPgto(Descricao As String) As Integer
Dim l_strRetorno As String
BmtVerificaFrmPgto = 0
If Len(Descricao) > 16 Then
MsgBox "A descrio para forma de pagamento no pode exceder a 16 caracteres."
Exit Function
End If
If BmtEnvia("71|" & Descricao) Then
l_strRetorno = LeVariavel()
If Len(l_strRetorno) > 0 And IsNumeric(l_strRetorno) Then
BmtVerificaFrmPgto = Int(l_strRetorno)
End If
End If
End Function
'Retorna o Nmero do Cupom
Function BmtNumeroCupom() As Integer

Dim l_intRetorno As Integer


If BmtEnvia("30") Then
l_intRetorno = Int(LeVariavel())
End If
BmtNumeroCupom = l_intRetorno
End Function