PDA

Ver la Versión Completa : Cambiar orden de páginas con Rave Reports


M. FM.
08-08-2007, 10:57:26
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:

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
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:


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:

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
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:


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):
RvPage1 := FindRaveComponent('MiReport.Page1', nil) as TRavePage;

Se convertiría en:
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