FACTURA ELECTRONICA ARGENTINA: CODIGO DE BARRAS
Posted: Thu Sep 12, 2019 8:25 pm
Buenas...
Ya resuelto el tema de la generación de la factura electrónica, ahora nos queda el código de barras.
Esta vez, podemos resolverlo completamente desde HMG, gracias al gran trabajo de S. Rathinagiri y Claudio Soto.
Me estoy refiriendo a esto:
La otra cosa que necesitamos, es la especificación de AFIP para el código:
El código debe ser "Interleaved 2 of 5", también conocido como "ITF".
La otra cosa "problemática" podría ser obtener el dígito verificador, pero realmente es muy sencillo:
- Por un lado, sumamos los dígitos que ocupan posiciones pares.
- Por otro, sumamos los que ocupan posiciones impares.
- A la suma de los impares la multiplicamos por 3 y le agregamos la suma de los pares.
- Obtenemos el resto de dividir este resultado por 10. Si da 0, el dígito verificador es cero, de lo contrario se lo calcula como 10 - resto.
En este ejemplo, vamos a generar el código de barras como una imágen PNG.
Este es el código completo:
Espero que les sea de utilidad.
Ya resuelto el tema de la generación de la factura electrónica, ahora nos queda el código de barras.
Esta vez, podemos resolverlo completamente desde HMG, gracias al gran trabajo de S. Rathinagiri y Claudio Soto.
Me estoy refiriendo a esto:
Code: Select all
- New in HFCL: HMG_Zebra Barcode Creation Function using hbzebra harbour contrib library and HFCL BosTaurus library. (Contributed by Dr. Claudio Soto and S. Rathinagiri)
- HMG_CreateBarCode( cCode, cType, [nBarwidth], [nBarHeight], [lDisplayCode], [cPNGFileName], [aBarColor], [aBackColor], [lCheckSum], [lWide2_5], [lWide3] )
- HMG_CreateBarCode() function can be used to create barcode image in png file format if cPNGFileName parameter is included. If cPNGFileName is omitted, the function returns the hBitMap handle of barcode.
- Any one of the following Barcode types is allowed. { "EAN13","EAN8","UPCA","UPCE","CODE39","ITF","MSI","CODABAR","CODE93","CODE11","CODE128","PDF417","DATAMATRIX","QRCODE" }
- Checkdigit will be generated by library if omitted.
- See sample in hfcl\samples\hmg_zebra folder
Code: Select all
* CUIT (11)
* TIPO DE COMPROBANTE (3)
* PUNTO DE VENTA (5)
* CAE (14)
* FECHA DE VENCIMIENTO (8) AAAAMMDD
* DIGITO VERIFICADOR (1)
La otra cosa "problemática" podría ser obtener el dígito verificador, pero realmente es muy sencillo:
- Por un lado, sumamos los dígitos que ocupan posiciones pares.
- Por otro, sumamos los que ocupan posiciones impares.
- A la suma de los impares la multiplicamos por 3 y le agregamos la suma de los pares.
- Obtenemos el resto de dividir este resultado por 10. Si da 0, el dígito verificador es cero, de lo contrario se lo calcula como 10 - resto.
En este ejemplo, vamos a generar el código de barras como una imágen PNG.
Este es el código completo:
Code: Select all
FUNCTION GENERARCODIGO( nCuitEmisor , nTipoComp, nPdv, cCAE , cVencimiento )
cCuitEmisor := STRZERO(nCuitEmisor,11)
cTipoComp := STRZERO(nTipoComp,3)
cPdv := STRZERO(nPdv,5)
cCode := cCuitEmisor + cTipoComp + cPdv + cCAE + cVencimiento
cCheck := GetCheckDigit(cCode)
HMG_CreateBarCode( cCode + cCheck , "ITF" ,,,.t., "codigobarras.png",, , .f. , ,)
RETURN
FUNCTION GetCheckDigit(cCode)
L := Len(cCode)
nSumaImpares := 0
nSumaPares := 0
for i := 1 To l Step 2
n := Val( SubStr( cCode , i , 1 ) )
nSumaImpares += n
next i
for i := 2 To l Step 2
n := Val( SubStr( cCode , i , 1 ) )
nSumaPares += n
next i
s := ( nSumaImpares * 3 ) + nSumaPares
m := s % 10
if m == 0
nCheckDigit := 0
else
nCheckDigit := 10 - m
endif
cCheckDigit := str(nCheckDigit,1,0)
return cCheckDigit