![]() |
QuickReport - Seleccionar bandeja
Tengo problemas para mandar un reporte hecho con quickreport a una bandeja determinada.
El tema es asi: yo tengo un reporte y los usuarios tienen que poder elegir si imprimirlo por la bandeja 2 o por la bandeja 3 (por ejemplo). Probé cambiar la propiedad PrinterSettings.CustomBinCode pero ignora eso y sigue imprimiendo en la bandeja que está configurada por default. Uso la version 3.6.2 de QR y estoy tratando de imprimir en una HP Laserjet 4100, aunque tambien pasa en otros modelos de HP. Alguien tienen alguna idea de que puede estar sucediendo ?? Gracias desde ya. |
Hola
Yo normalmente llamo al reporte por medio de un form en el que especifico los factores que quiero que se vean, con esto practicamente con el mismo formulario de Qreport hago varios reportes diferentes. este es un codigo que utilizo para llamar a un reporte (X) desde este form. If Reporte = 'ComprasXProveedor' then begin ShortDateFormat := '#yyyy/mm/dd#'; try QRComprasXCliente:=TQRComprasXCliente.Create(self); QRComprasXCliente.ADOQuery1.SQL.Add(' WHERE CxPagar.TipoTransac="FA" '); QRComprasXCliente.ADOQuery1.SQL.Add(' AND FechaTransac >= '+DateToStr(DTP1.Date)+' AND FechaTransac <= '+DateToStr(DTP2.Date)); QRComprasXCliente.ADOQuery1.SQL.Add(' AND Proveedores.CodProve >= '+Edit3.Text+' AND Proveedores.CodProve <= '+Edit4.Text); QRComprasXCliente.ADOQuery1.SQL.Add(' ORDER BY CodProveedor, FechaTransac;'); QRComprasXCliente.ADOQuery1.Open; ShortDateFormat := 'dd/mm/yyyy'; QRComprasXCliente.Titulo.text := 'Compras Realizadas a Proveedores'; QRComprasXCliente.QRLblDesde.Caption := DateToStr(DTP1.Date); QRComprasXCliente.QRLblHasta.Caption := DateToStr(DTP2.Date); If RadioGroup1.ItemIndex = 0 then QRComprasXCliente.Print else QRComprasXCliente.Preview; finally QRComprasXCliente.Free; con esto se presenta un pre- reporte en pantalla y escojo la impresora en la que quiero imprimir, siempre que voy a cambiar de impresora, indico que me lo muestre por pantalla antes, de lo contrario me lo envia a la inpresora predeterminada. espero te sirva Saludos |
Si por supuesto, pero yo pregunto sobre la posiblidad de seleccionar la bandeja en la que quiero que salga mi reporte.
No sobre como se hace un reporte en si. Gracias de todas formas. |
Hola:
Yo siempre he creido que los desarrolladores de quickreport gastaron toda su materia gris en programar y no les quedó nada para documentarlo. En otras palabras: Es uno de los mejores generadores de reports pero sin duda, es el peor explicado de todos. Como para casi todo con quickreport, te van ha hacer falta los fuentes ( o sea la versión profesional). Si cargas QrPrntr verás como esta definida la clase TPrinterSettings, que es la que te permite definir las caracteríticas últimas de la impresion: tipo de papel, orientación y por supuesto la bandeja. El procedure GBin es el encargado de seleccionar la badeja de la impresora:
Como ves, este procedimiento encargado de seleccionar la bandeja de la impresora, es bastante oscuro. Deberemos hacer un pequeño programa que nos diga los numeros ( fijate que aBin es un integer) de las bandejas de nuestra impresora, para poder seleccionarlas por programa. Lo dejo para otra entrega. Saludos |
Para comprender mejor como funciona
la selección de la bandeja, vamos a desarrollar una pequeña aplicación. Cargas Delphi, e inicias un nuevo proyecto. Le llamaremos Eligebandejas Nuetro proyecto tendrá por ahora una sola unidad. El nombre se lo pones a tu gusto, que sea algo original y nunca visto antes, como por ejemplo Mainform.:) Nuestra unidad tendrá aparte del form, dos speedbuttons, una etiqueta y un PrinterSetupDialog. El caption del primer boton será 'Printer Setup'. El caption de la etiqueta será 'Bin Code' ( que es lo que queremos conocer). El otro boton, de momento lo dejamos inutil. Al terminar el codigo debe quedar así: Código Delphi [-] Código Delphi [-]
Compila el proyecto y ejecutalo con tu impresora. Apunta lso codigos de cada bandeja. Saludos |
Añadamos una segunda unidad, que será un report para ver como funciona la elección de bandeja. Este report será lanzado por el segundo botón de la unidad principal. Así pues, lo primero es escribir algo en el caption del segundo boton: Pondremos 'Print' y el eventon on click se encargará de lanzar el report. En resumen, la unidad principal quedá así:
La segunda unidad tendrá un quickreport. La propiedad bands de este será todas false menos HasDetail y HasPage Header En la banda de cabecera pondremos un TQRLabel y en el caption algo descriptivo como: 'Prueba de selección de bandeja' En la banda de detalles colocamos otro TQRLabel para que veamos como queda el report El codigo quedará así
En fin, espero haber respondido a lo que planteabas. Saludos |
Te agradezco mucho el tiempo que te has tomado, pero a pesar de elegir la bandeja 3, el reporte sigue saliendo en la bandeja 2 (que es la que tiene el papel que tiene seteado el QR).
Alguna otra solución ? |
Cita:
Para comprobar si eso es asi, lo mejor es que imprimas dede el word, cambiando la bandeja a ver si obedece. Por último decirte que lo anterior solo trabaja para las versiones de qreport 362. Si usas alguna anterior debes modificar el codigo de TPrinterSetting.ApplySetting en el QRPrntr.pas. Si fuese así dímelo y te lo envío Saludos. |
Nuevamente muchas gracias, por a probarlo y te cuento como me fue.
|
Hola buenas
Quería preguntar si se podría conseguir el mismo resultado sin necesidad de tener instalado el quickrep pro. He probado a instalarlo y el ejemplo funciona perfectamente, pero el quickrep me provoca errores de incompatiblidad con los componentes teechart y al final la cosa me causa más problemas que soluciones, de ahí mi pregunta. En todo caso, gracias por la ayuda :) |
La franja horaria es GMT +2. Ahora son las 23:30:24. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi