Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Alguien me enseña a hacer un preview?

Tengo Rave Report 5, y Fast Report.

Pero quiciera poder hacer una vista previa en un Form, y realmente no se como. Todos los tutoriales que baje, solo enseñan a utilizar el diseñador.
Mi idea es hacer un reporte y dejarlo guardado en un archivo, y este poder visualizarlo antes de imprimir, en un form cualquiera.

Agradecere todo tipo de ayuda, ya sean sugerencias, tutoriales, una mano... lo que sea.

Gracias
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #2  
Antiguo 01-05-2007
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Creo que esto puede ayudarte.
Saludos.
Archivos Adjuntos
Tipo de Archivo: zip Previo.zip (3,0 KB, 96 visitas)
Responder Con Cita
  #3  
Antiguo 02-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Gracias por el ejemplo, esta muy claro. El unico problema que tengo ahora, es que si bien ya tengo creado los reportes con el Rave, no me deja precargarlos para compilarlos dentro del ejecutable, si lo intento al cargarlo me tira un error. Lo que pienso es que este error se puede deber a que la ruta de origen del archivo rav es muy larga, es decir exederia alguna limitacion de caracteres para la ruta de archivos, ya que si lo pongo en otra carpeta, mas corta, lo carga sin problemas, muy similar a cuando ensamblo con el MPLab para los uC, tenia el mismo error. No se si esto le sirve a alguien como dato.
Con esta ayuda que me diste, voy a diseñar algun reporteador y mandarlo al objet repository a ver que sale, un saludo y gracias.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #4  
Antiguo 02-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Bueno, a ver si entendi bien los pasos a seguir para generar un preview porque no lo logre hacer funcionar:

Los componentes Rave que necesito

- 1 RvProject que contiene el reporte "mi_reporte.rav"
- 1 RvNDRWriter
- 1 RvRenderPreview
- 1 RvRenderPrinter

Otros

- 1 ScrollBox
- 1 Button

Y los pasos a seguir para generar el reporte son los siguientes

1) Designo una variable a usar como TMemoryStream
Código:

var
NDRStream: TMemoryStream;
2) Creo el MemoryStream con el reporte que esta almacenado en RvProject
Código:

NDRStream := TMemoryStream.Create;
RvProject1.SaveToStream(NDRStream);
3) Al RvNDRWriter le asigo como Stream, la variable creada como
MemoryStream, la cual a esta altura, deberia contener el reporte
Código:

RvNDRWriter1.Stream := NDRStream;

4) Ejecuto el reporte, RvProject.Execute
Código:

RvProject1.Execute;
5) Cargo el RvRenderPreview con el Stream
Código:

RvRenderPrinter1.Render(NDRStream);
6) Si lo quiero visualizar, RvRenderPrinter.Render(mi_stream)
Código:

RvRenderPrinter1.Render(NDRStream);
7) Al salir, liberamos el Stream con Free.
Código:

NDRStream.Free;

Esta bien asi? me olvide de algo? Porque no lo puedo hacer andar.
Me dice, "el sistema no puede hallar la ruta especificiada" y no entiendo porque, el reporte existe, y esta en el mismo directorio del proyecto.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 02-05-2007 a las 04:56:28.
Responder Con Cita
  #5  
Antiguo 02-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Lo mas sencillo que se me ocurrio, es hacerlo mediante:

Código:
RvRenderPreview1.Render(RvNDRWriter1.FileName);
Y bueno, todo lo demas, Reglas, Tamaño de hoja, Zooms, exportaciones, queda a criterio de cada uno.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #6  
Antiguo 02-05-2007
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
No tengo muchos conocimientos, los problemas los resuelvo con lo que aportan otros. Esto es como lo uso.
Saludos
Responder Con Cita
  #7  
Antiguo 02-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por Loviedo
No tengo muchos conocimientos, los problemas los resuelvo con lo que aportan otros. Esto es como lo uso.
Saludos
Me salta demasiado error haciendo un TMemoryStream, pero si lo hago asi:

Código:
RvRenderPreview1.Render(RvNDRWriter1.FileName);
no me da problemas. El tema es que el Stream lo necesito, llegado el caso que quiera exportar a otro formato.

Saludos.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #8  
Antiguo 02-05-2007
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
He intentado adjuntar otro archivo, pero no me lo ha admitido.
Este es el codigo del Datamodule.
Código Delphi [-]
implementation

uses mFunct, RVClass, RVProj, RVCsStd, Aviso1, Prever1;

{$R *.DFM}

procedure TDM.DataModuleCreate(Sender: TObject);
begin
  RvProject1.ProjectFile := mPath+'\MiComunidad.rav';
end;


procedure TDM.VerDocumento1(numero:integer;Texto1:string);
var
  MyPage: TRavePage;
  MyText1,MyText2,MyText3,MyText14,MyText15,MyText6: TRaveText;
  MyText16,MyText17,MyText18,MyText19,MyText20,MyText21,MyText22: TRaveText;
  Texto2,Texto3: string;
begin
  RvProject1.Engine := Rvwriter1;
  RvProject1.open;
  if Numero = 1 then
    begin
      With RvProject1.ProjMan do
        begin
          MyPage := FindRaveComponent('Diario1.Page1',nil) as TRavePage;
          MyText1 := FindRaveComponent('Text9',MyPage) as TRaveText;
          MyText1.Text := Texto1;
          MyText2 := FindRaveComponent('Text2',MyPage) as TRaveText;
          MyText2.Text := Texto2;
          MyText3 := FindRaveComponent('Text3',MyPage) as TRaveText;
          MyText3.Text := Texto3;
          MyText14 := FindRaveComponent('Text14',MyPage) as TRaveText;
          MyText14.Text := Format('%*.*f',[8,2,sumahaber-sumadebe]);
        end;
      RvProject1.SelectReport('Diario1',true);
    end
  else if Numero = 2 then
    begin
      With RvProject1.ProjMan do
        begin
          MyPage := FindRaveComponent('Mayor1.Page1',nil) as TRavePage;
          MyText1 := FindRaveComponent('Text9',MyPage) as TRaveText;
          MyText1.Text := Texto1;
          MyText2 := FindRaveComponent('Text2',MyPage) as TRaveText;
          MyText2.Text := Texto2;
          MyText3 := FindRaveComponent('Text3',MyPage) as TRaveText;
          MyText3.Text := Texto3;
          MyText14 := FindRaveComponent('Text14',MyPage) as TRaveText;
          MyText14.Text := Format('%*.*f',[8,2,sumahaber-sumadebe]);
        end;
      RvProject1.SelectReport('Mayor1',true);
    end;

  Fprevio := TFprevio.Create(Application);
  try
    Fprevio.ShowModal;
  finally
    Fprevio.Free;
  end;
  RvProject1.close;
end;

end.

saludos
Responder Con Cita
  #9  
Antiguo 02-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
EL codigo del DM esta muy claro, no tengo problemas en la generacion del reporte, puedo generarlo por codigo o simplemente con el designer, mi problema esta en el Stream:

Código:
NDRStream := TMemoryStream.Create;
RvProject1.ProjectFile:='c:\mi_programa\mi_reporte.rav';
RvProject1.Engine := RvNDRWriter1;
RvProject1.open;
RvProject1.SaveToStream(NDRStream);
RvNDRWriter1.Stream := NDRStream;
RvRenderPrinter1.Render(NDRStream); //ERROR
EL error que me salta es : Invalid Project Format.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 02-05-2007 a las 11:31:49.
Responder Con Cita
  #10  
Antiguo 02-05-2007
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
A mi no me da ningún tipo de error, quizás el problema esté en los 'uses'.
Saludos.
Responder Con Cita
  #11  
Antiguo 02-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Mmm a esta altura no se

Código:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, RpRenderPrinter, RpRender, RpRenderCanvas,
  RpRenderPreview, RpBase, RpFiler, RpDefine, RpRave, RpCon, RpConDS,
  StdCtrls, RpSystem;
Código:
var
  Form1: TForm1;
  NDR: TMemoryStream;
Tendre que seguir buscandole la vuelta.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #12  
Antiguo 02-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Hasta ejecutanto:

Código:
 RvRenderPreview1.Render('mi_reporte.rav');
Me funciona, pero sigue el mismo error en el TMemoryStream, no se, "cosa e mandinga, vio?"

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #13  
Antiguo 02-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Hasta ejecutanto:

Código:
 RvRenderPreview1.Render('mi_reporte.rav');
Me funciona, pero sigue el mismo error en el TMemoryStream, no se, "cosa e mandinga, vio?"
Necesito una recomendacion, quiero armar un procedure que me imprima directamente el reporte, sin abrir ningun dialgo de imprimir ni nada, asi directamente como esta y setear todo por codigo. Que consideraciones debo tener? (tamaño papel, color o negro, copias, etc..)Una suerte de...

Código:
procedure imprimedirecto(ProjectFile:string);
Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #14  
Antiguo 02-05-2007
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
El fallo puede ser que destruye el NDRStream antes de tiempo. Yo lo hago cuando cierro el form del previo.
Saludos.
Responder Con Cita
  #15  
Antiguo 03-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Lo destruyo al salir en el evento OnClose del Form principal de la aplicación.
A mi entender, es como que el Stream está vacio, otra explicación no tengo.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #16  
Antiguo 03-05-2007
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
En el componente TRvNDRWrite la propiedad StreamMode debe ser smUser.

El RvProject.Engine apunta al TRvNDRWrite.
El NDRStream debes destruirlo en el onClose del previo, ya que lo estás creando en el onCreate del mismo, evitará crear múltiples instancias cada vez que visualice un report.
Saludos.
Responder Con Cita
  #17  
Antiguo 04-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Y como puedo hace para mandar a imprimir un reporte ya creado, por ejemplo "mi_reporte.rav", pero quiero mandarlo a imprimir directamente sin hacer ningun preview.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #18  
Antiguo 04-05-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola mamu
No se en rave, pero en qreport:
Para imprimir, directamente:
Código Delphi [-]
begin
       try
     QReport1.Print;
      finally
     QReport1.Free;
      end; 
   end;
Para hacer un Preview:
Código Delphi [-]
begin
       try
     QReport1.Preview;
      finally
     QReport1.Free;
      end; 
   end;
Asi de simple, la verdad no se porque no usas QReport, que viene con delphi.
Saludos
Responder Con Cita
  #19  
Antiguo 04-05-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por Caral
Asi de simple, la verdad no se porque no usas QReport, que viene con delphi.
Porque no lo tengo instalado, al menos no me aparece en la paleta de componentes, en que bpl esta?. Uso Delphi 7.
Ahora bien, yo elegi Rave, porque me es muy comodo modificar los reportes con el Designer, lo que me ahorra tiempo a la hora de tener que modificar el codigo del programa y hasta a veces ni es necesario. De todas maneras son muchos los que me han sugerido que me vuelque al QReport, asi que proximamente voy a empezar a ver el tema.

Saludos y gracias.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #20  
Antiguo 04-05-2007
Loviedo Loviedo is offline
Miembro
 
Registrado: dic 2004
Posts: 214
Poder: 0
Loviedo cantidad desconocida en este momento
Esto me funciona perfectamente.

Código Delphi [-]
procedure TFMain.Button1Click(Sender: TObject);
var
  NDRStream:  TMemoryStream;
begin
  DM.Query5.Open;
  NDRStream := TMemoryStream.Create;
  try
    DM.RvProject1.open;
    DM.RvProject1.SelectReport('DomiciliarRecibos',true);
    DM.RvProject1.SaveToStream(NDRStream);
    DM.RvWriter1.Stream:=NDRStream;
    DM.RvProject1.Execute;
    DM.RvPrinter1.Render(NDRStream);
    DM.RvProject1.close;
    DM.Query5.Close;
  except
    NDRStream.Free;
  end;
end;

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Alguien sabe como imprimir directamente sin el Preview en FreeReport? maravert Impresión 1 08-03-2007 19:27:55
Deshabilitar botones del preview hasta que el preview del report no haya termindo Jesús Pena Impresión 8 27-11-2005 21:39:18
a ver si a alguien se le ocurre como hacer este DBgrid ale21alito SQL 4 12-02-2005 17:33:15
Alguien sabe como hacer que tu aplicacion se ejecute... Supra Varios 7 05-02-2005 21:10:09
Hacer Preview cargando un archivo .QRP dabas Impresión 2 21-09-2003 20:32:44


La franja horaria es GMT +2. Ahora son las 01:35:10.


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
Copyright 1996-2007 Club Delphi