La Resolución General 1702 de la AFIP (Argentina) entrará en vigencia a principios del año 2005, por lo que en muchos foros de desarrolladores en Visual FoxPro se planteó la inquietud de que si con informes de Visual FoxPro y las rutinas y fuentes True Type del artículo de PortalFox "Codigos de barras en informes de VFP" se puede cumplimentar ésta resolución.
La respuesta es SI. Solo se debe modificar ligeramente la rutina correspondiente al código de barra "Interleaved 2 of 5" para que ésta retorne la cadena codificada lista para imprimir con la tipografía elegida, el dígito verificador y la cadena apta para la lectura humana. De todos modos existe en el artículo mencionado la fuente "PF Interleavev 2 of 5 Text" que contiene la cadena con lectura humana en su parte inferior.
Para el retorno de estos valores, lo mejor es crear una clase que llene los valores correspondientes en propiedades para poder ser utilizados. Para ello, la clase tiene las siguientes 3 propiedades:
- DigitoVerificador: El dígito verificador de la cadena generada.
- CodigoBarra: La cadena codificada lista para imprimir con la fuente True Type "PF Interleaved 2 of 5".
- LecturaHumana: La cadena apta para la lectura humana.
La clase y un simple ejemplo de como utilizarla es el siguiente:
LOCAL lo lo = CREATEOBJECT("I2of5") lo.Codificar("201688627180100011234567890123420041231") ? SPACE(1) + lo.DigitoVerificador ? SPACE(1) + lo.CodigoBarra FONT "PF Interleavev 2 of 5 Text",36 ? SPACE(4) + lo.CodigoBarra FONT "PF Interleaved 2 of 5",36 ? SPACE(12) + lo.LecturaHumana FONT "Arial",13 lo = Null *------------------------------------------------------------ * CLASS I2of5 AS CUSTOM *------------------------------------------------------------ * Clase que codifica una cadena a INTERLEAVED 2 OF 5 * METODOS: Codificar(tcTexto) * PROPIEDADES: * CodigoBarra: Texto para se impreso con fuente True Type * "PF Interleaved 2 of 5" ó "PF Interleavev 2 of 5 Text" * DigitoVerificador = Digito verificador * LecturaHumana = Texto para Lectura Humana * USO: * lo = CREATEOBJECT("I2of5") * lo.Codificar("201688627180100011234567890123420041231") * ? lo.DigitoVerificador * ? lo.CodigoBarra FONT "PF Interleavev 2 of 5 Text",36 * ? lo.CodigoBarra FONT "PF Interleaved 2 of 5",36 * ? lo.LecturaHumana FONT "Arial", 13 * lo = Null * RELEASE lo *------------------------------------------------------------ DEFINE CLASS I2of5 AS CUSTOM CodigoBarra = "" DigitoVerificador = "" LecturaHumana = "" PROCEDURE Codificar(tcTexto) LOCAL lcStart, lcStop, lcLH, lcCB, ; lnLong, lnI, lnCont, lnSum, lnAux lcStart = CHR(40) lcStop = CHR(41) lcLH = ALLTRIM(tcTexto) *--- Genero dígito de control lnLong = LEN(lcLH) lnSum = 0 lnCont = 1 FOR lnI = lnLong TO 1 STEP -1 lnSum = lnSum + VAL(SUBSTR(lcLH,lnI,1)) * ; IIF(MOD(lnCont,2) = 0,1,3) lnCont = lnCont + 1 ENDFOR lnAux = MOD(lnSum,10) lcDV = ALLTRIM(STR(IIF(lnAux = 0,0,10 - lnAux))) lcLH = lcLH + lcDV lnLong = LEN(lcLH) *--- La longitud debe ser par IF MOD(lnLong,2) # 0 lcLH = '0' + lcLH lnLong = LEN(lcLH) ENDIF *--- Convierto los pares a caracteres lcCB = '' FOR lnI = 1 TO lnLong STEP 2 IF VAL(SUBS(lcLH,lnI,2)) < 50 lcCB = lcCB + CHR(VAL(SUBS(lcLH,lnI,2)) + 48) ELSE lcCB = lcCB + CHR(VAL(SUBS(lcLH,lnI,2)) + 142) ENDIF ENDFOR THIS.DigitoVerificador = lcDV THIS.LecturaHumana = lcLH THIS.CodigoBarra = lcStart + lcCB + lcStop ENDPROC ENDDEFINE *------------------------------------------------------------
NOTA: Recordar que las fuentes True Type deben estár instaladas en la PC para que los ejemplos funcionen correctamente. Las fuentes "PF Interleaved 2 de 5" se pueden descargar de: FuentesI2OF5.ZIP (17,10 KB)
La Resolución General 1702 de la AFIP (Argentina), (que se puede leer desde el sitio de la AFIP http://www.afip.gov.ar/afip/resol170204.html), establece que los datos que debe contener la cadena que debe ser impresa en los distintos tipos de comprobantes son:
- C.U.I.T. (Clave Unica de Identificación Tributaria) del emisor (11 caracteres).
- Código de tipo de comprobante (2 caracteres).
- Punto de venta (4 caracteres).
- C.A.I. (Código de Autorización de Impresión) (14 caracteres).
- Fecha de vencimiento (8 caracteres).
- Dígito verificador (1 caracter).
Esta cadena debe estar codificada con el código de barras Interleaved 2 of 5 (Entrelazado 2 de 5) y debe contener en la parte inferior la cadena completa y apta para lectura humana.
Un proyecto de ejemplo en VFP, con un formulario con el ingreso de los datos, un informe y la clase arriba descripta lo pueden descargar de RG1702.ZIP (10,10 KB)
Estas son las imágenes del proyecto de ejemplo de la descarga:
Espero que este ejemplo haya sido ilustrativo y útil para cumplimentar la R.G.1702 con un informe en Visual FoxPro. Si necesita mas información sobre códigos de barras en informes de VFP puede acceder al siguiente artículo: Codigos de barras en informes de VFP
Hasta la próxima.
Luis María Guayán
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.