WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur
par
, 25/08/2015 à 12h37 (4649 Affichages)
Nouvelles fonctions pour améliorer la programmation de la sélection/désélection d'une colonne de type interrupteur dans un champ Table
Contexte technique et fonctionnel
Lors de mes développements, j'ai du manipuler le champ table, celui-ci peut être manipuler par programmation avec les fonctions proposés par WinDev :
- TableAjoute
- TableAjouteLigne
- TableOccurrence
- TableSelect
- Listes complètes des fonctions de gestion des champs Table
L'ensemble de ces fonctions permettent un certains nombre d'actions mais ne couvraient pas l'ensemble de mes besoins. notamment dans les étapes :
- importation d'enregistrements ;
- exportation d'enregistrements ;
- impression de plusieurs enregistrements.
Dans ces étapes., j'ai pris l'habitude d'afficher une fenêtre récapitulative listant dans un champ table les informations qui vont être taitées, cela permet à l'utilisateur :
- effectuer une vérification ;
- effectuer une sélection pour ne pas traiter l'ensemble.
L'utilisateur a les possibiltés suivantes :
- Sélectionner tout ;
- Désélectionner tout ;
- Effectuer une sélection plus restritive.
Dans certain cas, je devais pré-sélectionner des lignes de la table avec des indices connues à l'ouverture de la fenêtre. L'ensemble de ces actions me demandait de mettre en place soit une boucle de parcours soit une liste d'affectation. J'ai donc créé de nouvelles fonctions et j'ai décidé de les partager pour permettre :
- à la communauté de les utiliser ;
- une évolution de celles-ci avec les éventuels retour.
Version de WinDev : 20 et antérieures
Les fonctions
Le nom des fonctions a été créé en conservant la même syntaxe que celles proposées par PC-Soft
TableSelectionne
Cette fonction permet de sélectionner plusieurs cases d'une colonnes de type interrupteur en passant les indices en paramètres
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 // Résumé : Active les options des lignes passées en paramètres // Syntaxe : //[ <Résultat> = ] TableSelectionne (<ps_champ> est chaîne, <pt_LstIndice> est tableau) // // Paramètres : // ps_champ (chaîne ANSI) : Nom de la colonne de type interrupteur // pt_LstIndice (tableau) : Liste des indices à sélectionner // Valeur de retour : // booléen : vrai si toutes les indices passé en paramètres ont été traité avec succès // // Exemple : // TableSelectionne(Colonne3..nom,[1,5,8,20]) // PROCEDURE TableSelectionne(ps_champ est un chaîne,pt_LstIndice est un tableau d'entiers) //----->Declaration des variables lb_retour est un booléen ls_MessageErreur,ls_nomTable est une chaîne li_tableOccurrence est un entier //----->Initialisation des variables ls_MessageErreur="Vous avez appelé l'opérateur [] sur le champ %1."+RC+... "L'indice spécifié [%2] est invalide. "+RC+... "Les valeurs valides sont comprises entre 1 et %3 (inclus)." //----->Initialisation des variables lb_retour=Faux SI ChampExiste(ps_champ) ALORS SI {ps_champ,indChamp}..Type = typInterr ALORS ls_nomTable={ps_champ,indChamp}..NomComplet ls_nomTable=ExtraitChaîne(ls_nomTable,2,".",DepuisDébut) SI {ls_nomTable,indChamp}..Type = typTable ALORS //----->Initialisation des variables li_tableOccurrence={ls_nomTable,indChamp}..Occurrence POUR li_i=1 _A_ pt_LstIndice..Occurrence SI pt_LstIndice[li_i] <= li_tableOccurrence ALORS {ps_champ,indChamp}[pt_LstIndice[li_i]]=Vrai SINON ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice[li_i],li_tableOccurrence)) FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type table ou colonne") FIN lb_retour=Vrai SINON SI {ps_champ,indChamp}..Type = typTable ALORS li_tableOccurrence={ps_champ,indChamp}..Occurrence POUR li_i=1 _A_ {ps_champ,indChamp}..NombreColonne SI {ps_champ,indChamp}[1,li_i]..Type = typInterr ALORS POUR li_j=1 _A_ pt_LstIndice..Occurrence SI pt_LstIndice[li_j] <= li_tableOccurrence ALORS {ps_champ,indChamp}[pt_LstIndice[li_j],li_i]=Vrai SINON ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice[li_i],li_tableOccurrence)) FIN FIN lb_retour=Vrai SORTIR FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type table ou colonne") FIN SINON ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas") FIN RENVOYER lb_retour
Exemple d'utilisation :
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TableSelectionne(Col_Select..nom,[1,5,8,20])
TableSelectionneTout
Cette fonction permet de sélectionner toutes les cases d'une colonne de type interrupteur.
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
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
41
42
43
44
45
46 // Résumé : Sélectionne toutes les cases d'une colonne interrupteur. // Syntaxe : //[ <Résultat> = ] TableSelectionneTout (<ps_champ> est chaîne) // // Paramètres : // ps_champ (chaîne ANSI) : Nom de la colonne ou nom de la table // Valeur de retour : // booléen : Vrai si toutes les lignes ont été sélectionnées // // Exemple : // TableSelectionneTout(Col_activer..nom) // // ps_nomColonne (chaîne ANSI - valeur par défaut="") : <indiquez ici le rôle de ps_nomColonne> PROCEDURE TableSelectionneTout(ps_champ est un chaîne) //----->Declaration des variables lb_retour est un booléen //----->Initialisation des variables lb_retour=Faux SI ChampExiste(ps_champ) ALORS SI {ps_champ,indChamp}..Type = typColonne ALORS POUR li_i=1 _A_ TableOccurrence(ps_champ) {ps_champ,indChamp}[li_i]=1 FIN lb_retour=Vrai SINON SI {ps_champ,indChamp}..Type = typTable ALORS POUR li_i=1 _A_ {ps_champ,indChamp}..NombreColonne SI {ps_champ,indChamp}[1,li_i]..Type = typInterr ALORS POUR li_j=1 _A_ TableOccurrence(ps_champ) {ps_champ,indChamp}[li_j,li_i]=Vrai FIN lb_retour=Vrai SORTIR FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type table ou colonne") FIN SINON ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas") FIN RENVOYER lb_retour
Exemple d'utilisation :
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part TableSelectionneTout(Col_Select..nom)
Cette fonction peut prendre en paramètre le nom d'un champ table, la fonction sélectionnera toutes les cases de la première colonne de type interrupteur
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part TableSelectionneTout(Tab_ListeClientAExporter..nom)
TableDeselectionne
Cette fonction permet de désélectionner plusieurs cases d'une colonne de type interrupteur en passant les indices en paramètres.
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 // Résumé : Désélectionne les options des lignes passées en patamètres // Syntaxe : //[ <Résultat> = ] TableDeSelectionne (<ps_champ> est chaîne, <pt_LstIndice> est tableau) // // Paramètres : // ps_champ (chaîne ANSI) : niom de la colonne de type interrupteur // pt_LstIndice (tableau) : Liste des indices des lignes à désélectionner // Valeur de retour : // booléen : vrai si toutes les indices passé en paramètres ont été traité avec succès // // Exemple : // Indiquez ici un exemple d'utilisation. // PROCEDURE TableDeSelectionne(ps_champ est un chaîne,pt_LstIndice est un tableau d'entiers) //----->Declaration des variables lb_retour est un booléen ls_MessageErreur,ls_nomTable est une chaîne li_tableOccurrence est un entier //----->Initialisation des variables ls_MessageErreur="Vous avez appelé l'opérateur [] sur le champ %1."+RC+... "L'indice spécifié [%2] est invalide. "+RC+... "Les valeurs valides sont comprises entre 1 et %3 (inclus)." //----->Initialisation des variables lb_retour=Faux SI ChampExiste(ps_champ) ALORS SI {ps_champ,indChamp}..Type = typInterr ALORS ls_nomTable={ps_champ,indChamp}..NomComplet ls_nomTable=ExtraitChaîne(ls_nomTable,2,".",DepuisDébut) SI {ls_nomTable,indChamp}..Type = typTable ALORS //----->Initialisation des variables li_tableOccurrence={ls_nomTable,indChamp}..Occurrence POUR li_i=1 _A_ pt_LstIndice..Occurrence SI pt_LstIndice[li_i] <= li_tableOccurrence ALORS {ps_champ,indChamp}[pt_LstIndice[li_i]]=Faux SINON ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice[li_i],li_tableOccurrence)) FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type table ou colonne") FIN lb_retour=Vrai SINON SI {ps_champ,indChamp}..Type = typTable ALORS li_tableOccurrence={ps_champ,indChamp}..Occurrence POUR li_i=1 _A_ {ps_champ,indChamp}..NombreColonne SI {ps_champ,indChamp}[1,li_i]..Type = typInterr ALORS POUR li_j=1 _A_ pt_LstIndice..Occurrence SI pt_LstIndice[li_j] <= li_tableOccurrence ALORS {ps_champ,indChamp}[pt_LstIndice[li_j],li_i]=Faux SINON ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice[li_i],li_tableOccurrence)) FIN FIN lb_retour=Vrai SORTIR FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type table ou colonne") FIN SINON ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas") FIN RENVOYER lb_retour
TableDeselectionneTout
Cette fonction permet de désélectionner toutes les cases d'une colonne de type interrupteur.
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
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
41
42
43
44
45
46 // Résumé : désélectionne toutes les options d'une colonne de type interrupteur // Syntaxe : //[ <Résultat> = ] TableDeselectionneTout (<ps_champ> est chaîne) // // Paramètres : // ps_champ (chaîne ANSI) : nom de la colonne ou nom de la table // Valeur de retour : // booléen : vrai si toutes les options de la colonne interrupteur ont été désélectionnées // // Exemple : // Indiquez ici un exemple d'utilisation. // TableDeselectionneTout(Col_Export..nom) // PROCEDURE TableDeselectionneTout(ps_champ est un chaîne) //----->Declaration des variables lb_retour est un booléen //----->Initialisation des variables lb_retour=Faux SI ChampExiste(ps_champ) ALORS SI {ps_champ,indChamp}..Type = typColonne ALORS POUR li_i=1 _A_ TableOccurrence(ps_champ) {ps_champ,indChamp}[li_i]=0 FIN lb_retour=Vrai SINON SI {ps_champ,indChamp}..Type = typTable ALORS POUR li_i=1 _A_ {ps_champ,indChamp}..NombreColonne SI {ps_champ,indChamp}[1,li_i]..Type = typInterr ALORS POUR li_j=1 _A_ TableOccurrence(ps_champ) {ps_champ,indChamp}[li_j,li_i]=0 FIN lb_retour=Vrai SORTIR FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type table ou colonne") FIN SINON ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas") FIN RENVOYER lb_retour
Exemple d'utilisation :
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TableDeselectionneTout(Col_Select..nom)
Cette fonction peut prendre en paramètre le nom d'un champ table, la fonction sélectionnera toutes les cases de la première colonne de type interrupteur
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part TableSelectionneTout(Tab_ListeClientAExporter..nom)
Les exceptions
Comme vous avez pu le constater en lisant le code source des fonctions, celles-ci déclenchent des exceptions en cas de problème. Trois types d'exceptions sont gérées :
Code Message 1 Le champ '%%Champ%%' n'existe pas 2 Le champ '%%Champ%%' n'est pas de type table ou colonne 3 Vous avez appelé l'opérateur [] sur le champ %%Champ%%.<br>
L'indice spécifié [%Indice%%] est invalide.<br>
Les valeurs valides sont comprises entre 1 et %%Occurrence%% (inclus).
Exemple d'utilisation avec la gestion des exceptions :
TableSelectionne
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 QUAND EXCEPTION DANS TableSelectionne(Col_SelectClient..Nom,[1,3,4,20]) FAIRE //Gestion des exceptions FIN
TableSelectionneTout
Code Windev : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 QUAND EXCEPTION DANS TableSelectionneTout(Col_SelectClient..Nom) FAIRE //Gestion des exceptions FIN
TableDeselectionne
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 QUAND EXCEPTION DANS TableDeSelectionne(Col_SelectClient..Nom,[1,3,4,20]) FAIRE //Gestion des exceptions FIN
TableDeselectionneTout
Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 QUAND EXCEPTION DANS TableDeSelectionneTout(Col_SelectClient..Nom) FAIRE //Gestion des exceptions FIN
Conclusion
Ces fonctions permettent de faciliter la gestion d'une colonne de type interrupteur dans un champ table en proposant un ensemble de possibilité pour gérer la sélection/désélection. N'hésitez pas à me faire part de vos retours pour améliorer, compléter la liste de ces fonctions.
A voir, si PC-Soft intégrera ces propositions dans une future version de son EDI.
Bon dev à tous![]()