Ver Mensaje Individual
  #4  
Antiguo 24-05-2011
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Reputación: 22
fjcg02 Va camino a la fama
Hola, para que el lector pueda interpretarla, hay que poner una serie de caracteres al principio y al final, dependiendo del tipo de código que utilices.

----------------------------------------------------------------------------
Link con código para montar los códigos de barras



http://www.portalfox.com/index.php?n...rder=0&thold=0

Los códigos 128
Como ya vimos en el artículo "Códigos de barras en reportes de Visual FoxPro", los códigos de barras 128 se dividen en 3 subconjutos:
El subconjunto A incluye: los dígitos, las letras mayúsculas, y los códigos de control.
El subconjunto B incluye: los dígitos, las letras mayúsculas y minúsculas, y los códigos de control.
El subconjunto C incluye: solo los dígitos y comprime dos dígitos numéricos en cada carácter, proporcionando una muy buena densidad de impresión.
Los códigos 128 se forman de la siguiente manera:
CaracterInicial + CadenaTexto + DigitoControl + CaracterFinal
Las funciones descritas al final del artículo calculan el dígito de control y añaden los caracteres de inicio y final de cada tipo de código de barra 128, a la cadena de texto.
Las fuentes TrueType
Las siguientes son una descripción de las fuentes disponibles en este artículo:
Code 128AB (Bc128ab.ttf): Código 128 A y B Normal
Code 128AB Short (Bc128abs.ttf): Código 128 A y B Bajo
Code 128AB Tall (Bc128abt.ttf): Código 128 A y B Alto
Code 128AB HR (Bh128ab.ttf): Código 128 A y B Normal con Lectura Humana
Code 128AB Short HR (Bh128abs.ttf): Código 128 A y B Bajo con Lectura Humana
Code 128AB Tall HR (Bh128ab.ttf): Código 128 A y B Alto con Lectura Humana
Code 128C (Bc128c.ttf): Código 128 C Normal
Code 128C Short (Bc128cs.ttf): Código 128 C Bajo
Code 128C Tall (Bc128ct.ttf): Código 128 C Alto
Code 128C HR (Bh128c.ttf): Código 128 C Normal con Lectura Humana
Code 128C HR Short (Bh128cs.ttf): Código 128 C Bajo con Lectura Humana
Code 128C HR Tall (Bh128ct.ttf): Código 128 C Alto con Lectura Humana
Codigo de barras CyT (codigo_barras_cyt.ttf): Código 128 A y B Alto
Estas fuentes TrueType se corresponden adecuadamente al tamaño de fuente mínimo recomendado por Correos de España que es 24 y de un ancho máximo de 105 mm.
Los requisitos para los envíos a Correos de España son:
Código 128 A
Densidad entre 0,38 mm. y 0,63 mm.
Composición del código:
Tipo de producto en 2 posiciones: Consultar con Correos los tipos admitidos
Código de cliente en 8 posiciones: Solicitar el código a Correos
Número de envío en 13 posiciones: No puede repetirse antes de 5 años. Puede incluir el año como las 4 primeras posiciones
La fuente que mejor se adapta a estos requisitos es la "Code 128AB Tall HR" con un tamaño de 28 puntos.
Independientemente de lo expresado anteriormente, estas fuentes TrueType se pueden adaptar a cualquier necesidad de impresión de códigos de barras 128, por las diversas combinaciones posibles entre tipo, tamaño e impresión de la cadena para la lectura humana.
Las funciones en VFP
Las funciones en Visual FoxPro para cada uno de los tres tipo de código de barra 128 son las siguientes:
Cita:
FUNCTION Codigo128A
LPARAMETERS m.cadena
*** Convierte una cadena para ser impresa en un
*** código de barras de tipo 128 A
*** Fuentes True Type válidas:
*** "Code 128AB", "Code 128AB HR",
*** "Code 128AB Short", "Code 128AB Short HR",
*** "Code 128AB Tall", "Code 128AB Tall HR" y
*** "Codigo de barras CyT"
IF PCOUNT() = 0
RETURN ""
ENDIF
IF TYPE("m.cadena") = "N"
m.cadena = TRANSFORM(m.cadena)
ENDIF
IF TYPE("m.cadena") != "C"
RETURN ""
ENDIF
m.cadena = ALLTRIM(m.cadena)
LOCAL m.vuelta, m.suma, m.caracterinicial, m.co, m.letra, ;
m.valorascii, m.checksum, m.caracterfinal
m.suma = 103
m.caracterinicial = CHR(123)
m.vuelta = m.caracterinicial
m.caracterfinal = CHR(126)
FOR m.co = 1 TO LEN(m.cadena)
m.letra = SUBSTR(m.cadena, m.co, 1)
m.valorascii = ASC(m.letra)
m.valorascii = m.valorascii - IIF(m.valorascii < 123, 32, 70)
m.suma = m.suma + (m.valorascii * m.co)
m.vuelta = m.vuelta + IIF(m.letra = " ", CHR(174), m.letra)
NEXT m.co
m.checksum = MAX(MOD(m.suma, 103), 0)
m.checksum = m.checksum + IIF(m.checksum > 90, 70, IIF(m.checksum = 0, 174, 32))
m.checksum = CHR(m.checksum)
m.vuelta = m.vuelta + m.checksum + m.caracterfinal
RETURN m.vuelta
ENDFUNC
FUNCTION Codigo128B
LPARAMETERS m.cadena
*** Convierte una cadena para ser impresa en un
*** código de barras de tipo 128 B
*** Fuentes True Type válidas:
*** "Code 128AB", "Code 128AB HR",
*** "Code 128AB Short", "Code 128AB Short HR",
*** "Code 128AB Tall", "Code 128AB Tall HR" y
*** "Codigo de barras CyT"
IF PCOUNT() = 0
RETURN ""
ENDIF
IF TYPE("m.cadena") = "N"
m.cadena = TRANSFORM(m.cadena)
ENDIF
IF TYPE("m.cadena") != "C"
RETURN ""
ENDIF
m.cadena = ALLTRIM(m.cadena)
LOCAL m.vuelta, m.suma, m.caracterinicial, m.co, m.letra, m.valorascii, ;
m.checksum, m.caracterfinal
m.suma = 104
m.caracterinicial = CHR(124)
m.vuelta = m.caracterinicial
m.caracterfinal = CHR(126)
FOR m.co = 1 TO LEN(m.cadena)
m.letra = SUBSTR(m.cadena, m.co, 1)
m.valorascii = ASC(m.letra)
m.valorascii = m.valorascii - IIF(m.valorascii < 123, 32, 70)
m.suma = m.suma + (m.valorascii * m.co)
m.vuelta = m.vuelta + IIF(m.letra = " ", CHR(174), m.letra)
NEXT m.co
m.checksum = MAX(MOD(m.suma, 103), 0)
m.checksum = m.checksum + IIF(m.checksum > 90, 70, IIF(m.checksum = 0, 174, 32))
m.checksum = CHR(m.checksum)
m.vuelta = m.vuelta + m.checksum + m.caracterfinal
RETURN m.vuelta
ENDFUNC
FUNCTION Codigo128C
LPARAMETERS m.cadena
*** Convierte una cadena para ser impresa en un
*** código de barras de tipo 128 C
*** Fuentes True Type válidas:
*** "Code 128C", "Code 128C HR",
*** "Code 128C Short", "Code 128C HR Short",
*** "Code 128C Tall", "Code 128C HR Tall"
IF PCOUNT() = 0
RETURN ""
ENDIF
IF TYPE("m.cadena") = "N"
m.cadena = TRANSFORM(m.cadena)
ENDIF
IF TYPE("m.cadena") != "C"
RETURN ""
ENDIF
m.cadena = ALLTRIM(m.cadena)
LOCAL m.vuelta, m.suma, m.caracterinicial, m.co, m.letra, ;
m.valorascii, m.valorreal, m.checksum, m.caracterfinal
m.suma = 105
m.caracterinicial = CHR(125)
m.vuelta = m.caracterinicial
m.caracterfinal = CHR(126)
IF LEN(m.cadena) % 2 # 0
m.cadena = "0" + m.Cadena
ENDIF
FOR m.co = 1 TO LEN(m.cadena) STEP 2
m.letra = SUBSTR(m.cadena, m.co, 2)
m.valorreal = VAL(m.letra)
m.valorascii = m.valorreal + IIF(m.valorreal < 90, 33, 71)
m.suma = m.suma + (m.valorreal * CEILING(m.co/2))
m.vuelta = m.vuelta + CHR(m.valorascii)
NEXT m.co
m.checksum = MAX(MOD(m.suma, 103), 0)
m.checksum = m.checksum + IIF(m.checksum < 90, 33, 71)
m.checksum = CHR(m.checksum)
*-- Reemplazo CheckSum
m.checksum = CHRTRAN(m.checksum, ;
CHR(171)+CHR(172)+CHR(173), CHR(176)+CHR(177)+CHR(178))
m.vuelta = m.vuelta + m.checksum + m.caracterfinal
RETURN m.vuelta
ENDFUNC
Nota importante: Estas funciones solo se corresponden con las fuentes TrueType de este artículo. Las funciones de los artículos "Códigos de barras en reportes de Visual FoxPro" y "Resolución General 1702 de la AFIP (Argentina)" se corresponden a las fuentes disponibles para descarga de cada artículo. Cada fuente tiene su función asociada para la correcta generación de los distintas simbologías de códigos de barras.
Ejemplos
Para utilizar las funciones se debe pasar como parámetro la cadena a codificar:
lc128A = Codigo128A("CODIGO128A")
lc128B = Codigo128B("codigo128b")
lc128C = Codigo128C("16886271")
Para la impresión se debe seleccionar la fuente correspondiente a cada función:
CLEAR
? Codigo128A("CODIGO128A") FONT "Code 128AB Short HR",36
? Codigo128B("codigo128b") FONT "Code 128AB Tall HR",36
? Codigo128C("16886271") FONT "Code 128C HR",60
?
? Codigo128A("PortalFox") FONT "Codigo de barras CyT",48
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -

Última edición por fjcg02 fecha: 24-05-2011 a las 18:37:14.
Responder Con Cita