Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

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 02-08-2012 08:00:25

FMI  
Membre
Date d'inscription: 02-08-2012
Messages: 12
Pépites: 57
Banque: 0

Filter sur DW non pris en compte

Bonjour à tous,
je reste bloqué sur un problème depuis un sacré moment.

Je travaille sur une DataWindow composite qui contient plusieurs DataWindows.
Au final, la DW principale permet de générer un rapport (pour impression) qui affiche plusieurs tableaux d'éléments (DW) remontés depuis la base de donnée.

Sur un de ces tableaux d'éléments, je souhaite appliquer un filtre. Une filtre qui permet de ne pas afficher certaines lignes en fonction d'une condition. la condition est la suivante : filter="mtd_prix_revient_group2 <>0  OR mtd_prix_vente_group2<>0"
Plus simplement, je souhaite n'afficher que les lignes dont les montant ne sont pas tous à 0.

Le filtre s'applique sur une cellule composite qui fait une agrégation (sum(  mt_prix_revient  for group 2 )).
J'ai essayé plusieurs choses.

Ajouter un filter en passant par le menu Rows -> Filter et ajouter :
filter="mtd_prix_revient_group2 <>0  OR mtd_prix_vente_group2<>0"

Editer directement la datawindow et ajouter le filtre "à la main" dans le code.

Ceci ne marche pas.

Je ne sais pas pourquoi mais la page contenant ce code n'est pas générée. Comme si il y avait un problème au moment de la génération.

Pourtant, j'ai un DW similaire mais que j'utilise dans le code directement et en appliquant le filtre:
lds_adv.SetFilter("mtd_prix_revient_group2 <>0  OR mtd_prix_vente_group2<>0")
ceci fonctionne bien.

Mais pour le rapport en question je souhaiterais appliquer le filtre directement sur mon document car je n'utilise jamais cet objet dans le code.

Lorsque j'essaie tout de même d'appliquer un filtre dans le code, et en "debug"  d'afficher la syntaxe de ma DW, j'ai bien un ajout de la ligne que j'ai déjà donné au dessus:
filter="mtd_prix_revient_group2 <>0  OR mtd_prix_vente_group2<>0"

Alors pourquoi ce filtre ne marche pas si je l'applique directement dans le code du rapport?
Une idée?

Dernière modification par FMI (02-08-2012 15:14:37)

Hors ligne

 

#2 02-08-2012 15:17:03

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

Re: Filter sur DW non pris en compte

Bonjour,

Et en mettant cette expression dans le filtre ?

Code: pb

sum(  mt_prix_revient  for group 2 ) <>0  OR sum(  mt_prix_vente for group 2 )<>0

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

Hors ligne

 

#3 03-08-2012 06:31:28

FMI  
Membre
Date d'inscription: 02-08-2012
Messages: 12
Pépites: 57
Banque: 0

Re: Filter sur DW non pris en compte

Merci pour ta réponse erasorz.
Malheureusement, j'avais essayé cette approche.
Le problème est que quand j'insère une telle ligne dans la partie rows - filter:
sum(  mt_prix_revient  for group 2 )
Et que je clique sur Verify. j'ai un message d'erreur "Group level specified is no valid".
On dirait que goupe 2 est inconnu à cet endroit.
Pourtant c'est bien cette même ligne qui est interprétée dans la "Compute Expression".
Une idée?

Hors ligne

 

#4 03-08-2012 08:44:05

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: Filter sur DW non pris en compte

Est-ce que tu ne devrais pas travailler sur un des neestedReports (getchild -> datawindowchild)?


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#5 03-08-2012 09:31:12

FMI  
Membre
Date d'inscription: 02-08-2012
Messages: 12
Pépites: 57
Banque: 0

Re: Filter sur DW non pris en compte

Merci pour ta réponse xlat.
Toutefois, je ne comprends pas trop ce que tu veux que j’essaie.
Je voulais appliquer mon filtre sur le rapport car  je n'ai jamais la DataWindow dans le code.
Est ce que la solution que tu proposes n'est pas justement d'appliquer un filtre dans le code en récupérant les datawindowchilds sur la DW principale?
Sinon, pourrais tu expliquer un peu plus la syntaxe que je dois utiliser stp?

Hors ligne

 

#6 03-08-2012 09:42:05

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: Filter sur DW non pris en compte

qu'est-ce que tu entends par "car  je n'ai jamais la DataWindow dans le code." ?
que c'est une datawindow dynamique qui ne posséde pas de dataobject ? qu'elle t'es fournis par un blob(fullstate), autre ?


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#7 03-08-2012 11:59:34

FMI  
Membre
Date d'inscription: 02-08-2012
Messages: 12
Pépites: 57
Banque: 0

Re: Filter sur DW non pris en compte

Je voulais dire:
J'ai un DW similaire mais que j'utilise dans le code (dans le script, dans une fonction) directement et en appliquant le filtre:
lds_adv.SetFilter("mtd_prix_revient_group2 <>0  OR mtd_prix_vente_group2<>0")
ceci fonctionne bien.

Mais dans le cas présent. Je ne passe pas par une fonction.
Ma DataWindow secondaire est intégrée (parmis d'autres) dans une DataWindow principale qui permet d'imprimer un document contenant plusieurs pages.
Je veux donc appliquer  un filtre sur la DataWindow secondaire. Mais en passant par le menu rows-filter, ceci ne fonctionne pas apparemment, comme je l'ai écrit au dessus.
Que proposes-tu de faire exactement, je n'ai pas compris.

Hors ligne

 

#8 03-08-2012 12:16:15

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: Filter sur DW non pris en compte

tu as quelque chose comme :

Code:

dw_composite
  + -- dw_1
  + -- dw_2 (celui à filtrer)

je propose quelque chose comme :

Code: pb

datawindowchild ldwc_rpt
if dw_composite.getchild("dw_2", ldwc_rpt ) = 1 then
    ldwc_rpt.setfilter("mtd_prix_revient_group2 <>0  OR mtd_prix_vente_group2<>0")
    ldwc_rpt.filter()
end if


Je ne vois pas trop comment faire depuis le datawindow painter en edition du "dw_composite.dataobject" (peut-être via les criterias ?)

Dernière modification par xlat (03-08-2012 12:16:36)


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#9 06-08-2012 08:23:03

FMI  
Membre
Date d'inscription: 02-08-2012
Messages: 12
Pépites: 57
Banque: 0

Re: Filter sur DW non pris en compte

J'ai donc essayer de mettre en place cette solution.
j'ai rajouté le code suivant:

if dw_edition_adv.getchild("dw_2", ldwc_rpt ) = 1 then
     ldwc_rpt.setfilter("mtd_prix_revient_group2 <>0  OR mtd_prix_vente_group2<>0")
     ldwc_rpt.filter()
end if

Je rentre bien dans cette condition en debug.

Mais une fois mon document généré, il manque la page contenant ces informations.
On dirait que rien n'a été généré encore une fois.
C'est le même résultat qu'en rajoutant le filtre en mode édition.

Hors ligne

 

#10 06-08-2012 09:33:26

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: Filter sur DW non pris en compte

vérifie alors le contenu de ldwc_rpt en debug pour voir si c'est pas "normal" comme résultat en fonction des données...

Code: pb

ldwc_rpt.saveas("c:\neested2.xls", excel8!, true ) //et regardes le contenu dans excel

https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#11 06-08-2012 09:55:55

FMI  
Membre
Date d'inscription: 02-08-2012
Messages: 12
Pépites: 57
Banque: 0

Re: Filter sur DW non pris en compte

Le contenu dans excel est bon.
J'ai bien  toutes mes lignes sauf celles avec les montants à 0.

Du coup, je ne comprends pas pourquoi cette page n'apparait pas dans mon rapport global.

Hors ligne

 

#12 17-09-2012 07:41:04

Sebastouche  
Membre Geek
Lieu: rennes
Date d'inscription: 30-01-2008
Messages: 36
Pépites: 164
Banque: 0

Re: Filter sur DW non pris en compte

Bonjour,
J'arrive peut-être après la bataille (ce point est peut-être résolu), mais quelles sont les valeurs retournées par les fonctions ?

Integer li_returnFilter, li_returnSetFilter
li_returnSetFilter = ldwc_rpt.setfilter("mtd_prix_revient_group2 <>0  OR mtd_prix_vente_group2<>0")
li_returnFilter = ldwc_rpt.filter()


Sébastien

Hors ligne

 

#13 23-01-2013 08:18:29

Sylvie de hannut  
Membre completement Geek
Lieu: Hannut (Belgique)
Date d'inscription: 10-06-2011
Messages: 123
Pépites: 499
Banque: 0

Re: Filter sur DW non pris en compte

Bonjour j'ai le même problème que FMI.

Premièrement : toute mes DW sont external !!!!

J'ai un rapport ainsi :

Code:

   dw_composite
          ++ DW1
          ++ DW2
               ..
               ..
           ++ DW22

La dw composite peut contenir jusqu'à 25 lignes.
On donne la possibilité à l'utilisateur d'imprimé tout le détail d'une de ces ligne, pour ce faire je me suis dit qu'un filtre fonctionnerait bien.
J'ai donc fait un tableau de datawindowchild contenant chacun des 22 dw secondaires.

à l'exécution, je n'ai que les infos de ma dw composite affichées, aucunes données des dw secondaires ????

J'ai vérifié le return code du setfilter est à -1, je ne comprend pas pourquoi.
J'ai regardé aussi le nb de ligne des mes dw secondaires, là ou je devrais avoir 5 lignes, je n'en ai qu'une ??????????

Code: PB

datawindowchild idwc_dw[]          // variables d'instance

// Construction d'un tableau contenant les dwc à filtrer, si besoin
old_processing = idw_dw.Object.Datawindow.processing
idw_dw.Object.Datawindow.processing = "5"                       // car je pars de dw freeform ou de dw tabular

li_ret = idw_dw.GetChild('dw_dr_gen', idwc_dw[1])
li_ret = idw_dw.GetChild('dw_dr2', idwc_dw[2])
li_ret = idw_dw.GetChild('dw_dr3', idwc_dw[3])
li_ret = idw_dw.GetChild('dw_hospi_gen', idwc_dw[4])
li_ret = idw_dw.GetChild('dw_hospi2', idwc_dw[5])
li_ret = idw_dw.GetChild('dw_hospi3', idwc_dw[6])
li_ret = idw_dw.GetChild('dw_amb_gen', idwc_dw[7])
li_ret = idw_dw.GetChild('dw_amb2', idwc_dw[8])
li_ret = idw_dw.GetChild('dw_amb3', idwc_dw[9])

idw_dw.Object.Datawindow.processing = old_processing

// Je remplis mes dw via dotnotation exple :
   idw_dw.object.dw_dr_gen[li_row].object.datedeb[1]  = string(date(istr_data3[li_cpt].dr_startdate),'dd/mm/yyyy')
  
   li_cpt2 = 0
   do while li_cpt2 <= upperbound(istr_data3[li_cpt].dr_nihiinbr)
            li_cpt2 ++
            idw_dw.object.dw_dr3[li_row].object.no_inami[li_cpt2] = istr_data3[li_cpt].dr_nihiiNbr[li_cpt2]
            idw_dw.object.dw_dr3[li_row].object.no_carte[li_cpt2] = istr_data3[li_cpt].eCarmedNumber  
   loop


Ensuite dans un autre évênement j'effectue le filtre des dw

Code: = Pb

  // Filtre la ligne à afficher pour toutes le dw
  idw_dw.setfilter ("no_carte = '" + w_carmed_consult.is_nocarte_print + "'")
  idw_dw.filter()                             // ce filtre là fonctionne très bien
  idw_dw.groupcalc()
  for li_i = 1 to 9
    li_return = idwc_dw[li_i].setfilter ("no_carte = '" + w_carmed_consult.is_nocarte_print + "'")
    li_return = idwc_dw[li_i].filter()
    li_return = idwc_dw[li_i].groupcalc()
  next
      
  idw_dw.Modify("DataWindow.Detail.Height.AutoSize=Yes")
  li_return = OpenWithParm(w_printpreview,idw_dw)


J'ai essayé comme xlat le proposait de faire

Code: = pb

li_return = idwc_dw4.saveas("c:\neested4.xls", excel8!, true )
  li_return = idwc_dw5.saveas("c:\neested5.xls", excel8!, true )    // ces dw contiennent des données ==> [b]li_return = -1 ??????[/b]
  li_return = idwc_dw6.saveas("c:\neested6.xls", excel8!, true )
  li_return = idwc_dw7.saveas("c:\neested7.xls", excel8!, true )
  li_return = idwc_dw8.saveas("c:\neested8.xls", excel8!, true )
  li_return = idwc_dw9.saveas("c:\neested9.xls", excel8!, true )




Qu'en pensez-vous ????????????

Dernière modification par Sylvie de hannut (23-01-2013 08:55:32)

Hors ligne

 

#14 23-01-2013 10:41:18

FLADEHIS  
Membre
Date d'inscription: 31-03-2010
Messages: 4
Pépites: 19
Banque: 0

Re: Filter sur DW non pris en compte

Pour le saveAs qui renvoie -1, peut-être que tu n'as pas les droits d'écritures à la racine du C:

Hors ligne

 

#15 23-01-2013 10:54:16

FLADEHIS  
Membre
Date d'inscription: 31-03-2010
Messages: 4
Pépites: 19
Banque: 0

Re: Filter sur DW non pris en compte

As-tu moyen de "localiser" les lignes que tu veux filtrer dans tes DW secondaires ?
Auquel cas, tu peux éventuellement jouer avec la méthode RowsMove.

Hors ligne

 

#16 23-01-2013 12:03:06

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Filter sur DW non pris en compte

FLADEHIS a écrit:

Pour le saveAs qui renvoie -1, peut-être que tu n'as pas les droits d'écritures à la racine du C:

On a eu des problèmes de déploiement à propos de DW et de save en excel trop récent (problème Sybase corrigé dans un EBF 12.5 il me semble). Est-ce que ça fonctionne mieux avec Excel5! ?


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#17 23-01-2013 13:26:13

Sylvie de hannut  
Membre completement Geek
Lieu: Hannut (Belgique)
Date d'inscription: 10-06-2011
Messages: 123
Pépites: 499
Banque: 0

Re: Filter sur DW non pris en compte

Je n'ai plus essayé le save, car ce n'est pas mon problème principal.
Je sais qu'il y a des données dans mes nested, mais apparemment le filtre ne marche pas.
Quand on filtre une nested PB ne l'affiche plus, je ne sais pas pourquoi.

Hors ligne

 

#18 24-01-2013 13:57:12

Sylvie de hannut  
Membre completement Geek
Lieu: Hannut (Belgique)
Date d'inscription: 10-06-2011
Messages: 123
Pépites: 499
Banque: 0

Re: Filter sur DW non pris en compte

Ouverture d'une nouvelle discussion, car j'abandonne le filtre des dw nested

Dernière modification par Sylvie de hannut (24-01-2013 14:47:18)

Hors ligne

 

#19 27-05-2013 11:16:05

vdb's92270  
Membre Geek
Lieu: BOIS COLOMBES
Date d'inscription: 13-06-2009
Messages: 27
Pépites: 85
Banque: 0

Re: Filter sur DW non pris en compte

bonjour
quand tu mets :

Code:

idw_dw.Modify("DataWindow.Detail.Height.AutoSize=Yes")

j'ai été surpris par le point suivant en rajoutant :

Code:

idw_dw.Modify("DataWindow.Detail.Height='0' ")
idw_dw.Modify("DataWindow.Detail.Height.AutoSize=Yes ")

Depuis, je le mets toujours.
Par contre, pour le group2, coche la case autosize height dans les propreties et mets une hauteur à ZERO.
Rajoute un objet de type TEXT en dessous de tout, expliquant pour la maintanance, d'une couleur de fond et de texte et en position FOREGROUND (non BAND). Deplace le en bas de tout et rend le invisible.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22