Page 1 of 2
Lector no lee codigo de barra SOLUCIONADO
Posted: Mon Jun 04, 2018 1:31 am
by FranciscoA
Hola amigos, sigo con esto.
He construido esta función de prueba que imprime el codigo de barras sin problemas. Pero... el lector no lo lee.
Donde está el error? Que me hace falta?
El lector es un 3nStar SC100-1 y trabaja correctamente.
Solicito vuestra ayuda para solventarlo.
Code: Select all
Function ImprCodeBar()
local oPrn, oFont1, oFontCBar, cCode := "SERV005", cCode2 := StrZero(123,4)
local nLin, nCol, nCodigo:= 1, n
//local cFontCBar := ".\EAN-13.ttf", cNombre := "EAN-13"
local cFontCBar := ".\Code3of9.TTF", cNombre := "Code3of9"
local nRowStep, nColStep
AddFontResource( cFontCBar ) //cuando font no esta instalada en windows
PRINT oPrn NAME "Recibos" PREVIEW
DEFINE FONT oFont1 NAME "Arial" SIZE 12,-12 OF oPrn
DEFINE FONT oFontCBar NAME cNombre SIZE 36,-36 OF oPrn
nRowStep := oPrn:nVertRes/60
nColStep := oPrn:nHorzRes/80
PAGE
nLin := 10 * nRowStep
nCol := 10* nColStep
oPrn:Say( nLin , nCol, cCode, oFontCBar )
nLin += ( 10 * nRowStep )
oPrn:Say( nLin, nCol, cCode, oFont1 )
nLin += (10 * nRowStep)
oPrn:Say( nLin , nCol, cCode2, oFontCBar )
nLin += (10 * nRowStep)
oPrn:Say( nLin, nCol, cCode2, oFont1 )
ENDPAGE
ENDPRINT
oFont1:End()
oFontCBar:End()
RemoveFontResource( cFontCBar ) //cuando font no esta instalada en windows
SysRefresh()
Return nil
Agradezco de antemano.
Saludos.
Re: Lector no lee codigo de barra
Posted: Mon Jun 04, 2018 1:51 am
by Marcelo Via Giglio
Hola,
prueba
saludos
Marcelo
Re: Lector no lee codigo de barra
Posted: Mon Jun 04, 2018 1:58 am
by FranciscoA
Marcelo.
Gracias por tu rápida respuesta.
En este momento no tengo disponible una impresora. Probaré mañana, y te digo.
Nuevamente gracias.
Re: Lector no lee codigo de barra
Posted: Mon Jun 04, 2018 11:30 am
by cmsoft
Francisco, tal como te dice Marcelo, generalmente cada font de codigo de barra tiene un caracter de inicio y de cierre. En Interleave 2 of 5, pueden ser las llaves {} o los corchetes [], en algunos fonts me a tocado que son los paréntesis (). No se en ese font que utilizas, sino puedes buscar las especificaciones del mismo para saber cual son.
Te dejo una rutina que imprime los códigos de barra de tarjetas de empleados, con un dígito verificador, con el Font Interleave 2 of 5 donde cada para de números se representa con un caracter.
Code: Select all
**********************************************************************************
** Emitir tarjeta para fichada
STATIC FUNCTION Tarjeta()
LOCAL oPrn, oFont5, i, mbarra1, nRow, nCol , nRowStep, nColStep
PRINT oPrn NAME "Tarjetas" PREVIEW
AddFontResource( "Bar25ifh.ttf" )
DEFINE FONT oFont5 NAME "Bar 25i f HR" SIZE 110, 30 OF oPrn
nRowStep = oPrn:nVertRes() / 50
nColStep = oPrn:nHorzRes() / 80
nRow := 1
nCol := 3
PAGE
mbarra1 := STR(oQry:tarjeta,5)
mbarra1 := STRTRAN(mbarra1," ","0") + DigitoVer(mbarra1)
mbarra1 := CodigoBarra( mbarra1)
*** Tarjeta
oPrn:RoundBox( nRow+20, nCol+20, nColStep*40,nRow+5*nRowStep, 60,60 )
oPrn:Say( nRow+2*nRowStep, 4*nColStep*nCol, mbarra1,oFont5)
ENDPAGE
ENDPRINT
oFont5:End()
RETURN NIL
STATIC FUNCTION CodigoBarra( x )
LOCAL i, bar := {}, j := 0, bar1 := {}, cBarr := ""
FOR i:= 33 to 122
AADD(bar,CHR(i))
AADD(bar1,STRTRAN(STR(j,2)," ","0"))
j++
NEXT i
FOR i:= 161 to 170
AADD(bar,CHR(i))
AADD(bar1,STRTRAN(STR(j,2)," ","0"))
j++
NEXT i
FOR j := 1 TO LEN(x) STEP 2
i := ASCAN(bar1,SUBSTR(x,j,2))
cBarr := cBarr + bar[i]
NEXT j
RETURN "{"+cBarr+"}"
STATIC FUNCTION DigitoVer( x )
LOCAL amulti, dig, divi,valor,i,retorno
amulti := {5,4,3,2,7,6,5,4,3,2}
valor := 0
FOR i := 1 TO 5
valor := valor + VAL(SUBSTR(x,i,1)) * amulti[i]
NEXT
divi := valor % 11
IF divi = 0
dig := 0
ELSE
dig := 11 - divi
IF dig > 9
dig := 9
ENDIF
ENDIF
dig := INT(dig)
RETURN STR(dig,1)
Re: Lector no lee codigo de barra
Posted: Mon Jun 04, 2018 1:26 pm
by FranciscoA
cmsof:
Gracias por compartir tu código. Precisamente quiero imprimir una tarjeta de empleado.
Lo probaré mas tarde, y te comento.
Saludos.
Re: Lector no lee codigo de barra
Posted: Mon Jun 04, 2018 11:59 pm
by FranciscoA
Marcelo.
Funcionó al 100...!!!
Gracias.
cmsof.
No he sido capaz de adaptar to código. El preview muestra esto:
{ ! 3 }, en vez del codigo de barra, con el siguiente codigo:
Code: Select all
STATIC FUNCTION Tarjeta()
LOCAL oPrn, oFont5, i, mbarra1, nRow, nCol , nRowStep, nColStep
PRINT oPrn NAME "Tarjetas" PREVIEW
AddFontResource( "Bar25ifh.ttf" )
DEFINE FONT oFont5 NAME "Bar 25i f HR" SIZE 110, 30 OF oPrn
nRowStep = oPrn:nVertRes() / 50
nColStep = oPrn:nHorzRes() / 80
nRow := 1
nCol := 3
PAGE
mbarra1 := Str(Vendedor->Codigo,3) //STR(oQry:tarjeta,5)
mbarra1 := STRTRAN(mbarra1," ","0") + DigitoVer(mbarra1)
mbarra1 := CodigoBarra( mbarra1)
*** Tarjeta
**oPrn:RoundBox( nRow+20, nCol+20, nColStep*40,nRow+5*nRowStep, 60,60 )
oPrn:Say( nRow+2*nRowStep, 4*nColStep*nCol, mbarra1,oFont5)
ENDPAGE
RemoveFontResource( "Bar25ifh.ttf" )
ENDPRINT
oFont5:End()
RETURN NIL
//---------------------------------------//
STATIC FUNCTION CodigoBarra( x )
LOCAL i, bar := {}, j := 0, bar1 := {}, cBarr := ""
FOR i:= 33 to 122
AADD(bar,CHR(i))
AADD(bar1,STRTRAN(STR(j,2)," ","0"))
j++
NEXT i
FOR i:= 161 to 170
AADD(bar,CHR(i))
AADD(bar1,STRTRAN(STR(j,2)," ","0"))
j++
NEXT i
FOR j := 1 TO LEN(x) STEP 2
i := ASCAN(bar1,SUBSTR(x,j,2))
cBarr := cBarr + bar[i]
NEXT j
RETURN "{"+cBarr+"}"
//---------------------------------------//
STATIC FUNCTION DigitoVer( x )
LOCAL amulti, dig, divi,valor,i,retorno
amulti := {5,4,3,2,7,6,5,4,3,2}
valor := 0
FOR i := 1 TO 5
valor := valor + VAL(SUBSTR(x,i,1)) * amulti[i]
NEXT
divi := valor % 11
IF divi = 0
dig := 0
ELSE
dig := 11 - divi
IF dig > 9
dig := 9
ENDIF
ENDIF
dig := INT(dig)
RETURN STR(dig,1)
Qué falta?... Gracias
Re: Lector no lee codigo de barra
Posted: Tue Jun 05, 2018 12:01 am
by FranciscoA
cmsof.
Se me olvidaba comentar que la fuente la encontré en internet, con el nombre exacto de la que mencionas.
No sé si será versión.
Saludos.
Re: Lector no lee codigo de barra
Posted: Tue Jun 05, 2018 12:21 am
by FranciscoA
cmsof.
Corrijo el codigo y ahora si esta funcionando. Mi error fue remover la font antes de tiempo.
Aqui está corregido.
Code: Select all
STATIC FUNCTION Tarjeta()
LOCAL oPrn, oFont5, i, mbarra1, nRow, nCol , nRowStep, nColStep
AddFontResource( "Bar25ifh.ttf" )
PRINT oPrn NAME "Tarjetas" PREVIEW
DEFINE FONT oFont5 NAME "Bar 25i f HR" SIZE 110, 30 OF oPrn
nRowStep = oPrn:nVertRes() / 50
nColStep = oPrn:nHorzRes() / 80
nRow := 1
nCol := 3
PAGE
mbarra1 := Str(Vendedor->Codigo,3) //STR(oQry:tarjeta,5)
mbarra1 := STRTRAN(mbarra1," ","0") + DigitoVer(mbarra1)
mbarra1 := CodigoBarra( mbarra1)
*** Tarjeta
**oPrn:RoundBox( nRow+20, nCol+20, nColStep*40,nRow+5*nRowStep, 60,60 )
oPrn:Say( nRow+2*nRowStep, 4*nColStep*nCol, mbarra1,oFont5)
ENDPAGE
ENDPRINT
oFont5:End()
RemoveFontResource( "Bar25ifh.ttf" )
RETURN NIL
Gracias, y disculpa.
Re: Lector no lee codigo de barra
Posted: Tue Jun 05, 2018 2:38 am
by cmsoft
Buenisimo Francisco!! Me alegro que te haya funcionado.
La font interleave 2 of 5 cada usa 1 (un) carácter para mostrar un par de dígitos. Por eso la funcion de conversion. Siempre lo que le pasas debe ser un numero par de dígitos.
La función del digito verificador te puede ser útil al momento de validar la tarjeta del empleado. (suele pasar que el lector devuelve un código mal leido).
Espero que te sirva el ejemplo y cualquier duda a tu disposición.
Re: Lector no lee codigo de barra
Posted: Tue Jun 05, 2018 2:01 pm
by karinha
Francisco, tu puedes enviar el "Bar25ifh.ttf" ?
email:
kapiabafwh@gmail.com
Gracias, saludos.
Re: Lector no lee codigo de barra
Posted: Tue Jun 05, 2018 3:16 pm
by FranciscoA
cmsof, muy amable.
Saludos.
Re: Lector no lee codigo de barra
Posted: Tue Jun 05, 2018 3:16 pm
by FranciscoA
Karinha, por favor revisa tu correo.
Saludos.
Re: Lector no lee codigo de barra
Posted: Tue Jun 05, 2018 3:28 pm
by karinha
FranciscoA wrote:Karinha, por favor revisa tu correo.
Saludos.
Gracias Francisco. Listo.
Saludos.
Re: Lector no lee codigo de barra SOLUCIONADO
Posted: Wed Oct 14, 2020 3:41 pm
by jds
Francisco,
Puedes enviarme el "Bar25ifh.ttf" por favor
Gracias por tu ayuda
José (jds) Belgium
Re: Lector no lee codigo de barra SOLUCIONADO
Posted: Wed Oct 14, 2020 3:45 pm
by jds
Francisco
I forgot to give you my email address
My email =
deschutterjose@gmail.com