Função para gerar Código de Barras
Moderador: Moderadores
- Gilberto M Silva
- Usuário Nível 3

- Mensagens: 230
- Registrado em: 13 Mar 2007 18:00
- Localização: Natal-RN / Parelhas(RN) / Natal(RN)
- Contato:
Função para gerar Código de Barras
Caros Colegas,
Estou precisando fazer um programinha que gere um codigo de barras a partir de um número digitado, para etiquetar produtos caseiros.
Gilberto
Estou precisando fazer um programinha que gere um codigo de barras a partir de um número digitado, para etiquetar produtos caseiros.
Gilberto
Gilberto[]
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Exemplo abaixo:
Código: Selecionar todos
Func geracod
vSOMA=0
vLEO5=78910030
vCOD=0
@ 10,10 get vCOD PICT "9999"
READ
vCOD=STRZERO(vCOD,4)
DO WHILE .T.
vSOMA=vSOMA+1
vBARRA1 =SPACE(13)
vTESTE=STR(vSOMA)
IF vSOMA=9
vSOMA=0
vLEO5=vLEO5+1
ENDIF
vBARRA1=STR(vLEO5)+ vCOD +ALLTRIM(vTESTE)
vLEO=Len((vBARRA1 := AllTrim(vBARRA1)))=13 .and. Right(vBARRA1,1) == CalcEAN13(vBARRA1)
IF vLEO=.F.
LOOP
ELSE
EXIT
ENDIF
ENDDO
@ 11,10 SAY vBARRA1 PICT "@!"
INKEY(0)
RETURN
FUNC CalcEAN13(cEAN)
local nSoma := 0
local i
for i := 1 to 12
nSoma += Val(SubStr(cEAN,i,1)) * if(i%2>0,1,3)
next
return if(nSoma%10=0, "0", Str(((Int(nSoma/10)+1)*10)-nSoma,1))Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- Gilberto M Silva
- Usuário Nível 3

- Mensagens: 230
- Registrado em: 13 Mar 2007 18:00
- Localização: Natal-RN / Parelhas(RN) / Natal(RN)
- Contato:
Tem essa função que achei aqui mesmo no forum, mais não estou conseguindo inplementar ela para gerar o codigo de barras.
clear
a__01 := codbar({'7891058489038','7891035209000','7898112300018'},'Epson',05,01,03)
a__02 := codbar({'7891058489038','7891035209000','7898112300018'},'Epson',05,01,03)
a__03 := codbar({'7891058489038','7891035209000','7898112300018'},'Epson',05,01,04)
a__04 := codbar({'7891058489038','7891035209000','7898112300018'},'Epson',05,01,05)
a__05 := codbar({'7891058489038','7891035209000','7898112300018'},'Epson',05,01,06)
a__06 := codbar({'7891035209000','7898112300018'},'Epson',05,01,06)
*
* 7891058489038 = DIPIRONA SàDICA
* 7891035209000 = VEJA MULTI-USO
* 7898112300018 = ALCOOL ARAUCµRIA
*
set cons off
set devi to prin
@ prow(),pcol() say a__01
@ prow(),pcol() say a__02
@ prow(),pcol() say a__03
@ prow(),pcol() say a__04
@ prow(),pcol() say a__05
@ prow(),pcol() say a__06
set cons on
set devi to scree
return
*ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
*³CodBar ³
*ÃÄÂÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³1³aNum³N£mero correspondente ao c¢digo de barras que se quer imprimir ³
*ÃÄÅÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³2³cImp³PadrÆo de impressora ([HP] para HP e [Epson] para Epson) ³
*ÃÄÅÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³3³nEsq³Quantidade de espa‡os antes de imprimir a primeira coluna (margem) ³
*ÃÄÅÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³4³nEsp³Quantidade de espa‡os entre as colunas ³
*ÃÄÅÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³5³nAlt³Altura em linhas (6 LPI) total do c¢digo mais o n£mero ³
*ÃÄÅÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³R³Retorna um string correspondente … imagem de impressÆo. Deve ser direcio-³
*³ ³nado diretamente para a impressora. ³
*ÃÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³D³Imprime etiquetas de c¢digo de barras padrÆo HP e Epson ³
*ÃÄÅÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³V³1.0³2000.03.02³Maur¡lio J. Franchin Jr. <maurilio@microsafety.com.br> ³
*ÀÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
function CodBar( aNum, cImp, nEsq, nEsp, nAlt )
local I
local J
local cBar
local aTab
local cFlag
local nPos
local cNum
local aBar
local cLF
aNum:= If( ValType( aNum ) # [A], {}, aNum )
nEsq:= If( ValType( nEsq ) # [N], 0, nEsq )
nEsp:= If( ValType( nEsp ) # [N], 1, nEsp )
for I:= 1 to Len( aNum )
if ValType( aNum ) # [C] .or. Len( aNum ) # 13
return []
endif
next
// Esq A Esq B Dir Flag
//------- ------- ------- ------
aTab:= {;
{ [0001101], [0100111], [1110010], [111111] },; // 0
{ [0011001], [0110011], [1100110], [112122] },; // 1
{ [0010011], [0011011], [1101100], [112212] },; // 2
{ [0111101], [0100001], [1000010], [112221] },; // 3
{ [0100011], [0011101], [1011100], [121122] },; // 4
{ [0110001], [0111001], [1001110], [122112] },; // 5
{ [0101111], [0000101], [1010000], [122211] },; // 6
{ [0111011], [0010001], [1000100], [121212] },; // 7
{ [0110111], [0001001], [1001000], [121221] },; // 8
{ [0001011], [0010111], [1110100], [122121] } } // 9
cNum:= []
cBar:= []
aBar:= {}
cImp:= Upper( cImp )
cLF:= Chr( 13 ) +Chr( 10 )
for I:= 1 to Len( aNum )
cFlag:= aTab[Val( Left( aNum, 1 ) ) +1,4]
cBar += [101]
for J:= 1 to 6
nPos:= Val( SubStr( aNum, J +1, 1 ) ) +1
cBar+= aTab[nPos,Val( SubStr( cFlag, J, 1 ) )]
next
cBar+= [01010]
for J:= 1 to 6
nPos:= Val( SubStr( aNum, J +7, 1 ) ) +1
cBar+= aTab[nPos,3]
next
cBar+= [101]
if cImp = [HP]
cNum+= aNum
if I < Len( aNum )
cBar+= Replicate( [0], nEsp * 8 )
cNum+= Space( nEsp )
endif
elseif Upper( cImp ) = [EPSON]
AAdd( aBar, cBar )
cBar:= []
else
return []
endif
next
if cImp = [HP]
cBar:= Space( nEsq ) +Hp( cBar, nAlt ) +cLF +Space( nEsq ) +cNum +cLF
elseif Upper( cImp ) = [EPSON]
cBar:= Epson( aNum, aBar, nEsq, nEsp, nAlt )
endif
return cBar
*ÚÄÄÄÄÄÄÄÄÄÄ¿
*³Epson ³
*ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
static function Epson( aNum, aBar, nEsq, nEsp, nAlt )
local I
local J
local K
local N
local cRet
local cBlo
local cEsp
local bPrefix
local cLF
nAlt:= If( ValType( nAlt ) # [N], 6, nAlt )
cBlo:= Chr( 255 ) +Chr( 255 )
cEsp:= Chr( 0 ) +Chr( 0 )
cLF := Chr( 13 ) +Chr( 10 )
bPrefix:= {|n| Chr( 27 ) +[L] +Chr( n * 2 % 256 ) +Chr( Int( n * 2 / 256 ) ) }
cRet:= Space( nEsq ) +Chr( 27 ) +[A] +Chr( 8 ) // Espa‡amento 9 LPI
for I:= 1 to nAlt
for J:= 1 to Len( aBar )
N:= Len( aBar[J] )
cRet+= [ ] +Eval( bPrefix, N )
for K:= 1 to N
if SubStr( aBar[J], K, 1 ) = [1]
cRet+= cBlo
else
cRet+= cEsp
endif
next
cRet+= Space( nEsp )
next
cRet+= cLF
next
cRet+= Space( nEsq )
for I:= 1 to Len( aNum )
cRet+= [ ] +Transform( aNum, [@R 9.999999.999999] ) +[ ]
if I < Len( aNum )
cRet+= Space( nEsp )
endif
next
cRet+= Chr( 27 ) +[2] // Espa‡amento 6 LPI
cRet+= cLF
return cRet
*ÚÄÄÄÄÄÄÄÄÄÄ¿
*³HP ³
*ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
static function Hp( cBar, nAlt )
local I
local N
local cRet
nAlt:= If( ValType( nAlt ) # [N], 5, nAlt )
N:= Len( cBar )
if N % 8 # 0
cBar+= Replicate( [0], 8 -(N % 8) )
endif
N:= Int( Len( cBar ) / 8)
cRet:= Chr( 27 ) +[*r1A] +Chr( 27 ) +[*b] +LTrim( Str( N ) ) +[W]
for I:= 1 to N
cRet+= Chr( Bin2Dec( SubStr( cBar, (I -1) * 8 +1, 8 ) ) )
next
N:= Round( (nAlt -1) * 12.5 -14, 0 )
for I:= 1 to N
cRet+= Chr( 27 ) +[*b3m0W]
next
cRet+= Chr( 27 ) +[*rbC]
return cRet
*ÚÄÄÄÄÄÄÄÄÄÄ¿
*³Bin2Dec ³
*ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
static function Bin2Dec( cBin )
local I
local J
local nDec
nDec:= 0
J:= Len( cBin )
I:= 0
while J > 0
if SubStr( cBin, J, 1 ) = [1]
nDec+= 2 ^ I
endif
J--
I++
enddo
return nDec
como poderia usa-la???
clear
a__01 := codbar({'7891058489038','7891035209000','7898112300018'},'Epson',05,01,03)
a__02 := codbar({'7891058489038','7891035209000','7898112300018'},'Epson',05,01,03)
a__03 := codbar({'7891058489038','7891035209000','7898112300018'},'Epson',05,01,04)
a__04 := codbar({'7891058489038','7891035209000','7898112300018'},'Epson',05,01,05)
a__05 := codbar({'7891058489038','7891035209000','7898112300018'},'Epson',05,01,06)
a__06 := codbar({'7891035209000','7898112300018'},'Epson',05,01,06)
*
* 7891058489038 = DIPIRONA SàDICA
* 7891035209000 = VEJA MULTI-USO
* 7898112300018 = ALCOOL ARAUCµRIA
*
set cons off
set devi to prin
@ prow(),pcol() say a__01
@ prow(),pcol() say a__02
@ prow(),pcol() say a__03
@ prow(),pcol() say a__04
@ prow(),pcol() say a__05
@ prow(),pcol() say a__06
set cons on
set devi to scree
return
*ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
*³CodBar ³
*ÃÄÂÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³1³aNum³N£mero correspondente ao c¢digo de barras que se quer imprimir ³
*ÃÄÅÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³2³cImp³PadrÆo de impressora ([HP] para HP e [Epson] para Epson) ³
*ÃÄÅÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³3³nEsq³Quantidade de espa‡os antes de imprimir a primeira coluna (margem) ³
*ÃÄÅÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³4³nEsp³Quantidade de espa‡os entre as colunas ³
*ÃÄÅÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³5³nAlt³Altura em linhas (6 LPI) total do c¢digo mais o n£mero ³
*ÃÄÅÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³R³Retorna um string correspondente … imagem de impressÆo. Deve ser direcio-³
*³ ³nado diretamente para a impressora. ³
*ÃÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³D³Imprime etiquetas de c¢digo de barras padrÆo HP e Epson ³
*ÃÄÅÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
*³V³1.0³2000.03.02³Maur¡lio J. Franchin Jr. <maurilio@microsafety.com.br> ³
*ÀÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
function CodBar( aNum, cImp, nEsq, nEsp, nAlt )
local I
local J
local cBar
local aTab
local cFlag
local nPos
local cNum
local aBar
local cLF
aNum:= If( ValType( aNum ) # [A], {}, aNum )
nEsq:= If( ValType( nEsq ) # [N], 0, nEsq )
nEsp:= If( ValType( nEsp ) # [N], 1, nEsp )
for I:= 1 to Len( aNum )
if ValType( aNum ) # [C] .or. Len( aNum ) # 13
return []
endif
next
// Esq A Esq B Dir Flag
//------- ------- ------- ------
aTab:= {;
{ [0001101], [0100111], [1110010], [111111] },; // 0
{ [0011001], [0110011], [1100110], [112122] },; // 1
{ [0010011], [0011011], [1101100], [112212] },; // 2
{ [0111101], [0100001], [1000010], [112221] },; // 3
{ [0100011], [0011101], [1011100], [121122] },; // 4
{ [0110001], [0111001], [1001110], [122112] },; // 5
{ [0101111], [0000101], [1010000], [122211] },; // 6
{ [0111011], [0010001], [1000100], [121212] },; // 7
{ [0110111], [0001001], [1001000], [121221] },; // 8
{ [0001011], [0010111], [1110100], [122121] } } // 9
cNum:= []
cBar:= []
aBar:= {}
cImp:= Upper( cImp )
cLF:= Chr( 13 ) +Chr( 10 )
for I:= 1 to Len( aNum )
cFlag:= aTab[Val( Left( aNum, 1 ) ) +1,4]
cBar += [101]
for J:= 1 to 6
nPos:= Val( SubStr( aNum, J +1, 1 ) ) +1
cBar+= aTab[nPos,Val( SubStr( cFlag, J, 1 ) )]
next
cBar+= [01010]
for J:= 1 to 6
nPos:= Val( SubStr( aNum, J +7, 1 ) ) +1
cBar+= aTab[nPos,3]
next
cBar+= [101]
if cImp = [HP]
cNum+= aNum
if I < Len( aNum )
cBar+= Replicate( [0], nEsp * 8 )
cNum+= Space( nEsp )
endif
elseif Upper( cImp ) = [EPSON]
AAdd( aBar, cBar )
cBar:= []
else
return []
endif
next
if cImp = [HP]
cBar:= Space( nEsq ) +Hp( cBar, nAlt ) +cLF +Space( nEsq ) +cNum +cLF
elseif Upper( cImp ) = [EPSON]
cBar:= Epson( aNum, aBar, nEsq, nEsp, nAlt )
endif
return cBar
*ÚÄÄÄÄÄÄÄÄÄÄ¿
*³Epson ³
*ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
static function Epson( aNum, aBar, nEsq, nEsp, nAlt )
local I
local J
local K
local N
local cRet
local cBlo
local cEsp
local bPrefix
local cLF
nAlt:= If( ValType( nAlt ) # [N], 6, nAlt )
cBlo:= Chr( 255 ) +Chr( 255 )
cEsp:= Chr( 0 ) +Chr( 0 )
cLF := Chr( 13 ) +Chr( 10 )
bPrefix:= {|n| Chr( 27 ) +[L] +Chr( n * 2 % 256 ) +Chr( Int( n * 2 / 256 ) ) }
cRet:= Space( nEsq ) +Chr( 27 ) +[A] +Chr( 8 ) // Espa‡amento 9 LPI
for I:= 1 to nAlt
for J:= 1 to Len( aBar )
N:= Len( aBar[J] )
cRet+= [ ] +Eval( bPrefix, N )
for K:= 1 to N
if SubStr( aBar[J], K, 1 ) = [1]
cRet+= cBlo
else
cRet+= cEsp
endif
next
cRet+= Space( nEsp )
next
cRet+= cLF
next
cRet+= Space( nEsq )
for I:= 1 to Len( aNum )
cRet+= [ ] +Transform( aNum, [@R 9.999999.999999] ) +[ ]
if I < Len( aNum )
cRet+= Space( nEsp )
endif
next
cRet+= Chr( 27 ) +[2] // Espa‡amento 6 LPI
cRet+= cLF
return cRet
*ÚÄÄÄÄÄÄÄÄÄÄ¿
*³HP ³
*ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
static function Hp( cBar, nAlt )
local I
local N
local cRet
nAlt:= If( ValType( nAlt ) # [N], 5, nAlt )
N:= Len( cBar )
if N % 8 # 0
cBar+= Replicate( [0], 8 -(N % 8) )
endif
N:= Int( Len( cBar ) / 8)
cRet:= Chr( 27 ) +[*r1A] +Chr( 27 ) +[*b] +LTrim( Str( N ) ) +[W]
for I:= 1 to N
cRet+= Chr( Bin2Dec( SubStr( cBar, (I -1) * 8 +1, 8 ) ) )
next
N:= Round( (nAlt -1) * 12.5 -14, 0 )
for I:= 1 to N
cRet+= Chr( 27 ) +[*b3m0W]
next
cRet+= Chr( 27 ) +[*rbC]
return cRet
*ÚÄÄÄÄÄÄÄÄÄÄ¿
*³Bin2Dec ³
*ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
static function Bin2Dec( cBin )
local I
local J
local nDec
nDec:= 0
J:= Len( cBin )
I:= 0
while J > 0
if SubStr( cBin, J, 1 ) = [1]
nDec+= 2 ^ I
endif
J--
I++
enddo
return nDec
como poderia usa-la???
Gilberto[]
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
- Gilberto M Silva
- Usuário Nível 3

- Mensagens: 230
- Registrado em: 13 Mar 2007 18:00
- Localização: Natal-RN / Parelhas(RN) / Natal(RN)
- Contato:
Re: Função para gerar Código de Barras
Tenho na minha área "pub" (diretório clipper\libs) a biblioteca Light & Dark que gera vários tipos de códigos de barras para vários tipos de impressoras.Gilberto M Silva escreveu:Estou precisando fazer um programinha que gere um codigo de barras a partir de um número digitado, para etiquetar produtos caseiros.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Quero lembrar que, se o seu código não for oficialmente cadastrado no EAN Brasil, o prefixo "789" não faz o menor sentido, e não precisa ser fixo. Assim, você poderá utilizar todo o espectro do código. Ou seja, você terá 12 dígitos para compor o número que quiser. Inclusive, o próprio EAN Brasil prevê esse tipo de situação, e libera o código todo. Só há uma sutiliza no manual deles, mas isso não vem ao caso. Se quiser saber o quê, pergunte.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Acho que ficaria mais fácil:sygecom escreveu:Código: Selecionar todos
Func geracod vSOMA=0 vLEO5=78910030 vCOD=0 @ 10,10 get vCOD PICT "9999" READ vCOD=STRZERO(vCOD,4) DO WHILE .T. vSOMA=vSOMA+1 vBARRA1 =SPACE(13) vTESTE=STR(vSOMA) IF vSOMA=9 vSOMA=0 vLEO5=vLEO5+1 ENDIF vBARRA1=STR(vLEO5)+ vCOD +ALLTRIM(vTESTE) vLEO=Len((vBARRA1 := AllTrim(vBARRA1)))=13 .and. Right(vBARRA1,1) == CalcEAN13(vBARRA1) IF vLEO=.F. LOOP ELSE EXIT ENDIF ENDDO @ 11,10 SAY vBARRA1 PICT "@!" INKEY(0) RETURN FUNC CalcEAN13(cEAN) local nSoma := 0 local i for i := 1 to 12 nSoma += Val(SubStr(cEAN,i,1)) * if(i%2>0,1,3) next return if(nSoma%10=0, "0", Str(((Int(nSoma/10)+1)*10)-nSoma,1))
Código: Selecionar todos
function GeraCod(cBase)
cBase := PadR(cBase,12,"0")
return cBase+CalcEAN13(cEAN)[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Re: Função para gerar Código de Barras
Esqueci de dizer: o link está na minha assinatura, caso não tenha notado.Maligno escreveu:Tenho na minha área "pub" (diretório clipper\libs)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Gilberto M Silva
- Usuário Nível 3

- Mensagens: 230
- Registrado em: 13 Mar 2007 18:00
- Localização: Natal-RN / Parelhas(RN) / Natal(RN)
- Contato:
- Gilberto M Silva
- Usuário Nível 3

- Mensagens: 230
- Registrado em: 13 Mar 2007 18:00
- Localização: Natal-RN / Parelhas(RN) / Natal(RN)
- Contato:
Usando a função que o leonardo postou, a partir dela como posso imprimir o codigo de barras em uma hp por exemplo.
Gilberto[]
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
Eu próprio nunca usei, mas vi no NG dela que é coisa muito simples. Veja o exemplo que extraí do NG:Gilberto M Silva escreveu:Maligno como uso essa lib para imprimir o código de barras?
Código: Selecionar todos
// create a UPC 12 barcode
cBar := LDUpc12("123456789012")
// generate it
aCode := LDGenerate(LD_TYP_EPSON9,cBar)
// print it
SET PRINTER TO LPT1
SET CONSOLE OFF
SET PRINTER ON
FOR ni := 1 to len(aCode)
?? aCode[ni]
NEXT
EJECT
SET CONSOLE ON
SET PRINTER OFF
SET PRINTER TOAliás, por curiosidade, hoje à noite vou até dar uma testada nessa LIB numa LaserJet que tenho aqui.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Gilberto M Silva
- Usuário Nível 3

- Mensagens: 230
- Registrado em: 13 Mar 2007 18:00
- Localização: Natal-RN / Parelhas(RN) / Natal(RN)
- Contato:
Para codificar um produto Ex: panela de barro, ai eu digito um condigo ele me gera o de barras, imprimo e etiquieto o produto e boto na prateleira para vender, quando vender é só ler o codigo de barras e pronto, foi vendido.
Gilberto[]
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
A cada conversasão realizada conquistamos mais amigos, isto é um lucro inestimável
Clip5.2 DBFCDX
marcolinosilva@click21.com.br gmarcolinosilva@hotmail.com / Skype:gilberto.marcolino
- Gilberto M Silva
- Usuário Nível 3

- Mensagens: 230
- Registrado em: 13 Mar 2007 18:00
- Localização: Natal-RN / Parelhas(RN) / Natal(RN)
- Contato:
Não. A função do Leonardo não é pra imprimir, mas para criar um código de barras. Por isso intercedi e apresentei uma solução mais "econômica" que a que ele apresentou. Pra imprimir você precisará de algo do tipo da biblioteca que subi pra você no meu site.Gilberto M Silva escreveu:Usando a função que o leonardo postou, a partir dela como posso imprimir o codigo de barras em uma hp por exemplo.
Veja se ela funciona. Se funcionar, ótimo. Caso contrário, tenho outra biblioteca aqui. Se não me engano, foi feito pela XPTO. Mas nessa eu não sei se consta o código EAN13.
Editado pela última vez por Maligno em 26 Jul 2007 16:37, em um total de 1 vez.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
