Powerbuilder pour les completement Geeks !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 26-08-2010 09:57:14

General Protection Fault  
Membre Geek
Lieu: Sophia Antipolis
Date d'inscription: 18-08-2008
Messages: 47
Pépites: 204
Banque: 0

[RESOLU] Couleurs alternées dans les groups d'une DW

Bonjour à tous,

Pour rendre plus lisible la lecture de tableaux (dw), j'alterne classiquement la couleur de la bande Detail avec une expression conditionnelle du genre :

Code: pb

if(mod(getrow(),2) = 0, rgb( valR1, valG1, valB1),  rgb( valR2, valG2, valB2))

Mais voilà que je bute sur une DW possédant un Group dans laquelle la bande Detail est vide et Height=0, et dans laquelle les données visibles sont la bande Trailer Group Toto

Du coup, si j'utilise la même expression conditionnelle pour la couleur de fond de cette bande, le GetRow() renvoyant le n° de ligne dans le tableau et non pas le n° de ligne du Trailer, j'obtiens un résultat incohérent.

Quelqu'un aurait-il déjà rencontré ce problème et trouvé une solution ?
Merci :-)

Dernière modification par General Protection Fault (26-08-2010 14:51:18)

Hors ligne

 

#2 26-08-2010 12:29:17

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Couleurs alternées dans les groups d'une DW

Bonjour, effectivement le getrow() est relatif aux lignes de detail.
Mais quel est l'intérêt de faire un groupe s'il n'y a rien dans le detail ?


NB :


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 26-08-2010 13:05:55

General Protection Fault  
Membre Geek
Lieu: Sophia Antipolis
Date d'inscription: 18-08-2008
Messages: 47
Pépites: 204
Banque: 0

Re: [RESOLU] Couleurs alternées dans les groups d'une DW

Et bien c'est une DW contenant des statistiques. Les lignes en elles-même ne m'intéressent pas et dans la bande Trailer Group, j'affiche différents agrégats.

Dernière modification par General Protection Fault (26-08-2010 13:06:10)

Hors ligne

 

#4 26-08-2010 13:36:53

Yanis  
Modérateur
Lieu: paris
Date d'inscription: 16-06-2010
Messages: 349
Pépites: 665
Banque: 150

Re: [RESOLU] Couleurs alternées dans les groups d'une DW

Bonjour,

     Je rejoins erasorz, et pour compléter ne peut tu faire tes aggrégats dans ta requête. ( L'avantage est de ne faire transiter sur le réseau que les lignes d'aggrégats , utilisation de la puissance de ton serveur de données  etc.. ).

    Pour moi je ne connais pas de moyen ( en utilisant les propriétés dynamiques ) pour jouer sur les band Trailer et header : ex connaitre la premère ligne de trailer etc.. )

   j'ai été confronté à ce problème mais j'avais des données qui était affiché ( y compris le détail mais on pouvait synthétiser la visu en ne voyant que les différents cumuls. Alors j'ai procédé de la manière suivante :
          - Création d'une datawindow externe ne comprenant que des champs devant recevoir les cumuls : ( les champs étant dans la zone de détail )
          - Copie des données de cumul vers cette datawindow externe
          - Rendre visible cette datawindow

Je l'avoue celà fait vraiment bidouille.

Hors ligne

 

#5 26-08-2010 13:38:57

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Couleurs alternées dans les groups d'une DW

OK.
Et avec un compute du genre : cumulativesum(if (  col1 =  col1[-1], 0, 1 ) for all)

Sinon par script ça devrait être possible avec FindGroupChange()


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#6 26-08-2010 13:57:02

Yanis  
Modérateur
Lieu: paris
Date d'inscription: 16-06-2010
Messages: 349
Pépites: 665
Banque: 150

Re: [RESOLU] Couleurs alternées dans les groups d'une DW

Désolé erasorz autant pour moi ( je l'ai mis en rouge pour indiquer que ceci est une erreur ( j'en garde la paternité )
Non pour ce qui concerne la valeur contenue dans les champs tu ne peut controler que les valeurs de la ligne courante.
ne tenez pas compte de cette remarque voir réponse suivante




Complémént:
L'utilisation de fonction dans les computeField à pour effet de réeffectuer le calcul complet.
Je m'explique  :
    Si tu créé un compute field que tu poses dans la zone de trailer  et que en expression tu mettes 1 ( le chiffre)   Nom du champs = COMP1
    Si tu créé un  autre computeField et que en expression tu mettes CumulativeSum ( COMP1 for group 1  ) pb considère que ce champ est sur chaque ligne de détail et tu obtient la sum de toutes les lignes faisant partie de ton group. donc on ne peut pas s'en sortir avec les compute.

Même la fonction FindGroupChange je ne vois pas comment l'utiliser.
Je préférerais ajouter une colonne à mon resultset et ensuite c'est moi qui met une valeur qui s'incrémente de 1 en 1 à ce champs chaque fois que je change de groupe.
après je n'ai plus qu'à tester dans mes trailer la valeur de ce champs ( pair ou impair )

Hors ligne

 

#7 26-08-2010 14:50:59

General Protection Fault  
Membre Geek
Lieu: Sophia Antipolis
Date d'inscription: 18-08-2008
Messages: 47
Pépites: 204
Banque: 0

Re: [RESOLU] Couleurs alternées dans les groups d'une DW

En fait, je ramène toutes les lignes sur le client parce qu'elles sont généralement ... déjà sur le client ;-) dans une base ASA locale, memê si ce n'est pas toujours le cas.  Mais ce code (des stats) étant exécuté avec une fréquence faible, j'ai préféré avoir un code plus simple et laisser faire les agrégations à la DW.

Erasorz m'a aiguillé sur la bonne voie :-) et je suis arrivé au résultat attendu. Yanis, il est en effet possible dans une expression de la ligne N de faire référence à la valeur d'un colonne de la ligne N-1 (ou N-z). Dans mon cas, n'ayant pas d'identifiant unique, je dois me baser sur 2 colonnes pour être m'assurer du changement de groupe

Code: pb

cumulativesum(if ( (code_grg_identifiant =  code_grg_identifiant[-1]) AND (periode =   periode[-1]), 0, 1 ) for all)



Cette expression dans un computedField posé dans mon Trailer me permet de compter mes occurrences de Trailers et de jouer ensuite avec un modulo 2 pour alterner deux couleurs de lignes.

Merci à tous :-)

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22