Page 1 of 1

FACTURA ELECTRONICA ARGENTINA: CODIGO DE BARRAS

Posted: Thu Sep 12, 2019 8:25 pm
by Roberto Lopez
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:

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
La otra cosa que necesitamos, es la especificación de AFIP para el código:

Code: Select all

	* CUIT (11)
	* TIPO DE COMPROBANTE (3)
	* PUNTO DE VENTA (5)
	* CAE (14)
	* FECHA DE VENCIMIENTO (8) AAAAMMDD
	* DIGITO VERIFICADOR (1)
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:

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
Espero que les sea de utilidad.

Re: FACTURA ELECTRONICA ARGENTINA: CODIGO DE BARRAS

Posted: Sun Sep 15, 2019 1:44 pm
by ASESORMIX
Gracias Sr. Roberto