El QR también conocido como "código de respuesta rápida" es requerido por normatividad en la impresión de las facturas de venta, es similiar a un codigo de barras. Por defecto el codigo QR generado tiene un nivel de corrección L(7%). La Corrección de error de un código QR permite decodificarlo aunque esté parcialmente oscurecido o ligeramente dañado gracias al patrón que contiene información duplicada (redundancia) de los contenidos. 

Hay cuatro niveles de corrección de error: L(7%), M (15%), Q(25%), H(30%). Cada nivel tiene su propio porcentaje de daño que puede sostener, L es el más bajo y H, el más alto. Cuál utilizar depende del tamaño real del código QR a imprimir.


Dependiendo de la Corrección de Errores se puede destruir hasta un 30% de un Código QR sin afectar la legibilidad del mismo. Gracias a esta particularidad técnica es posible insertar un logotipo que cubra una parte de la estructura del Código QR.

Cuanto mayor sea la Corrección de Errores, más caracteres deberán ser encriptados para mantenerlos legibles. Esto puede aumentar tanto el espacio de almacenamiento requerido así como el tamaño de impresión del Código QR.

La Corrección de Errores está configurada al 30% para Códigos QR con logotipo y al 7% para códigos sin logotipo.

Para implementar esta funcionalidad del QR en los reportes debe realizar lo siguiente:


Paso 1

En el servidor de la empresa, se debe implementar la libreria QRCoder.dll en la carpeta Bin/ del directorio de Reporting Services. Por defecto esta carpeta se encuentra ubicada en %ProgramFiles%\Microsoft SQL Server\MSRS13.MSSQLSERVER\Reporting Services\ReportServer\bin. Esta ruta puede cambiar dependiendo del nombre de instancia y version del motor de base de datos instalado en el servidor. Para una rápida solución presione Windows+R, y en el ejecutar escriba %ProgramFiles%\Microsoft SQL Server\, e identifique la carpeta que comienza por MSRS y navegue hasta la carpeta Bin/.  Allí debe copiar la libreria QRCode.dll adjunta en este documento.


Paso 2

En el reporte personalizado debe agregar la referencia a la libreria QRCode en la sección Referencias:  Para esto presione en Agregar y copie el siguiente texto: QRCoder, Version=1.3.3.0, Culture=neutral, PublicKeyToken=null



Luego de esto agregue el siguiente codigo personalizado en la sección código:


Public Function GetQR(data As String) As Byte()
  Dim aData = Strings.Split(data, ",")
        Dim dataAsString As String = String.Empty
        Dim nSplit As Integer = 0
        Dim dataKey As String = String.Empty
        Dim dataValue As String = String.Empty
        For Each dat as string In aData
            nSplit += 1
            If nSplit = 1 Then
                dataKey = dat
            End If
            If nSplit = 2 Then
                dataValue = dat
                dataAsString += dataKey+": "+dataValue + vbCrLf
                nSplit = 0
            End If
        Next

   Using qrGenerator As QRCoder.QRCodeGenerator = New QRCoder.QRCodeGenerator()
            Dim QRCodeData As QRCoder.QRCodeData = qrGenerator.CreateQrCode(dataAsString, QRCoder.QRCodeGenerator.ECCLevel.L)
            Dim QRCode As QRCoder.PngByteQRCode = New QRCoder.PngByteQRCode(QRCodeData)
            Dim qrCodeImage = QRCode.GetGraphic(20)
            Return qrCodeImage   
  End Using
End Function


Paso 3

Agregue un control de imagen al reporte, y en propiedades defina 

  • el origen de la imagen: Base de datos
  • Usar este campo: indique la siguiente expresión: =Code.GetQR(First(Fields!QR.Value, "items"))
  • Usar este tipo MIME: image/png