SSRS: Imprimir directamente sin visualizar el reporte usando RSClientPrint

Reporting Services 2000 SP1 y SP2 así como Reporting Services 2005 proveen un método de impresión directa del reporte sin tener que exportar a algún formato.

Esto es mediante la integración de un control ActiveX (RSClientPrint) que se descarga automáticamente al visualizar un reporte mediante el Report Manager o el Report Viewer.

En algunas implementaciones de RS no se requiere la visualización del reporte, si no la impresion directa, en estos casos la opción más común es exportar a PDF y que el usuario imprima desde el visor de PDF, lo cual tiene ciertas implicaciones con los usuarios por la cantidad de pasos a realizar en cada impresión.

Con el método propuesto se puede imprimir directamente usando el RSClientPrint sin tener la necesitad de exportar a algún formato o usar el Report Viewer, para esto, solo es necesario integrar unas líneas de código en nuestra página y podremos implementarlo en cualquier aplicación WEB.

NOTA: Este código aplica para la versión de Reporting Services 2000 SP2

1.- Declaración del objeto ActiveX RSClientPrint

<html><body>
<object id="RSClientPrint" classid="CLSID:FA91DF8D-53AB-455D-AB20-F2F023E498D3"
codebase="http://<Servidor>/reportserver?rs:Command=Get&rc:GetImage=8.00.1038.00rsclientprint.cab#Version=2000,080,1038,000"
viewastext></object>

2.- Código de Javascript de Manipulación del control ActiveX

<script language="javascript">
function imprimir()
{
RSClientPrint.MarginLeft = 10;
RSClientPrint.MarginTop = 10;
RSClientPrint.MarginRight = 10;
RSClientPrint.MarginBottom = 10;
RSClientPrint.Culture = 2058;
RSClientPrint.UICulture = 2058;
RSClientPrint.Print('http://<Servidor>/reportserver', '/<Dir Reporte>/reporte1&variable1=19&variable2=518', 'Titulo del Reporte 1')
}
</script>

El método Print  del objeto RSClientPrint requiere de 3 parametros

RSClientPrint.Print(‘<Ruta del ReportServer>’,'<Ruta Reporte y parametros>’,'<Titulo del reporte para el Print Preview >’)

Parametro 1.- Ruta del Report Server, regularmente en el siguiente formato: http://localhost/reportserver

Parametro 2.- Ruta del Reporte y Parámetros, la ruta del reporte como aparece en el Report Manager y los parámetros anidados por & (ampersand) por ejemplo: /DirectorioReporte/Reporte1&m1=1&m2=2&m3=valor string

Nota muy importante: Los parametros anidados al reporte son CaseSensitive.

Parametro 3.- Titulo del reporte en el Print Preview

3.- Código Opcional para forzar la autenticación

<a href="#" mce_href="#" onclick="imprimir();"><img src="https://<Servidor>/ReportServer?rs:Command=Get&rc:GetImage=8.00.1038.00print.gif" border="0" /></a>
</body>
</html>

En aplicaciones WEB donde no se usa seguridad integrada de Windows, es necesario autenticarnos a RS para poder visualizar el reporte, si no estamos autenticados obtendremos un error al abrir el Print Preview.

Debido a que el control ActiveX se instala en el primer uso, solo en esa ocasión nos pedirá autenticarnos a RS, entonces es necesario solicitar la autenticación cada vez que se use el reporte, para lo cual, con el código anterior se forza la conexión a RS para solicitar la autenticación y descargar el icono de la impresora, entonces si se muestra el icono de la impresora indica que estamos autenticados al RS.

4.- Debug y pruebas

Para debugueo y pruebas se recomienda usar la herramienta Fiddler, se obtiene en la página http://www.fiddlertool.com, para dudas de como usar y probar el código con esta herramienta no dudes en contactarme

Visto: 22,153 veces

5 comentarios en “SSRS: Imprimir directamente sin visualizar el reporte usando RSClientPrint

  1. Hola, muy buen artículo.
    Soy novata en el tema de Reporting Services,mi pregunta concreta es dónde ubico el código que estas suministrando?
    Muchas Gracias.

  2. Hola, ando checando este control, lo que pasa es que lo quiero implementar con php, ya me manda a instalar el control y todo.. pero creo que truena al momento de querer buscar el report server, encontre otro ejemplo donde ponen la ruta del archivo directamente.

    —————————————
    RSClientPrint.Print(“http://{ourwebmachinename}/{ourapp}/ReportServer.ashx”,
    “%2fFolder+1%2fFolder+2%2fReport+1&name=administrator”, “Report 1”)

    ———————— MI CODIGO

    RSClientPrint.Print(‘http://localhost/tiendadurc/ventas/imprimir.php’, ‘%2fid=’, ‘Factura’)

    SE PUEDE APLICAR ASI???

  3. Este control es para usarse con Reporting Services, el caso que comentas utilizando otra página fuera del “ReportServer” no es correcto para este componente, adicionalmente el control viene en la implementación de SSRS.

  4. No he podido lograr que no se presente la ventana para seleccionar la impresora, quiero que imprima directamente a la impresora por omisión (predeterminada). O bien, como le indico que exporte a PDF en lugar de impresión.
    Gracias anticipadas por la atención.

Deja un comentario