CODIGO DE BARRAS
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...
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...
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
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
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[Ô]))
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[Ô]))
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
[ô]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
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
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
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...
Dei mole... o meu codebar só serve para números...
Desculpe, Venon... agora que vi que vc precisa de alfanumérico...
use o ean13, se quiser posso te passar por email as funcoes para gerar e imprimir o codigo.... ate mais....
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.
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.
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.
aqui no forum existe exemplo de como passar os parametros.
Tópico encerrado , respostas não são mais permitidas