IMPRESSAO DE CODIGO DE BARRAS
Olá Pessoal,
Preciso imprimir etiquetas de código de barras, e não estou tendo sucesso, o colega André aqui do Vbmania me mandou essa rotina abaixo.
Gera o código e imprimie, porém o leitor não lê, fiz testes até com códigos de embalagem, mas sem sucesso.
Fiz a impressão na Argox, na matricial de 12 agulhas e numa Laser, nenhuma das tres etiquetas o leitor leu.
Aguem teria uma solução para me apresentar?
Preciso imprimir etiquetas de código de barras, e não estou tendo sucesso, o colega André aqui do Vbmania me mandou essa rotina abaixo.
Gera o código e imprimie, porém o leitor não lê, fiz testes até com códigos de embalagem, mas sem sucesso.
Fiz a impressão na Argox, na matricial de 12 agulhas e numa Laser, nenhuma das tres etiquetas o leitor leu.
Aguem teria uma solução para me apresentar?
Segue no email função para gerar o ean13 e funcao de impressao juntamente anexo com as fontes
GERAR CODIGO
Public Function StrToEan13(tcString, Optional tlCkeckD As Boolean) As String
Dim lcLat, lcMed, lcRet, lcJuego, lcIni, lcResto, lcCod, lnI
Dim lnCheckSum, lnAux, laJuego(10), lnPri
lcRet = Trim(tcString)
If Len(lcRet) <> 12 Then
Exit Function
End If
[ô]*--- Genero dÃgito de control
lnCheckSum = 0
For lnI = 1 To 12
If lnI Mod 2 = 0 Then
lnCheckSum = lnCheckSum + Val(Mid(lcRet, lnI, 1)) * 3
Else
lnCheckSum = lnCheckSum + Val(Mid(lcRet, lnI, 1)) * 1
End If
Next lnI
lnAux = lnCheckSum Mod 10
lcRet = lcRet & Trim(CStr(IIf(lnAux = 0, 0, 10 - lnAux)))
If tlCkeckD Then
[ô]*--- Si solo genero dÃgito de control
StrToEan13 = lcRet
Exit Function
End If
[ô]*--- Para imprimir con fuente True Type EAN13
[ô]*--- 1er. dÃgito (lnPri)
lnPri = Val(Left(lcRet, 1))
[ô]*--- Tabla de Juegos de Caracteres
[ô]*--- según [Ô]lnPri[Ô] (¡NO CAMBIAR!)
laJuego(1) = [Ô]AAAAAACCCCCC[Ô] [ô]&& 0
laJuego(2) = [Ô]AABABBCCCCCC[Ô] [ô]&& 1
laJuego(3) = [Ô]AABBABCCCCCC[Ô] [ô]&& 2
laJuego(4) = [Ô]AABBBACCCCCC[Ô] [ô]&& 3
laJuego(5) = [Ô]ABAABBCCCCCC[Ô] [ô]&& 4
laJuego(6) = [Ô]ABBAABCCCCCC[Ô] [ô]&& 5
laJuego(7) = [Ô]ABBBAACCCCCC[Ô] [ô]&& 6
laJuego(8) = [Ô]ABABABCCCCCC[Ô] [ô]&& 7
laJuego(9) = [Ô]ABABBACCCCCC[Ô] [ô]&& 8
laJuego(10) = [Ô]ABBABACCCCCC[Ô] [ô]&& 9
[ô]*--- Caracter inicial (fuera del código)
lcIni = Chr(lnPri + 35)
[ô]*--- Caracteres lateral y central
lcLat = Chr(33)
lcMed = Chr(45)
[ô]*--- Resto de los caracteres
lcResto = Mid(lcRet, 2, 12)
For lnI = 1 To 12
lcJuego = Mid(laJuego(lnPri + 1), lnI, 1)
Select Case lcJuego
Case [Ô]A[Ô]
[ô]lcResto = STUFF(lcResto, lnI, 1, Chr(Val(SUBS(lcResto, lnI, 1)) + 48))
Mid(lcResto, lnI, 1) = Chr(Val(Mid(lcResto, lnI, 1)) + 48)
Case [Ô]B[Ô]
[ô]lcResto = STUFF(lcResto, lnI, 1, Chr(Val(SUBS(lcResto, lnI, 1)) + 65))
Mid(lcResto, lnI, 1) = Chr(Val(Mid(lcResto, lnI, 1)) + 65)
Case [Ô]C[Ô]
[ô]lcResto = STUFF(lcResto, lnI, 1, Chr(Val(SUBS(lcResto, lnI, 1)) + 97))
Mid(lcResto, lnI, 1) = Chr(Val(Mid(lcResto, lnI, 1)) + 97)
End Select
Next lnI
[ô]*--- Armo código
lcCod = lcIni & lcLat & Mid(lcResto, 1, 6) & lcMed & Mid(lcResto, 7, 6) & lcLat
StrToEan13 = lcCod
End Function
Exemplo de uso para gerar o codigo de barras
em um modulo crie uma constante para formatar a mascara do codigo
Public Const csFormatoCodigoBarra As String = [Ô]999999000000[Ô]
Para usar a função
Ex: ->> vsBarra = StrToEan13(Format([Ô]Codigo do seu produto[Ô], csFormatoCodigoBarra), True)
abs
IMPRIMIR BARRAS
Public Sub ImprimirCB(ByVal asCodigoBarra As String, _
ByVal asDescricaoProduto As String, ByVal aiQtdLinhaDe3Col As Integer)
Const ciYDescricao As Integer = 100
Const ciYBarra As Integer = 300
Const ciXInicial As Integer = 450
Dim viA As Integer
Dim vsDescricao As String, vsString As String
vsDescricao = Left(asDescricaoProduto, 30)
vsString = StrToEan13(Mid(asCodigoBarra, 1, 12))
Printer.Print vbNullString
Printer.Font.Name = [Ô]Haettenschweiler[Ô]
Printer.Font.Size = 8
Printer.CurrentX = 450
Printer.CurrentY = ciYDescricao
Printer.Print Tab(17); [Ô][Ô]; Tab(105); [Ô][Ô]; Tab(191); [Ô][Ô] [ô]; Tab(186); vsDescricao
Printer.Print Tab(17); [Ô][Ô]; Tab(105); [Ô][Ô]; Tab(191); [Ô][Ô] [ô]; Tab(186); vsDescricao
[ô] Printer.Print Tab(17); [Ô][Ô]; Tab(105); [Ô][Ô]; Tab(191); [Ô][Ô] [ô]; Tab(186); vsDescricao
[ô] Printer.Print Tab(17); [Ô][Ô]; Tab(105); [Ô][Ô]; Tab(191); [Ô][Ô] [ô]; Tab(186); vsDescricao
[ô] Printer.Print Tab(17); [Ô][Ô]; Tab(105); [Ô][Ô]; Tab(191); [Ô][Ô] [ô]; Tab(186); vsDescricao
[ô] Printer.Print Tab(17); [Ô][Ô]; Tab(105); [Ô][Ô]; Tab(191); [Ô][Ô] [ô]; Tab(186); vsDescricao
[ô] Printer.Font.Name = [Ô]EanP36Tt[Ô]
[ô] Printer.Font.Size = 30
[ô] [ô] Printer.CurrentX = ciXInicial
[ô] [ô] Printer.CurrentY = ciYBarra
[ô]
[ô] Printer.Print [Ô][Ô]; [Ô] [Ô]; [Ô][Ô]; [Ô] [Ô]; [Ô][Ô]; [Ô] [Ô] [ô]; [Ô][Ô]
Dim vSTR As String
Dim vsInput As String
vSTR = [Ô]Informe o nro de etiquetas a serem impressas: [Ô]
vsInput = InputBox(vSTR, [Ô]Nro de etiquetas[Ô])
If Not IsNumeric(vsInput) Then
MsgBox [Ô]Digite apenas números.[Ô], vbInformation, [Ô]Aviso[Ô]
Exit Sub
End If
If StrPtr(vsInput) <> 0 Then
If Len(vsInput) > 0 Then
For viA = 1 To CInt(vsInput)
[ô][ô][ô][ô][ô][ô][ô][ô][ô][ô]
Printer.Print vbNullString
Printer.Font.Name = [Ô]Haettenschweiler[Ô]
Printer.Font.Size = 8
[ô] Printer.CurrentX = 0
[ô] Printer.CurrentY = ciYDescricao
Printer.Print Tab(17); vsDescricao [ô]; Tab(105); vsDescricao; Tab(191); vsDescricao [ô]; Tab(186); vsDescricao
Printer.Font.Name = [Ô]EanP36Tt[Ô]
Printer.Font.Size = 30
Printer.CurrentX = ciXInicial
[ô] Printer.CurrentY = ciYBarra
Printer.Print vsString [ô]; [Ô] [Ô]; vsString; [Ô] [Ô]; vsString; [Ô] [Ô] [ô]; vsString
If viA = 8 Then
Printer.Print Tab(17); [Ô][Ô]; Tab(105); [Ô][Ô]; Tab(191); [Ô][Ô] [ô]; Tab(186); vsDescricao
End If
[ô]Printer.Print vbNullString
[ô] End If
[ô] Printer.Print vbNullString
[ô] Printer.Print vbNullString
[ô][ô][ô][ô][ô][ô][ô][ô][ô][ô]
Next viA
End If
End If
Printer.EndDoc
MsgBox [Ô]Código de Barras Impresso com Sucesso !!![Ô], vbInformation, [Ô]Operação OK[Ô]
End Sub
se você fez teste com códigos de embalagens o e o leitor não leu então não será problema do leitor?
você abriu o bloco de notas pra ver se o leitor lé mandando para o bloco de notas?
você abriu o bloco de notas pra ver se o leitor lé mandando para o bloco de notas?
Marcelo,
Desculpa, não me expressei direito, o que quis dizer foi que imprimi o mesmo código de uma embalagem e o código impresso o leitor não leu, o código original o leitor lê sem problema.
Desculpa, não me expressei direito, o que quis dizer foi que imprimi o mesmo código de uma embalagem e o código impresso o leitor não leu, o código original o leitor lê sem problema.
qual o tamanho da fonte que está usando? pelo que vi é 30 tente com a fonte 7, so para teste
utilizo o código abaixo para emitir meus codigos de barras, peguei aqui no site mesmo só não lembro de quem.
ele não usa fonte, o proprio codigo monta.
ele não usa fonte, o proprio codigo monta.
Dim zz1 As Variant
Dim zz2 As Variant
zz1 = Split([Ô]0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,-,.,SP,$,/,+,%,*[Ô], [Ô],[Ô])
zz2 = Split([Ô]111221211,211211112,112211112,212211111,111221112,211221111,112221111,111211212,211211211, _112211211,211112112,112112112,212112111,111122112,211122111,112122111,111112212,211112211,112112211,111122211,211111122,112111122,212111121,111121122,211121121,112121121,111111222,211111221,112111221,111121221,221111112,122111112,222111111,121121112,221121111,122121111,121111212,221111211,122111211,121212111,121211121,121112121,111212121,121121211[Ô], [Ô],[Ô])
Dim CODIGO
CODIGO = CODIGO.TEXT
[ô]IMPRIME CODIGO DE BARRAS
Dim bc4(0 To 20) As String
Dim barchar As String, X1 As String, Sclr As Single, bs As Single, bwn As Single
Dim ac As Integer, s As Integer, bct As Integer, bcl As Integer
Dim barcolor As Boolean
ac = 1
Sclr = 20
X1 = CODIGO
bc4(ac - 1) = [Ô]121121211[Ô]
For bct = 1 To Len(X1)
barchar = Mid(X1, bct, 1)
If barchar = [Ô] [Ô] Then barchar = [Ô]SP[Ô]
For s = 0 To UBound(zz1)
If UCase(barchar) = zz1(s) Then
bc4(ac) = zz2(s)
ac = ac + 1
Exit For
End If
Next s
Next bct
bc4(ac) = [Ô]121121211[Ô]
bs = 5500 [ô] esse é a margem da esquerda do codigo de barras
Printer.CurrentX = 100
For bct = 0 To ac
X1 = bc4(bct)
barcolor = True
For s = 1 To Len(X1)
bwn = (Val(Mid(X1, s, 1))) * Sclr
If barcolor = True Then
[ô]primeiro codigo
Printer.Line (bs, 900)-Step(bwn, 400), vbBlack, BF [ô]o 100 é a posição(altura), o 600 desta linha é o tamanho (altura) do codigo de barras
End If
barcolor = IIf(barcolor = True, False, True)
bs = bs + bwn
Next s
bs = bs + Sclr
Next bct
[ô]fim da impressao
Printer.EndDoc
Citação::
qual o tamanho da fonte que está usando? pelo que vi é 30 tente com a fonte 7, so para teste
A fonte 7 fica minuscula, e não lê...
Citação:utilizo o código abaixo para emitir meus codigos de barras, peguei aqui no site mesmo só não lembro de quem.
ele não usa fonte, o proprio codigo monta.
Obrigado Marcelo, o código do Nicollas funcionou, agora vou ajustar para minha realidade.
Citação:utilizo o código abaixo para emitir meus codigos de barras, peguei aqui no site mesmo só não lembro de quem.
ele não usa fonte, o proprio codigo monta.
Nicollas preciso imprimir o código em uma impressora Argox minha etiqueta tem duas colulascom 4 cm de largura cada etiqueta, eu reduzi a Sclr = 11 e ficou no limite, fiz um teste com 10 e o leitor não lê.,
Você tem alguma sugetão?
Se vai usar impressora ARGOX sugiro programar na linguagem PPLA que já está embutida na impressora e é super fácil.
Citação::
Se vai usar impressora ARGOX sugiro programar na linguagem PPLA que já está embutida na impressora e é super fácil.
FEDERHEN,
A impressora que meu cliente vai usar faz a comunicação via cabo usb, e preciso imprimir em etiquetas com duas colunas de 4x2cm.
Você tem algum exemplo? Preciso resolver até sexta-feira.
Tópico encerrado , respostas não são mais permitidas