none
Imprimir Reporte desde T-SQL RRS feed

  • Pregunta

  • Se puede desde un procedimiento almacenado en MS SQL Server 2008, mandar a imprimir un reporte?

     

    En el procedimiento almacenado inserto un registro (factura de venta)

    y cuando esto sucede me gustaria imprimir automaticamente la factura, sin intervencion del usuario.

     

    Por favor si alquien me da una idea de con tecnologia de reporte debo trabajar. gracias.

    lunes, 23 de enero de 2012 19:24

Respuestas

  • Te comento que el procedimiento no lo llama ningun programa cliente. 
    Eso es imposible. Un procedimiento almacenado no puede ejecutarse sólo, sin que nadie lo llame. Siempre tiene que existir un programa que envíe al servidor el EXEC que ejecuta el procedimiento. Incluso aunque lo ejecute el Agente de SQL, en ese caso el "programa cliente" sería el servicio del Agente. Y también aunque el procedimiento se ejecute desde un Trigger al modificar algo en una tabla, en este caso el "programa cliente" es el que ha modificado el registro de la tabla.

    Se puede hacer esto con reporting Services?,

    1.- El programa se ejecute cada minuto (un timer) 

    Sí claro. Podrías usar el Programador de Tareas de Windows para lanzar periódicamente el programa, o hacer lo mismo desde el Agente de SQL, o incluso escribir tu propio Servicio Windows que use un Timer internamente.

    2.- El programa imprima sin necesidad de intervencion del usuario

    De hecho, si el programa utiliza cualquiera de los tres métodos anteriores, necesariamente tendrá que funcionar sin intervención del usuario, ya que en los tres casos rueda como servicio y por lo tanto no puede presentar una interfaz de usuario.

    Reporting Services tiene un Servicio Web que permite pedirle desde programación que emita un informe. El Servicio devuelve el informe en forma de "array de bytes" con el contenido binario del informe en el formato en que lo hayas pedido (por ejemplo, Word, Excel, PDF, HTML o CSV). Una vez que el programa tiene esos datos, convertirlos en un documento impreso ya es un problema de programación, completamente independiente de Reporting Services. Por ejemplo, si se descarga el informe en formato Word, se puede usar el propio Word mediante automatización OLE para pedirle que lo imprima. Si esto se programa bien programado, se puede conseguir que funcione sin ninguna intervención del usuario.

    3. asociar el reporte a una impresora especifica, una bandeja, cantidad de copias

    Eso tendrá que hacerlo por dentro el programa. La forma de seleccionar la impresora, bandeja, etc. depende del lenguaje y entorno de programación en que se escriba el programa. Si se programa en .Net, esto se configura a través de la propiedad PrinterSettings del objeto PrintDocument.
    jueves, 2 de febrero de 2012 16:06
    Moderador

Todas las respuestas

  • Me temo que no es nada sencillo. Los reports normalmente se imprimen desde el programa cliente que emite el reporte, no desde el servidor. Por ejemplo, si visualizas el report desde el Report Manager en un navegador, es el navegador el que realiza la impresión. Si lo emites desde un programa en .Net con un ReportViewer, es el ReportViewer el que realiza la impresión. Y si lo emites desde un programa cliente llamando al WebService de SSRS, te devuelve ya los bytes del report en el formato final que le hayas pedido, y es el programa que recibe dichos bytes el que tendría que volcarlo a impresora por programación.

    En conclusión: la opción más sencilla es que en lugar de intentar imprimir el reporte desde el procedimiento almacenado, lo imprimas desde el programa cliente que llama a dicho procedimiento almacenado.

     

    martes, 24 de enero de 2012 7:03
    Moderador
  • Alberto muchas gracias por tu respuesta muy clara,

     

    Te comento que el procedimiento no lo llama ningun programa cliente.  Tendria que crear un programa cliente que este pendiente en cuanto se agregue un registro en la base de datos, imprima el correspondiente formato en cierta impresora,

     

    Se puede hacer esto con reporting Services?,

    1.- El programa se ejecute cada minuto (un timer)

    2.- El programa imprima sin necesidad de intervencion del usuario

    3. asociar el reporte a una impresora especifica, una bandeja, cantidad de copias.

     

     

    Que plataforma me recomiendas?

    jueves, 2 de febrero de 2012 13:56
  • Te comento que el procedimiento no lo llama ningun programa cliente. 
    Eso es imposible. Un procedimiento almacenado no puede ejecutarse sólo, sin que nadie lo llame. Siempre tiene que existir un programa que envíe al servidor el EXEC que ejecuta el procedimiento. Incluso aunque lo ejecute el Agente de SQL, en ese caso el "programa cliente" sería el servicio del Agente. Y también aunque el procedimiento se ejecute desde un Trigger al modificar algo en una tabla, en este caso el "programa cliente" es el que ha modificado el registro de la tabla.

    Se puede hacer esto con reporting Services?,

    1.- El programa se ejecute cada minuto (un timer) 

    Sí claro. Podrías usar el Programador de Tareas de Windows para lanzar periódicamente el programa, o hacer lo mismo desde el Agente de SQL, o incluso escribir tu propio Servicio Windows que use un Timer internamente.

    2.- El programa imprima sin necesidad de intervencion del usuario

    De hecho, si el programa utiliza cualquiera de los tres métodos anteriores, necesariamente tendrá que funcionar sin intervención del usuario, ya que en los tres casos rueda como servicio y por lo tanto no puede presentar una interfaz de usuario.

    Reporting Services tiene un Servicio Web que permite pedirle desde programación que emita un informe. El Servicio devuelve el informe en forma de "array de bytes" con el contenido binario del informe en el formato en que lo hayas pedido (por ejemplo, Word, Excel, PDF, HTML o CSV). Una vez que el programa tiene esos datos, convertirlos en un documento impreso ya es un problema de programación, completamente independiente de Reporting Services. Por ejemplo, si se descarga el informe en formato Word, se puede usar el propio Word mediante automatización OLE para pedirle que lo imprima. Si esto se programa bien programado, se puede conseguir que funcione sin ninguna intervención del usuario.

    3. asociar el reporte a una impresora especifica, una bandeja, cantidad de copias

    Eso tendrá que hacerlo por dentro el programa. La forma de seleccionar la impresora, bandeja, etc. depende del lenguaje y entorno de programación en que se escriba el programa. Si se programa en .Net, esto se configura a través de la propiedad PrinterSettings del objeto PrintDocument.
    jueves, 2 de febrero de 2012 16:06
    Moderador