A partir de Marzo de 2021 (según el tipo de contribuyente) será obligatorio incluir un código QR en las facturas electrónicas emitidas.
Así que, me puse a trabajar en eso, para tener listas las actualizaciones de mis aplicaciones.
Comparto aquí el código, ya que podría ser de utilidad para alguien.
Code: Select all
*-------------------------------------------------------------------------------------------*
PROCEDURE QRGEN( cFecha , nCUITEmisor, nPdV, nTipoCmp , nNroCmp , nImporte ,cMoneda, nCtz , nTipoDocRec , nNroDocRec , cCodAut )
*-------------------------------------------------------------------------------------------*
LOCAL cBaseURL, cCuit, cPtoVta, cTipoCmp, cJSON, cBase64JSON
cBaseURL := 'https://www.afip.gob.ar/fe/qr/?p='
cFecha := LEFT(cFecha,4) + '-' + SUBSTR(cFecha,5,2) + '-' + RIGHT(cFecha,2)
cCuit := ALLTRIM(STR(nCUITEmisor))
cPtoVta := ALLTRIM( STR(nPdV) )
cTipoCmp := ALLTRIM(STR(nTipoCmp))
cNroCmp := ALLTRIM( STR(nNroCmp) )
cImporte := ALLTRIM( STR(nImporte) )
cMoneda := ALLTRIM(cMoneda)
cCtz := ALLTRIM(STR(nCtz))
cTipoDocRec := ALLTRIM( STR(nTipoDocRec) )
cNroDocRec := ALLTRIM( STR(nNroDocRec) )
* Crear Texto QR
cJSON := '{"ver":1,"fecha":"' + cFecha + '","cuit":' + cCuit + ',"ptoVta":' + cPtoVta + ',"tipoCmp":' + cTipoCmp + ',"nroCmp":' + cNroCmp + ',"importe":' + cImporte + ',"moneda":"' + cMoneda + '","ctz":' + cCtz + ',"tipoDocRec":' + cTipoDocRec + ',"nroDocRec":' + cNroDocRec + ',"tipoCodAut":"E","codAut":' + cCodAut + '}'
cBase64JSON := hb_base64encode( cJSON )
cFullCode := cBaseURL + cBase64JSON
HB_MEMOWRIT( 'test.txt' , cFullCode , .F. )
* Generar CSV Para QRGEN
cCsv := 'qr' + ',' + '"' + cFullCode + '"'
HB_MEMOWRIT('qr.csv',cCsv,.F.)
* Generar BAT
cBat := 'qrgen.exe --format PNG qr.csv' + chr(13) + chr(10)
HB_MEMOWRIT('qr.bat',cBat,.F.)
* Ejecutar BAT
EXECUTE FILE 'qr.bat' WAIT HIDE
RETURN
Para probar el código, generé un QR con los datos de ejemplo de AFIP:
Code: Select all
*-------------------------------------------------------------------------------------------*
PROCEDURE TESTQRGEN()
*-------------------------------------------------------------------------------------------*
LOCAL cFecha := "20201013"
LOCAL nCUITEmisor := 30000000007
LOCAL nPdv := 10
LOCAL nTipoCmp := 1
LOCAL nNroCmp := 94
LOCAL nImporte := 12100
LOCAL cMoneda := 'DOL'
LOCAL nCtz := 65
LOCAL nTipoDocRec := 80
LOCAL nNroDocRec := 20000000001
LOCAL cCodAut := '70417054367476'
QRGEN( cFecha , nCUITEmisor, nPdV, nTipoCmp , nNroCmp , nImporte ,cMoneda, nCtz, nTipoDocRec , nNroDocRec , cCodAut )
RETURN
Más info en AFIP: https://www.afip.gob.ar/fe/qr/conceptos-generales.asp
Espero que les sea de utilidad.