PDA

Ver la Versión Completa : Ocultar filas en RAVE


egostar
11-07-2007, 06:18:53
Hola amigos

Espero ser claro con una idea loca que tengo en mente.:D

Como ya lo mencioné en otro hilo, estoy aprendiendo RAVE, pero se me ocurrio que no muestre los registros que tienen costo cero, pero que si los cuente en el total.

Esto lo podría hacer filtrando en un Query sin ningún problema, pero, aqui viene la locura de mi mente,

Por ejemplo:

Tengo estos registros

Registro 1 costo 10.00
Registro 2 costo 0.00
Registro 3 costo 5.00
Registro 4 costo 0.00
Registro 5 costo 20.00

y quiero que los muestre así:

Registro 1 costo 10.00
Registro 3 costo 5.00
Registro 5 costo 20.00

Pero que si los cuente en el total de registros

Total de Registros 5
Total Costo 35.00

Quiero que aunque no los muestre si sean parte del resultado final.

Estuve viendo los eventos de RAVE, por ejemplo en el BeforePrint donde puse lo siguiente


{ Event for HeaderBand.OnBeforePrint }
function Header_OnBeforePrint(Self: TRaveBand);
begin
if DataView1COSTO.AsFloat = 0.0 then
Detail.visible := False;
else
Detail.visible := True;
end if;
end OnBeforePrint;


Pero no hizo nada y ya no quiso mostrar el reporte. Le quité el evento y ya funcionó de nuevo, pero con todos los datos, espero haber sido claro dentro del desorden mental que me cargo.

Gracias anticipadas

Salud OS

ArdiIIa
12-07-2007, 01:34:22
Bueno como he visto que en otro hilo haces mención de este, te diré:
No conoczo RAVE, pero si utilizas Firebird, puedes armarte un stored procedure que te devuelva el resultado tal como quieres, y luego enchufarselo al report.

egostar
12-07-2007, 01:40:43
Muchas gracias ArdiIIa, efectivamente, uso Firebird, haré el procedimiento haber que gestos hace.

Gracias por responder,

Salud OS.

ArdiIIa
12-07-2007, 11:25:40
De todas formas egostar, examinando el código que pones en el report, me da la impresión que lo que hace visible u oculto es la banda donde está la etiqueta a imprimir (Detail), cuando en realidad, únicamente deberías ocultar solamente la etiqueta (DataView1COSTO), y seguramente obtienes esos resultados inesperados.
Te repito que no conozco el RAVE, pero no debería resultar difícil o imposible ocultar un determinado valor, pero como digo, no ocultando la banda, sino el propio valor.

Corrígeme si me equivoco.

Saludos.

egostar
12-07-2007, 16:48:21
Así es ArdiIIa, probe con la banda Detail y tratando de ocultar todos los campos cuando la cantidad es cero pero en todos los casos el resultado es el mismo, el reporte se bloquea y no lo muestra.

Sin embargo, en base a tu comentario de hacerlo con un SP, llegue a esto y en la consulta obtengo la información que necesito.


begin
FOR
select Fecha, Agente, Ventas from VENTAS
where Ventas > 0
INTO :S_Fecha, :S_Agente, :S_Ventas DO

FOR
select Fecha, COUNT(Fecha), SUM(Ventas) from VENTAS
group by Fecha
INTO S_FechaPaso, :S_Agentes, :S_TotalVentas DO

begin
suspend;
end
end


Ahora solo lo voy a implementar en el reporte, pero pienso que ya consegui lo que deseaba.

Gracias por el tip.

Salud OS

egostar
12-07-2007, 19:21:29
Pues nada, no me sirve el SP en Rave, solo sirve si existe al menos un dato con un valor mayor a 0.:mad::(:rolleyes::cool::)

Bueno, al mal tiempo darle buena cara, yo sigo experimentando, ya les diré que fué lo que al final me sirvió o si de plano no me sirvió nada:D.

Salud OS.

ArdiIIa
12-07-2007, 19:48:23
Yo haría algo así:

Begin
FOR select Fecha, Agente, Ventas from VENTAS
where Ventas > 0
INTO :S_Fecha, :S_Agentes, :S_Ventas DO
suspend;


FOR select Fecha, COUNT(Fecha), SUM(Ventas) from VENTAS
group by Fecha
INTO S_FechaPaso, :S_Agentes, :S_TotalVentas DO
suspend;

end

egostar
12-07-2007, 20:42:45
Muy bien ArdiIIa, lo hice y efectivamente si me muestra los totales aunque no haya datos mayores a cero.

Ahora lo voy a implementar en Rave.

Salud OS y gracias

egostar
13-07-2007, 03:02:11
Bueno, yo sigo con mi inquietud, creo que ya se está convirtiendo en obsesión.:rolleyes::D

Pues efectivamente, lo que propones amigo ArdiIIa, está perfecto, solo que hay un detalle:

En el reporte si no hay datos mayores a cero me muestra todo bien, pero si existe al menos un dato mayor a cero, me duplica el registro o si hay mas de uno duplica el último registro.

Pues nada, sigo investigando.

Salud OS.

egostar
13-07-2007, 07:33:37
Bueno, al final quedo como pense al inicio, usando el evento OnBeforePrint, solo me faltaba un else anidado al final, pues nada, les pongo el código del evento y del SP para que pueda servir a alguien con la misma inquietud.

Código en el evento OnBeforePrint de RAVE:


{ Event for Detail.OnBeforePrint }
function Detail_OnBeforePrint(Self: TRaveDataBand);
begin
if DataView1S_Ventas.AsInteger > 0 then
Detail.visible := True;
elseif DataView1S_Ventas.AsInteger = 0 then
Detail.visible := False;
else
Detail.visible := True;
end if;
end OnBeforePrint;


Y el Procedimiento Almacenado quedo así:


begin
FOR
select Fecha, Agente, Ventas from VENTAS
INTO :S_Fecha, :S_Agente, :S_Ventas DO
suspend;
end


Muchas gracias amigo ArdiIIa.

Salud OS

ArdiIIa
13-07-2007, 09:53:36
Vale egostar :D :D
Seguramente obtenías valores duplicados porque en el procedure compartes variables de retorno a la hora de hacer el segundo suspend, bastaría con haberlas puesto a null antes de hacer el segundo select.
En cuanto al procedimiento del report, no veo la razón por la cual no funcionaría así:



{ Event for Detail.OnBeforePrint }
function Detail_OnBeforePrint(Self: TRaveDataBand);
begin
if DataView1S_Ventas.AsInteger > 0 then
Detail.visible := True;
else
Detail.visible := False;
end if;
end OnBeforePrint;

egostar
13-07-2007, 17:00:20
Hola ArdiIIa, efectivamente, eso pienso, pero me quite de problemas y mejor comence de cero, seguro habia algo que no habia hecho bien, cosas de principiantes, invertí tres días en esto pero al final obtuve lo que queria.

Salud OS y muchas gracias.