IMPRESSAO DE CODIGO DE BARRAS

FAUZE 29/10/2012 11:24:35
#413047
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?

  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
MARCELO.TREZE 29/10/2012 11:57:39
#413054
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?
FAUZE 29/10/2012 12:19:53
#413055
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.
MARCELO.TREZE 29/10/2012 12:24:25
#413056
qual o tamanho da fonte que está usando? pelo que vi é 30 tente com a fonte 7, so para teste
NICOLLAS2 29/10/2012 13:33:21
#413062
Resposta escolhida
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.

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
FAUZE 29/10/2012 13:52:58
#413066
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ê...
FAUZE 29/10/2012 13:59:06
#413068
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.
FAUZE 29/10/2012 15:54:42
#413075
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?
FEDERHEN 29/10/2012 16:21:35
#413080
Se vai usar impressora ARGOX sugiro programar na linguagem PPLA que já está embutida na impressora e é super fácil.
FAUZE 29/10/2012 16:26:46
#413082
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