é para impressão de Código de Barras em multi-coluna para uso em impressora Hp ou Epson
Código: Selecionar todos
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[I] ) # [C] .or. Len( aNum[I] ) # 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[I], 1 ) ) +1,4]
cBar += [101]
for J:= 1 to 6
nPos:= Val( SubStr( aNum[I], J +1, 1 ) ) +1
cBar+= aTab[nPos,Val( SubStr( cFlag, J, 1 ) )]
next
cBar+= [01010]
for J:= 1 to 6
nPos:= Val( SubStr( aNum[I], J +7, 1 ) ) +1
cBar+= aTab[nPos,3]
next
cBar+= [101]
if cImp = [HP]
cNum+= aNum[I]
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[I], [@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


