PDA

Ver la Versión Completa : Mandar QReport por email


Aprendiendo
01-07-2003, 16:06:21
Hola a tod@s,

Mi duda es la siguiente, como podría mandar un informe hecho en QReport, el cual sea totalmente transparente al usuario, me refiero de que cuando se cumplan ciertas reglas, se haga el envío (siempre mostrando en una ventana pop-up, el estado del envío).

Espero haberme explicado bien..

Esperando una pronta respuesta, reciban un cordial saludo....
:) :cool: :)

cadetill
01-07-2003, 21:21:21
No se si te servira, pero en mi web tienes un Previsualizador con l aposibilidad de envio por mail como fichero adjunto (la web en la firma)

Germi
02-07-2003, 11:29:39
Yo hago algo parecido. Envio una factura hecha en Qreport por correo electronico. Totalmente trasnsparente para el usuario.
Lo que si que hago es convertir el qreport a PDF y luego envio el PDF.

Si te interesa saber el codigo me lo dices.

Germi
03-07-2003, 11:35:55
Te voy a resumir. Primero para pasar cualquier fichero a PDF necesitas la versión del Acrobat completa. Una vez instalada, te creara una impresora virtual llamada Acrobat Distiller. Cuando imprimas el Qreport, tienes que cambiarlo a esta impresora. Antes en las propiedades de la impresora le tienes que añadir un nuevo puerto para indicarle la ruta donde quieres que te deje el fichero convertido. Al ejecutarlo, te creara el informe del qreport en un fichero .PDF en el directorio donde que hayas dicho en el puerto comentado anteriormente.
Una vez tengas el archivo en disco, lo envías por correo electrónico a donde quieras. Para ello mira en Trucos el nº 412 que lo explica muy bien y funciona correctamente.
Existe un pequeño problema que es fácil de resolver. Como el crear el fichero a formato PDF o cualquier otro formato tarda unos segundos y lo hace en Batch, el intentará enviar enseguida el fichero y puede que te de error de que no lo encuentra o que envié solo parte de lo generado. Para ello añade el control TTimer de la paleta System. Esto ejecuta un evento transcurridos X segundos. Pones la propiedad Enable a False para activarlo tu cuando quieras que será después de enviar a imprimir el Qreport y transcurridos los segundos que tu le digas en la propiedad interval ejecutara el procedure donde debes rellenar el envió por correo.

Espero haberme explicado mas o menos. Te puedo decir que si lo haces bien funciona y no es muy complicado.

Saludos y a por el.



procedure Nombre del procedure de botón imprimir...;
begin

// Selecciona la impresora de conversión a acrobat.
// Hay que crear un puerto en las impresoras virtuales
// Con esto conseguimos convertir a PDF un archivo Qrepot
// Hay que coger la impresora virtual de acrobat. Con la instrucción PrinterSettings.PrinterIndex:=nº donde este es el numero de la impresora.
QROrigenes := TQROrigenes.Create(Self);
QROrigenes.PrinterSettings.PrinterIndex:=3;
QROrigenes.Print;
Timer.Enabled:=True;

end;

procedure TimerTimer(Sender: TObject);

begin
// Envió de correo
Poner en este procedure el Truco 412 (Enviar email, con adjunto y sin abrir navegador);
// Desactiva el control de tiempo
Timer.Enabled:=False;

end;

Aprendiendo
03-07-2003, 22:59:27
Germi muchas gracias por tu pronta respuesta, voy a probar y ya te contaré.

Un salu2. :) :cool: :)

rruffino
16-06-2005, 04:25:25
Hola, te comento que yo tengo problemas al hacer esto, pues no hay forma de poder hacer que el archivo se guarde en el disco, incluso no se como obtener el numero de la acrobat distiller. Te agradeceria si me das una mano en esto, desde ya muchas gracias
Román

Lepe
16-06-2005, 09:31:07
Puedes usar el objeto Tprinter para obtenerlo:

procedure TForm1.Button6Click(Sender: TObject);
var i:Integer;
begin
for i:=0 to printer.Printers.Count-1 do
Memo1.Lines.Add(printer.Printers[i])
end;

Necesitarás el uses Printers;

Currandolo un poco, puedes hacer que el usuario elija la impresora y que permita establecer qué impresora quiere utilizar; por si elimina o añade impresoras y el PrinterIndex cambia.

Un saludo

rruffino
17-06-2005, 19:52:30
Amigo, sigo en la misma, con el codigo que me pasaste se que número de impresor es la Acrobat Distiller. Lo que pasa es que no puedo grabar o no lo veo al archivo que supuestamente se crearia en PDF.
Segun los pasos que indica Germi serían estos, los que te paso en el codigo siguiente pero sigo sin poder solucoinarlo

procedure TForm_insumos.BitBtn3Click(Sender: TObject);
begin
QuickReport_rotulo.PrinterSettings.PrinterIndex:=1;
QuickReport_rotulo:=TQuickReport_rotulo.Create(Self);
QuickReport_rotulo.Print;
Temporizador.Enabled:=True;
end;

La verdad que me estoy rompiendo la cabeza y no puedo lograrlo. Espero de vuestra ayuda para solucionarlo. Desde ya muchas gracias
Román.-:)

Lepe
18-06-2005, 00:14:42
procedure TForm_insumos.BitBtn3Click(Sender: TObject);
begin
QuickReport_rotulo.PrinterSettings.PrinterIndex:=1;
QuickReport_rotulo:=TQuickReport_rotulo.Create(Self);
QuickReport_rotulo.Print;
Temporizador.Enabled:=True;
end;


veamos que hace la rutina:
- primero asigna la impresora al a las preferencias de impresion del QuickReport.
- despues crea el QuickReport, machacando el que ya existía, si el QuickReport_rotulo no estaba creado, la primera instrucción daría un access violation.
- Despues mandas a imprimir.... ¿a que impresora?, se supone que a la impresora por defecto no?

En principio, la segunda linea sobra, pero tampoco puedo asegurarlo porque no sé donde se crea el QuickReport. Parece que lo tienes creado de antemano.:confused:

Un saludo