Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Ocultar filas en RAVE (https://www.clubdelphi.com/foros/showthread.php?t=45675)

egostar 11-07-2007 06:18:53

Ocultar filas en RAVE
 
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

Código:

{ 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.

Código SQL [-]
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í:
Código SQL [-]
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:

Código:

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

Código SQL [-]
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í:


Código Delphi [-]
{ 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.


La franja horaria es GMT +2. Ahora son las 07:35:37.

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