Código de Barras

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
digitom
Usuário Nível 2
Usuário Nível 2
Mensagens: 93
Registrado em: 06 Abr 2006 13:52
Localização: Anápolis-Go
Contato:

Código de Barras

Mensagem por digitom »

Esse é um codigo de barras que baixei do site: http://www.toyanet.com.br/rotinas.php

é 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
Fui :)
Avatar do usuário
LucianoGaara
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 16 Mai 2007 16:08
Localização: SP

Mensagem por LucianoGaara »

Cara aparentemente eh a mesma função que eu havia pego e testado ,e não funciono se vc tiver outra agradeço.
By LucianoDalessandre
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Luciano, post suas Mensagens na Seção do CLIPPER ou XHARBOUR....essa SEÇÃO é exclusiva para codigo-fonte..
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder