¿Cómo implemento un sistema con códigos de barras?
Quisiera saber como implemento un sistema con códigos de barras, es decir que la aplicación genere el código y lo imprima y que al leerlo se pueda realizar las consultas correspondientes al dato leído.
Para imprimir códigos de barras primero lo que hay que hacer es "codificar" el valor que querés imprimir (que es distinto para cada tipo de código de barras) y después hay que imprimir ese valor con la fuente de código de barras que corresponda. El tipo de código de barras que elijas, dependerá del tipo de información que necesites imprimir. Algunos tipos solo permiten números, otros números y letras, otros cualquier carácter, algunos tienen una longitud máxima mayor que otros, otros tienen una longitud fija. Por ejemplo, te muestro como se debería hacer si querés imprimir un código en Interleaved 2 of 5 (que es uno de los tantos tipos) * FUNCTION _StrToI2of5(tcString) * INTERLEAVED 2 OF 5 *------------------------------------------------------ * Convierte un string para ser impreso con * fuente True Type "PF Interleaved 2 of 5" * ó "PF Interleaved 2 of 5 Wide" * ó "PF Interleaved 2 of 5 Text" * Solo caracteres numéricos * USO: _StrToI2of5('1234567890') * RETORNA: Caracter *------------------------------------------------------ FUNCTION _StrToI2of5(tcString) LOCAL lcStart, lcStop, lcRet, lcCheck, lcCar, lnLong, lnI, lnSum, lnAux lcStart = CHR(40) lcStop = CHR(41) lcRet = ALLTRIM(tcString) *--- Genero dígito de control lnLong = LEN(lcRet) lnSum = 0 lnCount = 1 FOR lnI = lnLong TO 1 STEP -1 lnSum = lnSum + VAL(SUBSTR(lcRet,lnI,1)) * IIF(MOD(lnCount,2) = 0,1,3) lnCount = lnCount + 1 ENDFOR lnAux = MOD(lnSum,10) lcRet = lcRet + ALLTRIM(STR(IIF(lnAux = 0,0,10 - lnAux))) lnLong = LEN(lcRet) *--- La longitud debe ser par IF MOD(lnLong,2) # 0 lcRet = '0' + lcRet lnLong = LEN(lcRet) ENDIF *--- Convierto los pares a caracteres lcCar = '' FOR lnI = 1 TO lnLong STEP 2 IF VAL(SUBS(lcRet,lnI,2)) < 50 lcCar = lcCar + CHR(VAL(SUBS(lcRet,lnI,2)) + 48) ELSE lcCar = lcCar + CHR(VAL(SUBS(lcRet,lnI,2)) + 142) ENDIF ENDFOR *--- Armo código lcRet = lcStart + lcCar + lcStop RETURN lcRet ENDFUNC Si vos necesitás imprimir un número (por ejemplo 1234567890) llamás a esta función: CadI25 = _StrToI2of5("1234567890") Y en la variable CadI25 vas a tener la cadena codificada que tenés que imprimir usando la fuente que te dice en la cabecera de la función. Por acá no puedo enviarte las fuentes, por lo que si no las conseguís, pásame un correo donde enviártelas y si querés también te mando más funciones para otros tipos de códigos de barra.