Power Builder - CODIGO DE BARRA EAN 13

 
Vista:

CODIGO DE BARRA EAN 13

Publicado por JAG (20 intervenciones) el 07/04/2010 23:24:31
Para los que les interesa funcion para imprimir codigo de barra probado en power builder 11.5 y si alguien puede contribuir a mejorar esperamos su contribucion

//*------------------------------------------------------
//* FUNCTION CODIGO EAN-13
//*------------------------------------------------------
//* Convierte un string para ser impreso con
//* fuente True Type "PF EAN P36" ó "PF EAN P72"
//* PARAMETROS:
//* tcString: Caracter de 12 dígitos (0..9)
//* USO: _StrToEan13('123456789012')
//* RETORNA: Caracter
//*------------------------------------------------------

string lcCod, lcLat, lcMed, lcRet, lcRet1, lcJuego, lcIni, lcResto //, laJuego(10)
integer lnI, lnCheckSum, lnAux, lnPri

lcRet = TRIM(tcString)
IF Len(lcRet) <> 12 then
//*--- Error en parámetro
//*--- debe tener un largo = 12
RETURN lcRet
END IF
//*--- Genero dígito de control
lnCheckSum = 0
FOR lnI = 1 TO 12
IF MOD(lnI,2) = 0 then
lnCheckSum = lnCheckSum + integer(Mid(lcRet,lnI,1)) * 3
ELSE
lnCheckSum = lnCheckSum + integer(Mid(lcRet,lnI,1)) * 1
END IF
END FOR
lnAux = MOD(lnCheckSum,10)
IF lnAux = 0 then lcRet1="0" else lcRet1=string(10 - lnAux)

lcRet = lcRet+ lcRet1

//*--- Para imprimir con fuente True Type PF_EAN_PXX
//*--- 1er. dígito (lnPri)
lnPri = integer(LEFT(lcRet,1))
//*--- Tabla de Juegos de Caracteres
//*--- según 'lnPri' (¡NO CAMBIAR!)
string laJuego[10] ={ 'AAAAAACCCCCC', 'AABABBCCCCCC', 'AABBABCCCCCC', 'AABBBACCCCCC', 'ABAABBCCCCCC', 'ABBAABCCCCCC', 'ABBBAACCCCCC', 'ABABABCCCCCC', 'ABABBACCCCCC', 'ABBABACCCCCC' }
//*--- Caracter inicial (fuera del código)
lcIni = Char(lnPri + 35)
//*--- Caracteres lateral y central
lcLat = Char(33)
lcMed = Char(45)
//*--- Resto de los caracteres
lcResto = Mid(lcRet,2,12)
FOR lnI = 1 TO 12
lcJuego = Mid(laJuego [lnPri + 1], lnI, 1)
CHOOSE CASE lcJuego
CASE 'A'
lcResto = Replace(lcResto,lnI,1,Char(integer(Mid(lcResto,lnI,1)) + 48))
CASE 'B'
lcResto = Replace(lcResto,lnI,1,Char(integer(Mid(lcResto,lnI,1)) + 65))
CASE 'C'
lcResto = Replace(lcResto,lnI,1,Char(Integer(Mid(lcResto,lnI,1)) + 97))
END CHOOSE
END FOR
//*--- Armo código
lcCod = lcIni + lcLat + Mid(lcResto,1,6) + lcMed + Mid(lcResto,7,6) + lcLat

RETURN lcCod
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:CODIGO DE BARRA EAN 13

Publicado por Jose A (1 intervención) el 19/04/2010 16:30:36
Hola.
Tu rutina está muy interesante, solo le falta saber que pasa cuando el digito de control es = 0, además falta un end if despues de
IF lnAux = 0 then lcRet1="0" else lcRet1=string(10 - lnAux) y no se donde lo colocas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

CODIGO DE BARRA EAN 13

Publicado por Omar Daniel (2 intervenciones) el 04/10/2013 22:45:01
Gracias por esta solución. En mi caso, yo ya tenía el código completo (los 13 dígitos) por lo que solo utilice la segunda parte del código (la que corresponde a la impresión). Lo use en Power Builder 9.0 y no ha generado ningún problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar