Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   QuickReport, 4 copias de un listado con distintos pies (https://www.clubdelphi.com/foros/showthread.php?t=37662)

Jose Manuel 19-11-2006 18:04:01

QuickReport, 4 copias de un listado con distintos pies
 
Hola estoy trabajando con D6 y QuickReport 3.6.2. Mi problema es que quiero imprimir 4 copias de un formulario de una hoja, pero en cada una de ellas debe cambiar el pie:

Por ejemplo

1º copia label1.caption := 'Ejemplar para el INTERESADO';
2º copia label1.caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO A REMITIR ';
3º copia label1.caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO';
4º copia label1.caption := 'Ejemplar a CONSERVAR POR LA OFICINA GESTORA';

El usuario previsuliza el listado, y si está conforme pulsa imprimir, entonces la impresora lanza 4 copias.

¿Hay alguna forma de decirle que en cada una de las copias, cambie el texto de un label o debo lanzar 4 veces el listado y previsualizarlo 4 veces?

El proceso sería parecido a cuando se imprime la "declaración de la renta" y cada copia se identifica a quien va dirigida.

Un saludo a todos.
Jose Manuel García

ElKurgan 19-11-2006 23:11:34

Si la etiqueta que quieres cambiar se llama, por ejemplo, qrLabel1, debes hacer lo siguiente:

1.- Añadir la unit "pptypes" en la clausula uses del Informe.
2.- Poner la propiedad PrinterSetup.Collation := True;
3.- Poner la propiedad PrinterSetup.Copies := 4;
4.- Poner la propiedad PassSetting := psTwoPass;
5.- Crear una variable privada (por ejemplo, FCopia) de tipo Integer; en el
evento BeforePrinter la inicializamos a cero.
6.- En el evento OnSTartPage escribimos esta sentencia:
with MiReport do // o como se llame el informe...
If SecondPass and (AbsolutePageNo = 1) then Inc(FCopia);
7.- Finalmente, en el evento OnPrint escribimos lo siguiente:
Código:

  case FCopia of
    1: qrLabel1.Caption := 'Ejemplar para el INTERESADO';
    1: qrLabel1.Caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO A REMITIR ';
    1: qrLabel1.Caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO';
    1: qrLabel1.Caption :='Ejemplar a CONSERVAR POR LA OFICINA GESTORA';
  end;

Espero que te sirva.
Un saludo;

ElKurgan 19-11-2006 23:30:44

¡ARGH!
Nada de lo dicho antes vale para nada... Me parece que este truco era para
el ReportBuilder y no para el Quick Report...

Pido mil perdones por la metedura de pata

Lepe 20-11-2006 14:39:57

En el evento BeforePrint de ese qrLabel, puedes modificarlo a voluntad y cambiar el texto.

Código Delphi [-]
procedure .... Label1BeforePrint(....);

begin
 case label1.tag of:
   0: Text := 'Ejemplar para el INTERESADO';
   1: Text := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO A REMITIR ';
   2: Text := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO';
   3: Text := 'Ejemplar a CONSERVAR POR LA OFICINA GESTORA';
 end;
 label1.tag := label1.tag + 1;

Ignoro como funciona cuando se le da a "imprimir varias copias" igual hace una sola imagen de lo que se va a imprimir y después envía 4 copias de esa imagen. Si funciona así, no te sirve "mi idea", quizás tengas que usar otra cosa, por ejemplo:

Código Delphi [-]
qrListado.PreviewModal;
  for i:= 1 to 4  do
    qrListado.Print; // se envía 4 veces a imprimir.

Edito: Pues no leí el primer mensaje de ElKurgan, pero la idea es la misma en QuickReports.

Saludos y suerte

Jose Manuel 20-11-2006 18:58:48

Gracias por las ideas, el proceso funciona bien cuando imprimimos sin visualizar el listado, pero si elegimos visualizar el listado, surgen los siguientes problemas:
1º El usuario puede optar por no imprimir
2º Si pulsa imprimir, sale una copia o las que hayamos seleccionados pero todas iguales,
3º Si despues del Print_autoliq.QR_autoliq.PreviewModal; pongo algo, siempre se ejecutará despues de que el usuario cierre el listado, y tal vez el usuario no lo sepa o se le olvide.

Lo ideal, sería capturar la pulsación de la tecla IMPRIMIR cuando estamos previsualizando este listado, y ejecutarlo como cuando se imprime directamente.

Muchas gracias por vuestra ayuda, veré si soy capaz de hacer esto

Un saludo a todos
Jose Manuel


Código Delphi [-]
    mensaje:='Quieres pre-visualizar el listado antes de imprimirlo (SN)';
    Button := Application.MessageBox(pChar(mensaje), 'Seleccionar opción', MB_YESNOCANCEL +
    mb_DefButton1);

    if Button = IDYES  then
       begin
       Print_autoliq.QR_autoliq.PreviewModal;
       // Si pulsamos IMPRIMIR, Deberiamos capturar la llamada y
       // ejecutarla como cuando se imprime directamente.
       end;

    if Button = IDNO   then // no previsualiza e imprime directamente
    begin
       case impr_liq_copias.itemindex of
    -1,0: begin {en el combobox se ha selecionado todas las copias}
          nCopias:=4;
          Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := 0;
          end;
       1: begin {en el combobox se ha selecionado la 1º copia}
          nCopias:=1;
          Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := 0;
          end;
       2: begin {en el combobox se ha selecionado la 2º copia}
          nCopias:=1;
          Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := 1;
          end;
       3: begin {en el combobox se ha selecionado la 3º copia}
          nCopias:=1;
          Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := 2;
          end;
       4: begin {en el combobox se ha selecionado la 4º copia}
          nCopias:=1;
          Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := 3;
          end;
       end;
       for i:= 1 to nCopias  do
       begin
        case Print_autoliq.QR_autoliq.QRLabelEjemplar.tag of
        0: Print_autoliq.QR_autoliq.QRLabelEjemplar.caption := 'Ejemplar para el INTERESADO';
        1: Print_autoliq.QR_autoliq.QRLabelEjemplar.caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO A REMITIR ';
        2: Print_autoliq.QR_autoliq.QRLabelEjemplar.caption := 'Ejemplar para el ESTABLECIMIENTO DE CREDITO';
        3: Print_autoliq.QR_autoliq.QRLabelEjemplar.caption := 'Ejemplar a CONSERVAR POR LA OFICINA GESTORA';
        end;
       Print_autoliq.QR_autoliq.QRLabelEjemplar.tag := Print_autoliq.QR_autoliq.QRLabelEjemplar.tag + 1;
       Print_autoliq.QR_autoliq.Print; // se imprime el nº de copias seleccionado.
      end;
    end;


La franja horaria es GMT +2. Ahora son las 05:29:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi