Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Cambiar orden de páginas con Rave Reports (https://www.clubdelphi.com/foros/showthread.php?t=46772)

M. FM. 08-08-2007 10:57:26

Cambiar orden de páginas con Rave Reports
 
Buenos días:

Después de buscar durante varias semanas información sobre este tema, he llegado a la conclusión de que lo que quiero no puede hacerse con Rave Reports, pero antes de tirar la toalla decidí probar suerte con el foro para ver si alguien ha estado en un caso similar.

Lo que quiero hacer es cambiar el orden de las páginas de un informe en tiempo de ejecución, dependiendo de un parámetro determinado. Por ejemplo:

Página 1 - un informe simple. Siempre se muestra correctamente.
Página 2 - un informe maestro/detalle. Sólo se mostrará si el valor de un parámetro pasado desde Delphi a Rave es 1.

El problema es que la segunda página sale en blanco cuando le pongo el condicional. Estaba probando con el evento OnBeforeReport del informe completo (aunque también he probado con OnBeforePrint, OnBeforeReport y OnAfterPrint de la página 1). El código es:

Código:

if compare(RaveProject.GetParam('MiParam'), '1') = 0 then
  Page1.GotoPage := Page2;
end if;

Es decir, más sencillo imposible. Sin embargo, la segunda página sale en blanco. Si en lugar de poner este código le pongo directamente el valor en el GotoPage de la página 1, todo sale bien.

¿Es un bug de Rave Reports? Yo he llegado a la conclusión de que sí, pero igual hay alguna forma de solucionarlo que se me está escapando. O igual estoy haciendo algo mal, yo ya ni sé.

He probado también a dejar fijo el orden de las páginas y cambiar el estado de Visible de la página 2, pero eso no funciona cuando añado una tercera página (en mi informe son 4 páginas y sólo la primera es fija). Y la última opción que se me ocurre es tratar de editar el PageList en el evento OnBeforeReport del informe, pero tampoco sé cómo hacerlo.

He visto algún mensaje perdido en foros de internet con algo similar a esto, pero en ninguno había respuesta. Agradeceré cualquier indicio de luz que alguien pueda arrojar sobre este túnel...

Saludos y gracias,
M.

M. FM. 08-08-2007 13:22:07

Seguimos...
 
Bueno, he decidido olvidarme de los eventos del report y ahora estoy intentando definir el orden de las páginas desde Delphi. El nuevo problema que tengo es un "Access violation".

He probado con dos formas distintas.
La primera:

Código:

if RvPageList = nil then
  RvPageList := TRaveComponentList.Create;

RvPageList.Add(RvProject.FindComponent('MiReport.Page1') as TRavePage);
if m_Segunda = '1' then
RvPageList.Add(RvProject.FindComponent('MiReport.Page2') as TRavePage);

RvProject.ProjMan.ActiveReport.PageList := RvPageList;
RvProject.Execute;
RvProject.Close;

Este código me da un error al ejecutar el report.

La segunda:
Código:

RvProject.SelectReport('MiReport', true);
RvPage1 := RvProject.FindComponent('Page1') as TRavePage;
RvPage2 := RvProject.FindComponent('Page2') as TRavePage;
 if m_Segunda = '1' then
    RvPage1.GotoPage := RvPage2;
RvProject.Execute;
RvProject.Close;

De este modo, el error lo tengo en el GotoPage: Exception class EAccessViolation with message 'Access violation at address 0065166F in module 'Ventas.exe'. Write of address 000000A0'.

He probado tanto definiendo los GotoPage en Rave también como sin definirlos, y el resultado es el mismo.

¿Alguna idea?

Gracias,
M.

M. FM. 08-08-2007 13:39:04

Resuelto
 
Bueno, por fin lo he conseguido. Pongo la solución por si alguien se ha visto en el mismo caso, es el segundo código que había probado pero accediendo al Project Manager en lugar de al Report directamente:

Código:

with RvProject.ProjMan do
begin
    RvPage1 := FindRaveComponent('MiReport.Page1', nil) as TRavePage;
    RvPage2 := FindRaveComponent('MiReport.Page2', nil) as TRavePage;

    if m_Segunda = '1' then
      RvPage1.GotoPage := RvPage2;
 end;

RvProject.ExecuteReport('MiReport');
RvProject.Close;

No sé ni la de días que llevo con esto. Espero que si a alguien le pasa igual esto pueda servirle de ayuda.

Saludos,
M.

mjjj 01-02-2008 20:27:28

Hola M. FM... tengo exactamente el mismo problema que tuviste tu. Me tira el mismo error en el gotopage... pero no entiendo como fue que resolviste el problema...

las variables page1 y page2 son Travepage???

No se como solucionarlo... a no ser que tengo un problema en el rave report.. en el archivo... pero lo tengo de la siguiente manera... un archivo llamado 'informe.rav', en el cual existe un reporte llamado orden y dentro de este reporte existen 2 paginas.....

esto esta bien??


alguna idea de como solucionar esto??


gracias por tu tiempo

saludos

saturno7 07-02-2008 18:59:01

Hola, mjjj:

Intentaré explicarte lo poco que sé a ver si entre los dos lo sacamos.

Para empezar, tienes que sustituir en el código delphi MiReport por el nombre de tu informe en Rave Reports (en tu caso sería orden):
Código Delphi [-]
RvPage1 := FindRaveComponent('MiReport.Page1', nil) as TRavePage;

Se convertiría en:
Código Delphi [-]
RvPage1 := FindRaveComponent('orden.Page1', nil) as TRavePage;


Además, Page1 y Page2 son los nombres que le has puesto a las páginas de tu informe también en Rave Reports. Es decir, que tanto el informe como sus páginas deben existir para que el código en delphi los encuentre.

Mira a ver si con eso solucionas algo, y si no, vuelve a escribir y lo seguimos mirando.

Saludos


La franja horaria es GMT +2. Ahora son las 19:24:25.

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