21 de enero de 2005

Resolución General 1702 de la AFIP (Argentina)

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