CODIGO DE BARRAS

VENON 17/06/2010 14:29:32
#345115
Boa tarde amigos, estou implantando um sistema de código de barras para estoque, após ler o que encontrei na web, resolvi pedir algumas dicas aos colegas que tem mais experiência neste tipo de implantação, afinal a experiência é insubstituível.

A etiqueta será bem pequena (1,7 cm x 1 cm) para 5 a 6 caracteres alfanuméricos e a leitura será feita para um palm na conferência do estoque. Meu primeiro problema já iniciou no tamanho da etiqueta, pois não estou conseguindo formatar as barras para que caibam nela.

Agradeceria muito se alguém pudesse dar algumas dicas sobre qual o melhor padrão de barras a usar para etiquetas tão pequenas, modelos de palm e leitores de código de barra, forma de armazenar os dados no palm, etc... Enfim, qualquer ajuda será muito bem vinda.

Abraço a todos...
LIZANDER 17/06/2010 15:18:06
#345121
Venon,

Eu tenho uma função que cria códigos de barras no padrão 2 de 5 Intercalado, em qualquer tamanho que vc desejar. Quanto às etiquetas, também tenho um código que formata a saída para qualquer etiqueta que tenha parâmetros iguais aos que a pimaco põe em suas especificações.

O grande problema (não vejo como problema, mas muitos não gostam), é que é feito com o objeto Printer do VB.

Se precisar, me mande mail: mlizander@hotmail.com
LIZANDER 17/06/2010 18:53:54
#345130
Resposta escolhida
Decidi também colocar aqui para todos poderem ver, e se precisarem...


Função para imprimir Códigos de Barras 2 de 5 Intercalado.

Public Function Inter2de5(linha As Double, coluna As Double, Altura As Double, Largura As Double, Codebar As String)
[ô]Função que imprime código de barras 2 de 5 intercalado usando objeto Printer
Dim nIncrem As Double
Dim aCodigos(0 To 9) As String
Dim nString As Integer
Dim cDigito1 As String
Dim cDigito2 As String
Dim nBarras As Integer

[ô]o Incremento é a largura da barra (em pontos) convertidos para mm
nIncrem = (25.4 * Largura / 72)

aCodigos(0) = [Ô]FFGGF[Ô]
aCodigos(1) = [Ô]GFFFG[Ô]
aCodigos(2) = [Ô]FGFFG[Ô]
aCodigos(3) = [Ô]GGFFF[Ô]
aCodigos(4) = [Ô]FFGFG[Ô]
aCodigos(5) = [Ô]GFGFF[Ô]
aCodigos(6) = [Ô]FGGFF[Ô]
aCodigos(7) = [Ô]FFFGG[Ô]
aCodigos(8) = [Ô]GFFGF[Ô]
aCodigos(9) = [Ô]FGFGF[Ô]

[ô]Barra start
Call ImpLinha(linha, coluna, linha + Altura, coluna + nIncrem)
coluna = coluna + nIncrem
coluna = coluna + nIncrem
Call ImpLinha(linha, coluna, linha + Altura, coluna + nIncrem)
coluna = coluna + nIncrem
coluna = coluna + nIncrem

[ô]Código
For nString = 1 To Len(Codebar) Step 2
cDigito1 = Mid(Codebar, nString, 1)
cDigito2 = Mid(Codebar, nString + 1, 1)

For nBarras = 1 To 5
[ô]Barra preta
If Mid(aCodigos(Val(cDigito1)), nBarras, 1) = [Ô]F[Ô] Then
Call ImpLinha(linha, coluna, linha + Altura, coluna + nIncrem)
coluna = coluna + nIncrem
Else
Call ImpLinha(linha, coluna, linha + Altura, coluna + nIncrem)
coluna = coluna + nIncrem
Call ImpLinha(linha, coluna, linha + Altura, coluna + nIncrem)
coluna = coluna + nIncrem
End If

[ô]Barra espaço
If Mid(aCodigos(Val(cDigito2)), nBarras, 1) = [Ô]F[Ô] Then
coluna = coluna + nIncrem
Else
coluna = coluna + nIncrem
coluna = coluna + nIncrem
End If
Next
Next

[ô]Barra Stop
Call ImpLinha(linha, coluna, linha + Altura, coluna + nIncrem)
coluna = coluna + nIncrem
Call ImpLinha(linha, coluna, linha + Altura, coluna + nIncrem)
coluna = coluna + nIncrem
coluna = coluna + nIncrem
Call ImpLinha(linha, coluna, linha + Altura, coluna + nIncrem)

End Function

Public Function ImpLinha(IniLin As Double, IniCol As Double, FimLin As Double, FimCol As Double, Optional fColor As Long)
If fColor = Null Then
fColor = RGB(0, 0, 0)
End If
[ô]Impressão de linha horizontal/vertical
Printer.Line (MToT(IniCol), MToT(IniLin))-(MToT(FimCol), MToT(FimLin)), fColor, BF
End Function
=====================================================================
Exemplo de Chamada:
Call Inter2de5(10, 110, 12, 2, [Ô]0123456789[Ô]))

LIZANDER 17/06/2010 19:01:20
#345131
Para as etiquetas eu faço:
[ô]As variáveis abaixo eu parametrizo, para poder alterar, de acordo com o que vem na caixa da pimaco, por exemplo:
Dim nAltura As Double
Dim nLargur As Double
Dim nMrgSup As Double
Dim nMrgLtr As Double
Dim nDstVrt As Double
Dim nDstHrz As Double
Dim nEtqLin As Double
Dim nLinPag As Double
Dim nOrienta As Double
Dim Usr_Etq As Integer
Dim nMrgEtq As Double
Dim nSup As Double
Dim nLat As Double
Dim nResto As Double


Usr_Etq = CInt(cboNumEtq.Text)
[ô]<< Aqui eu tenho uma combo que eu informo onde vai começar a impressão, para evitar desperdícios de folhas impressas parcialmente.
[ô]Posicionando o Ponto para o Início das Impressões
nSup = nMrgSup + (Int((Usr_Etq - 1) / nEtqLin) * nDstVrt)
nResto = Usr_Etq Mod nEtqLin
If nResto = 0 Then
nLat = nMrgLtr + ((nEtqLin - 1) * nDstHrz)
Else
nLat = nMrgLtr + ((nResto - 1) * nDstHrz)
End If


[ô]para imprimir as etiquetas, uso o seguinte código:
nMrgEtq = nAltura / 5
[ô]onde 5 é o número de linhas que a etiqueta vai ter (isso deve ser parametrizado, claro)
Printer.FontSize = 10
Call ImpTexto([Ô]Linha 1[Ô], nSup + nMrgEtq, nLat + 5, 200, [Ô]Esquerda[Ô])
Call ImpTexto([Ô]Linha 2[Ô], nSup + nMrgEtq * 2, nLat + 5, 200, [Ô]Esquerda[Ô])
Call ImpTexto([Ô]Linha 3[Ô], nSup + nMrgEtq * 3, nLat + 5, 200, [Ô]Esquerda[Ô])
...
Usr_Etq = Usr_Etq + 1
If Usr_Etq > (nLinPag * nEtqLin) Then
Usr_Etq = 1
Printer.NewPage
End If
[ô]Reposicionando o Ponto para a pr¢xima Impressão
nSup = nMrgSup + (Int((Usr_Etq - 1) / nEtqLin) * nDstVrt)
nResto = Usr_Etq Mod nEtqLin
If nResto = 0 Then
nLat = nMrgLtr + ((nEtqLin - 1) * nDstHrz)
Else
nLat = nMrgLtr + ((nResto - 1) * nDstHrz)
End If
LIZANDER 17/06/2010 19:04:11
#345132
Venon... enviei para seu e-mail em formato txt...

Só postei aqui para todos do fórum verem a solução, ok?

Esqueci destas funções que também foram usadas, e estão em módulo.



Public Function MToT(Mm As Double)
[ô]Converte valores em mm para twips
MToT = (567 / 10) * Mm
End Function

Public Function ImpTexto(TxtTexto, IniLin As Double, IniCol As Double, FimCol As Double, Alinha As String)
[ô]Impressão de texto com alinhamento
Select Case Alinha
Case [Ô]Esquerda[Ô]
Printer.CurrentY = MToT(IniLin)
Printer.CurrentX = MToT(IniCol)
Case [Ô]Direita[Ô]
Printer.CurrentY = MToT(IniLin)
Printer.CurrentX = MToT(FimCol) - Printer.TextWidth(TxtTexto)
Case [Ô]Centro[Ô]
Printer.CurrentY = MToT(IniLin)
Printer.CurrentX = MToT(IniCol) + ((MToT(FimCol) - MToT(IniCol) - Printer.TextWidth(TxtTexto)) / 2)
Case Else
Printer.CurrentY = MToT(IniLin)
Printer.CurrentX = MToT(IniCol)
End Select

Printer.Print TxtTexto

End Function
LIZANDER 17/06/2010 19:07:42
#345134
Cara... que mico meu...

Dei mole... o meu codebar só serve para números...

Desculpe, Venon... agora que vi que vc precisa de alfanumérico...
ANDPAG 18/06/2010 01:03:20
#345153
use o ean13, se quiser posso te passar por email as funcoes para gerar e imprimir o codigo.... ate mais....
VENON 18/06/2010 11:08:45
#345169
LIZANDER

Não tem problema, sua ajuda foi muito bem vinda e certamente poderá ser muito útil. Agradeço pelos códigos.

ANDPAG

Agradeceria se pudesse me enviar os códigos, meu e-mail é jhenriquesilveira@gmail.com. Agradeço pela ajuda amigo.
ARNALDOCRUZ 18/06/2010 15:04:05
#345213
procure por esta dll u2lbcp.dll ela está pronta para transforma um codigo em barra 2 de 5 ean13, ean8 UPC e varios outros,
aqui no forum existe exemplo de como passar os parametros.
Tópico encerrado , respostas não são mais permitidas