Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Rave
Rave Forum d'entraide sur Rave Reports
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/04/2005, 20h26   #1
Membre du Club
 
Inscription : décembre 2004
Messages : 187
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 187
Points : 60
Points : 60
Par défaut [Rave] Si valeur 0, la valeur est invisible

Bonjour,
C'est dans le titre, comment effectuer cette condition dans Rave sur des données numériques ?

Merci d'avance
Leesox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2005, 13h04   #2
Membre éclairé
 
Avatar de chtiot
 
Inscription : octobre 2002
Messages : 383
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 383
Points : 330
Points : 330
comme ça par exemple, mais il y a certainement mieux avec les mirrors:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
procedure TForm1.RvDataSetGetRow(Connection: TRvCustomConnection);
var rvPage : TRavePage;
     rvRegion : TRaveRegion;
     rvText : TRaveText;
     i : integer;
begin
 
  Connection.DoGetRow;  // pour renseigner les composants DATA
 
  // ON connecte la page, la région et la bande //
  RvPage := rvProject1.ProjMan.FindRaveComponent('Etat.Page', nil) AS TravePage;
  RvRegion := rvproject1.ProjMan.FindRaveComponent('Region', RvPage) AS TRaveRegion;
  RvBand := rvproject1.ProjMan.FindRaveComponent('DataBand', RvPage) AS TRaveDataBand;
 
  // Recherche du composant à mettre à jour //
  FOR i := 0 TO rvBand.ChildCount - 1 do begin
     IF (rvBand.Child[i].ClassType = TRaveText) AND ((rvBand.Child[i] AS TRaveText).Name = 'TexteVariable') then begin
        IF dm1.DataSet.FieldByName('ChampATester').AsInteger = 0 then
            (rvBand.Child[i] AS TRaveText).Text := '' else
            (rvBand.Child[i] AS TRaveText).Text := intToStr(dm1.DataSet.FieldByName('ChampATester').AsInteger );
        exit;                     
     end;
  end;
par contre, le mieux est de mettre rvRegion, rvPage, rvBand et le numéro du composant en variables globales et rechercher le numéro de composant à modifier juste aprés le rvProject.Open pour éviter de rechercher à chaque changement de ligne, ce qui donnerait :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
// VARIABLES globales:
 
var rvPage : TRavePage;
     rvRegion : TRaveRegion;
     rvText : TRaveText;
     icmp : integer;
 
// Dans la procédure, juste après le rvProject.Open :
 
  // ON connecte la page, la région et la bande //
  RvPage := rvProject1.ProjMan.FindRaveComponent('Etat.Page', nil) AS TravePage;
  RvRegion := rvproject1.ProjMan.FindRaveComponent('Region', RvPage) AS TRaveRegion;
  RvBand := rvproject1.ProjMan.FindRaveComponent('DataBand', RvPage) AS TRaveDataBand;
 
  // Recherche du composant à mettre à jour //
  FOR i := 0 TO rvBand.ChildCount - 1 do begin
     IF (rvBand.Child[i].ClassType = TRaveText) AND ((rvBand.Child[i] AS TRaveText).Name = 'TexteVariable') then begin
        icmp := i;
  end;
 
// Dans la procédure TForm1.RvDataSetGetRow(Connection: TRvCustomConnection);
 
procédureprocedure TForm1.RvDataSetGetRow(Connection: TRvCustomConnection);
begin
 
  Connection.DoGetRow;  // pour renseigner les composants DATA
 
  // ON met à jour le composant
  IF dm1.DataSet.FieldByName('ChampATester').AsInteger = 0 then
     (rvBand.Child[icmp] AS TRaveText).Text := '' else
     (rvBand.Child[icmp] AS TRaveText).Text := intToStr(dm1.DataSet.FieldByName('ChampATester').AsInteger );
 
end;
chtiot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2005, 20h45   #3
Membre du Club
 
Inscription : décembre 2004
Messages : 187
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 187
Points : 60
Points : 60
Salut chiot,
je te remercie pour ta réponse.

Je me suis servis de ton 2ème exemple et mis les variables en globale.

Le résultat ne marche pas encore, mais je n'ai pas trop le temps d'appronfondir pour le moment. Je rééssairais dans 1 où 2 jours.

A la sortie de la boucle for, la variable imc a la bonne valeur. J'ai remplacé TRaveText par TRaveDataText.
Par contre çà doit clocher dans le GetRow du RvCustomConnection.

Je devrais pouvoir me débrouiller avec cet exemple et je te tiens au courant.
Leesox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2005, 21h09   #4
Membre éclairé
 
Avatar de chtiot
 
Inscription : octobre 2002
Messages : 383
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 383
Points : 330
Points : 330
moi a ta place j'utiliserais plutot un TRaveText vu que c'est toi qui va affecter soit la valeur de ton champ, soit rien si la valeur est nulle

en utilisant un TRaveDataText je suis pas sur que ça fonctionne bien
chtiot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2005, 07h19   #5
Membre du Club
 
Inscription : décembre 2004
Messages : 187
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 187
Points : 60
Points : 60
Citation:
Envoyé par chtiot
moi a ta place j'utiliserais plutot un TRaveText vu que c'est toi qui va affecter soit la valeur de ton champ, soit rien si la valeur est nulle

en utilisant un TRaveDataText je suis pas sur que ça fonctionne bien
Bonjour,
C'est certainement la raison pour laquelle, çà ne fonctionne pas en fait. Cà parait logique.
Je teste et je te tiens au courant
Merci

Balises [Quote] ajoutées par l.nico Merci d'y penser à l'avenir.
Leesox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2005, 20h13   #6
Membre du Club
 
Inscription : décembre 2004
Messages : 187
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 187
Points : 60
Points : 60
Là, vraiment, je ne comprends pas pourquoi mes TRaveText restent blancs.
Avec des valeurs 0, c'est normal mais avec des valeurs positives non.
Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
procedure TfraEditions.btnAnneeCHClick(Sender: TObject);
var i: integer;
begin
  inherited;
  WITH DM.qryCH do   //ON repose l'ensemble des query sans active sinon rave exécute une erreur
    begin
    SQL.Clear;
    SQL.Add('SELECT * FROM CH ' +
            ' WHERE (CH_ANNEE="' + speAnneeCH.Text + '") ' +
            ' ORDER BY CH_NOM, CH_PRENOM');
    end;
   with DM.qryHistSem do
    begin
    SQL.Clear;
    SQL.Add('SELECT * FROM HistoriqueSem ' +
            ' WHERE (HI_ANNEE="' + speAnneeCH.Text + '") AND (HI_SEM="' + IntToStr(StrToInt(speSemaineClot.Text) - 1) + '")');
    end;
 
 
  DM.rveProjet.Open;
  DM.rveProjet.SetParam('AnneeDuCH',  'Année ' + speAnneeCH.Text);
  // On connecte la page, la région et la bande //
  RvPage := DM.rveProjet.ProjMan.FindRaveComponent('rptEtatCH.Page1', nil) as TravePage;
  RvRegion := DM.rveProjet.ProjMan.FindRaveComponent('Region1', RvPage) as TRaveRegion;
  RvBand := DM.rveProjet.ProjMan.FindRaveComponent('DataBand1', RvPage) as TRaveDataBand;
  // Recherche du composant à mettre à jour //
 
  for i := 0 to rvBand.ChildCount - 1 do
     begin
      if (rvBand.Child[i].ClassType = TRaveText) and ((rvBand.Child[i] as TRaveText).Name = 'Text28') then
      begin
      icmp := i;
      break;
      end;
     end;
 
  DM.rveProjet.ExecuteReport('rptEtatCH');
  DM.rveProjet.Close;
  SortieDeRave;
end;
A la sortie de cette procédure, la variable imc à bien la valeur du TRaveText.

Code :
1
2
3
4
5
6
7
8
9
10
procedure TfraEditions.dsrCHGetRow(Connection: TRvCustomConnection);
begin
  inherited;
  Connection.DoGetRow;  // pour renseigner les composants DATA
 
  // ON met à jour le composant
  IF DM.qryCH.FieldByName('1').AsFloat = 0 then
     (rvBand.Child[icmp] AS TRaveText).Text:= '0' else
     (rvBand.Child[icmp] AS TRaveText).Text:= FloatToStr(DM.qryCH.FieldByName('1').AsFloat );
end;
Dans celle-ci, le if fonctionne bien, car il me trouve les deux sortes de valeurs dans le query. Les deux conditions fonctionnent bien.
Mais dans l'état, çà reste blanc si une valeur est <> 0
Leesox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2005, 23h01   #7
Membre éclairé
 
Avatar de chtiot
 
Inscription : octobre 2002
Messages : 383
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 383
Points : 330
Points : 330
comme tu dis c'est bizarre

j'ai fai pas mal de trucs comme ça ces derniers jours et ça ne m'a pas posé de problème

c'est peut être un problème de version de rave (moi c'est une 5.1.3)
chtiot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2005, 07h25   #8
Membre du Club
 
Inscription : décembre 2004
Messages : 187
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 187
Points : 60
Points : 60
Citation:
Envoyé par chtiot
comme tu dis c'est bizarre

j'ai fai pas mal de trucs comme ça ces derniers jours et ça ne m'a pas posé de problème

c'est peut être un problème de version de rave (moi c'est une 5.1.3)
6.01 pour moi
Leesox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/04/2005, 20h23   #9
Membre du Club
 
Inscription : décembre 2004
Messages : 187
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 187
Points : 60
Points : 60
Salut Chtiot,

C'était juste pour te remercier de m'avoir aider et d'avoir fait une faute à ton pseudo. Z'avais pas fais attention

Je vais vraiment essayer d'avoir une mise à jour et de faire un tour sur les news de nevrona.
Leesox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2006, 11h46   #10
Membre à l'essai
 
Inscription : janvier 2006
Messages : 57
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 57
Points : 22
Points : 22
Désolé de répondre aussi tard, mais je viens de découvrir ce forum.

perso, pour ce cas, j'utilise l'evenement OnBeforePrint de l'interface de Rave. je ne suis pas sur que l'on puisse les utiliser en programmation directe.

par les événements, ça marche en testant la valeur qui va s'imprimé, et je passe la propriété 'visible' du champ à false.

voilà
Peck777 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2006, 16h44   #11
Membre éclairé
 
Avatar de chtiot
 
Inscription : octobre 2002
Messages : 383
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 383
Points : 330
Points : 330
Citation:
Envoyé par Peck777
Désolé de répondre aussi tard, mais je viens de découvrir ce forum.

perso, pour ce cas, j'utilise l'evenement OnBeforePrint de l'interface de Rave. je ne suis pas sur que l'on puisse les utiliser en programmation directe.

par les événements, ça marche en testant la valeur qui va s'imprimé, et je passe la propriété 'visible' du champ à false.

voilà
c'est effectivement une autre solution...

on peut tout aussi bien utiliser un TRaveDataText et, dans l'événement rvDataSetGetRow positionner la propriété visible à true ou false suivant la valeur du champ.
chtiot est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h12.


 
 
 
 
Partenaires

Hébergement Web