Pas d'inquiétude, avec PBAdonf, c'est dans la poche ! ^^

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 15-07-2008 17:39:35

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

[RESOLU] Crosstab et rowscopy

Bonjour,

J'ai besoin de copier une datawindow de type crosstab vers une autre.

Ma datawindow d'arrivée n'a pas de style définit, est ce que cela pourrait gêner?

J'ai essayer de modifier le staticmode avant de faire un rowscopy, mais mon rowscopy me retourne toujours -1 y'a til une subtilité pour utiliser le rowscopy avec un crosstab??

D'avance merci de votre réponse

Dernière modification par djeckelle (04-09-2008 11:04:47)


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#2 16-07-2008 11:12:26

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 30-05-2006
Messages: 4682
Pépites: 1,016
Banque: 2,147,483,647
Site web

Re: [RESOLU] Crosstab et rowscopy

salut,
il me semble que les fonctions rowscopy et sharedata ne fonctionnent pas sur un crosstab...


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#3 16-07-2008 11:38:18

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

Re: [RESOLU] Crosstab et rowscopy

des pistes :
* toutes les controles (en particulier textes) identiques
* méthode avec GetFullState, SetFullState
voir ici : newgroups


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

Hors ligne

 

#4 16-07-2008 13:48:44

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Crosstab et rowscopy

Merci erasorz ca fonctionne.


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#5 16-07-2008 13:49:42

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

Re: [RESOLU] Crosstab et rowscopy

djeckelle a écrit:

Merci erasorz ca fonctionne.

à la bonne heure, quelle méthode fonctionne :
* toutes les controles (en particulier textes) identiques
ou
* méthode avec GetFullState, SetFullState
?


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

Hors ligne

 

#6 16-07-2008 15:38:09

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Crosstab et rowscopy

C'est la méthode avec getfullstate et setfullstate.

Tout d'abord je met le staticmode = Yes  sur ma datawindow source et ensuite j'applique le code suivant

Code: pb

blob     lblb_data  // Buffer 
integer   li_retour

adw_dest.dataobject = adw_source.dataobject  
adw_dest.settransobject(sqlca)

// On stocke dans un buffer 
li_retour = adw_source.getfullstate(lblb_data)
if li_retour <> -1 then
    li_retour = adw_dest.SetFullState(lblb_data)
end if


Je ne sais pas si c'est propre et correct mais cela focntionne et même bien.


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#7 16-07-2008 15:47:05

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 30-05-2006
Messages: 4682
Pépites: 1,016
Banque: 2,147,483,647
Site web

Re: [RESOLU] Crosstab et rowscopy

bravo à toi 


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#8 17-07-2008 11:23:18

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Crosstab et rowscopy

En fait il me reste un petit problème


Le crosstab que je veux copier contient dans un trailer de group une compute représentant un total avec l'expression suivante : sum(valeur for group 2)


Une fois ma copie réalisée la première colonne est renseignée avec son total (Correct), mais les colonnes suivantes reprennent le même total.


Avez vous une autre brillante idée???


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#9 17-07-2008 11:29:04

JCZ  
Builder Power
Award: bf
Lieu: 75019 paris
Date d'inscription: 21-05-2007
Messages: 1724
Pépites: 496,453,703,213
Banque: 9,223,372,036,854,775,808

Re: [RESOLU] Crosstab et rowscopy

salut
GroupCalc  ?


Face à l'agression, la puissance de l'intelligence

Hors ligne

 

#10 17-07-2008 11:58:31

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Crosstab et rowscopy

J'apelle adw_dest.groupcalc juste après le morceau de code que j'ai noté dans mon précédent message, tu penses que cela peut poser problème ?


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#11 17-07-2008 12:19:40

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2492
Pépites: 103
Banque: 9,223,372,036,854,775,808

Re: [RESOLU] Crosstab et rowscopy

Bonjour,

Fais-tu un "sort" après le groupcalc sur ta datawindow?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#12 17-07-2008 12:54:43

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Crosstab et rowscopy

Non , car je n'ai pas de tri mis en place.

J'ai testé en le mettant en place mais cela ne change rien.


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#13 17-07-2008 12:58:48

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Crosstab et rowscopy

J'ai réalisé un autre test, si je rajoute parès mon setfullstate le code ci-dessou, j'ai bien mes totaux, par contre je perd la mise en forme, tout ce qui est caché s'affiche.

Code: pb

ls_values = adw_source.Describe("DataWindow.Crosstab.Values")
ls_values = "DataWindow.Crosstab.Values='" + ls_values +"'"
adw_dest.Modify(ls_values)

"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#14 17-07-2008 13:50:37

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2492
Pépites: 103
Banque: 9,223,372,036,854,775,808

Re: [RESOLU] Crosstab et rowscopy

djeckelle a écrit:

Non , car je n'ai pas de tri mis en place.

J'ai testé en le mettant en place mais cela ne change rien.

Je suppose que tu as mis ton tri avant le groupcalc lors de ton test?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#15 17-07-2008 14:09:16

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Crosstab et rowscopy

Non je suis allée consulter l'aide et j'ai mis le tri après pourquoi , ce n'est pas bon ??


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#16 17-07-2008 14:15:50

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2492
Pépites: 103
Banque: 9,223,372,036,854,775,808

Re: [RESOLU] Crosstab et rowscopy

djeckelle a écrit:

Non je suis allée consulter l'aide et j'ai mis le tri après pourquoi , ce n'est pas bon ??

Aide PB a écrit:

GroupCalc does not sort the data before it recalculates the breaks. Therefore, unless you populated the DataWindow in a sorted order, call the Sort method to sort the data before you call GroupCalc.

Donc, il faut mettre ton "sort" avant le Groupcalc


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#17 17-07-2008 14:50:05

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Crosstab et rowscopy

J'ai essayé en mettant le sort avant mon groupcalc, ca me donne le même résultat.

Pour info je me suis fiée à ceci :

Sorting and groups   To sort a DataWindow object with groups, call GroupCalc after you call Sort.

Sinon, mon problème est lié au fait que dans la datwindow copie l'expression de la compute est identique pour toute soit : sum(valeur for group 2)
Alors qu'il me faudrait sum(valeur_1 for group 2), sum(valeur_2 for group 2), sum(valeur_3 for group 2), ....

J'ai donc écris une boucle qui me parcours les objets afin de regarder pour les objets de type compute leur expression, maintenant il faut que j'arrive à modifier cette expression


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#18 17-07-2008 21:34:00

JCZ  
Builder Power
Award: bf
Lieu: 75019 paris
Date d'inscription: 21-05-2007
Messages: 1724
Pépites: 496,453,703,213
Banque: 9,223,372,036,854,775,808

Re: [RESOLU] Crosstab et rowscopy

et en copiant uniquement les données ? cela ne va pas ?


Face à l'agression, la puissance de l'intelligence

Hors ligne

 

#19 18-07-2008 11:02:23

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Crosstab et rowscopy

Non

Ce qui se passe c'est que pour les compute créés dynamiquement par le crosstab si à l'intérieur de l'expression de ces dernières il y a le nom d'une autre colonne dynamique l'expression n'est pas mise à jour. De ce fait je me retrouve avec la même valeur pour toutes. Celle de la colonne initiale.

Pour rappel le rowscopy et le sharedata ne fonctionnement pas. J'ai essayé de de copier de data à data ça ne fonctionne pas du tout. Par contre hors mis ce soucis de compute dans mon trailer de group, les méthodes getfullstate et setfullstate fonctionnent.

Mais je suis sur une piste et dès que j'ai plus d'infos je l'indiquerai.

En tous cas merci pour votre aide à tous


"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#20 18-07-2008 11:08:11

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 30-05-2006
Messages: 4682
Pépites: 1,016
Banque: 2,147,483,647
Site web

Re: [RESOLU] Crosstab et rowscopy

merci pour ta tenacité


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#21 04-09-2008 11:03:57

djeckelle  
Membre Geek
Lieu: Beauvais
Date d'inscription: 02-06-2008
Messages: 38
Pépites: 3
Banque: 0

Re: [RESOLU] Crosstab et rowscopy

Bonjour,

Enfin ça y est tout fonctionne..

Pour finir, j'ai crée ma propre méthode rowscopy pour les crosstab dans laquelle je modifie dynamiquement les expressions des computes créees dynamiquement.

Pour ceux que ça intéresse voici ma méthode...attention j'ai un peu alléger le code au début car vous êtes des grands et vous savez qu'il faut tester les retours de fonction.

On peut certainement améliorer le tout, mais je l'ai testé et appliqué sur une 10n de crosstab différents..ça fonctionne du tonnerre.

Code: pb

blob     lblb_data      // Buffer 
integer   li_retour      // code retour de fonction 
integer  li_cpt        // compteur
integer  li_nb_obj=0    // nb d'objets 
integer  li_len_string_obj         // Longeur de la chaine d'objets
integer  li_pos_deb =1    integer  li_len_obj_courant      // longeur de chaine de l'objet
integer  li_nb_dim      // Nombre de dimension d'un structure
integer   li_len        // Longueur de la chaine ls_nom_compute
integer  li_indice      

string   ls_name      // nom d'objets
string   ls_type        
string   ls_list_objet    // Liste d'objets
string  ls_sep = '~t'    string  ls_expression    // expression des computes
string  ls_visible       string  ls_nom_compute  string  ls_joker  = "XXXX" string  ls_new_nom    string   ls_retour      // Chaine de retour de fonctions
string  ls_modify      //  Chaine de modify

boolean  lb_fin = false    boolean  lb_is_child = false     
// - On stocke dans un buffer 
//  - et le statut des flags
li_retour = adw_source.getfullstate(lblb_data)

  li_retour = adw_dest.resetupdate()
  li_retour = adw_dest.SetFullState(lblb_data)

ls_retour = adw_dest.Modify("DataWindow.Crosstab.StaticMode=Yes")

//   Valorise une chaine avec la liste des objets de la datawindow , en suite on parcours les objets de cette chaine
ls_list_objet = adw_dest.Describe("datawindow.objects")
    
// On  Valorise une chaine avec la liste des objets de la datawindow pour ensuite la parcourir
ls_list_objet = adw_dest.Describe("datawindow.objects")
if ls_list_objet <> "?" or ls_list_objet <> "!" then
    li_len_string_obj = len(ls_list_objet) 
    li_nb_obj =  Pos(ls_list_objet,ls_sep,1)
  
  if li_nb_obj >= 1 Then
    //  On parcours la liste d'objet
    DO WHILE not lb_fin
            li_nb_obj ++
      
      // On redetermine la position
      li_nb_obj =  Pos(ls_list_objet,ls_sep,1) 
      if li_nb_obj = 0 then 
        lb_fin = true 
        li_nb_obj = li_len_string_obj+1
      end if
          
            ls_name = Mid(ls_list_objet, li_pos_deb, (li_nb_obj - li_pos_deb))
      ls_type = adw_dest.describe(ls_name+".type")
      
      
      //  Dans le cas d'une compute on va lire dans la structure si il existe des infos.
            if ls_type = "compute"  then
        li_len = len(ls_nom_compute)
        lb_is_child = ((li_len > 0) and (ls_nom_compute = left(ls_name, li_len)))
                        if (ls_nom_compute <> ls_name) and  lb_is_child = false then
          li_nb_dim = upperbound(ast_infos_crosstab)        
          if li_nb_dim >0 then
            for li_cpt=1 to li_nb_dim  
              // On regarde si la compute en cours de lecture se trouve dans la structure
              if not isnull(ast_infos_crosstab[li_cpt].nom_compute) and ast_infos_crosstab[li_cpt].nom_compute = ls_name then 
                li_indice  = li_cpt      // stocke l'indice dans la structure as_infos_crosstab
                ls_nom_compute  = ls_name                end if
            next        
          end if
        else 
                    if ls_nom_compute <> "" then 
            ls_expression = ast_infos_crosstab[li_indice].valeur
            ls_new_nom = ast_infos_crosstab[li_indice].nom_colonne +right(ls_name, len(ls_name) - li_len)
            
            ls_expression = f_remplacer_chaine(ls_expression, ls_joker, ls_new_nom,false)
            
            // On applique le modify sur la compute avec la nouvelle expression
            ls_retour = adw_dest.Modify(ls_name +".Expression='"+ls_expression+"'")          
            if ls_retour <> '' then 
              f_isa_error(-1, + ls_retour, "nvo_export_data.uof_rowscopy_crosstab", 16)  
            end if          
          end if   
        end if /*(ls_nom_compute <> ls_name) and  lb_is_child = false*/
      else /*ls_type <> "compute"*/        
        li_indice  = 0    
        ls_nom_compute  = ""  
      end if /*ls_type = "compute"*/      
      
            li_len_obj_courant = len(ls_name)  
      ls_list_objet = Right(ls_list_objet, (li_len_string_obj - li_len_obj_courant - 1))
      
            li_len_string_obj = len(ls_list_objet)
    loop /*lb_fin*/
  end if /*li_nb_obj >= 1*/
end if/*ls_list_objet <> "?" or ls_list_objet <> "!" */

"Il vaut mieux échouer, apprendre et s'améliorer que ne pas avancer."
[Définition de l'échec en extrême programming d'après la revue programmez de Mai 2008]

Hors ligne

 

#22 04-09-2008 11:07:57

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

Re: [RESOLU] Crosstab et rowscopy


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

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22