WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur V2
par
, 28/09/2015 à 14h20 (1745 Affichages)
Nouvelles fonctions pour améliorer la gestion de sélection/désélection d'une colonne de type interrupteur dans un champ Table V2
Contexte technique
Dans le premier billet WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur, je mettais à disposition une collection de procédures facilitant la gestion d'une colonne de type interrupteur en proposant un ensemble de possibilité pour gérer la sélection/désélection. Ces fonctions :
- TableSelectionne
- TableSelectionneTout
- TableDeSelectionne
- TableDeSelectionneTout
prenaient en premier paramètre le nom du champ sous forme de chaine de caractère. Depuis WinDev 19, un nouveau type de variable est disponible : Champ.
Je met à disposition une nouvelle version de ces fonctions avec ce type de variable.
Version de WinDev : 19 et supérieures
Les fonctions
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é : <indiquez ici ce que fait la procédure> // Syntaxe : //[ <Résultat> = ] TableDeSelectionne (<pc_champ> est champ, <pt_LstIndice> est tableau) // // Paramètres : // pc_champ (champ) : Nom de la colonne ou nom de la table // pt_LstIndice (tableau) : Liste des indices des lignhe sà sélectionner // Valeur de retour : // booléen : Vrai si les indices ont été sélectionné // // Exemple : // TableSelectionne(Col_select,[1,5,10]) // PROCEDURE TableDeSelectionne(pc_champ est un Champ,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(pc_champ..NomComplet) ALORS SI pc_champ..Type = typInterr ALORS ls_nomTable=pc_champ..NomComplet ls_nomTable=ExtraitChaîne(ls_nomTable,2,".",DepuisDébut) SI pc_champ..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 pc_champ[pt_LstIndice[li_i]]=Faux SINON ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,pc_champ..NomComplet,pt_LstIndice[li_i],li_tableOccurrence)) FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+pc_champ..NomComplet+"' n'est pas de type table ou colonne") FIN lb_retour=Vrai SINON SI pc_champ..Type = typTable ALORS li_tableOccurrence=pc_champ..Occurrence POUR li_i=1 _A_ pc_champ..NombreColonne SI pc_champ[1,li_i]..Type = typInterr ALORS POUR li_j=1 _A_ pt_LstIndice..Occurrence SI pt_LstIndice[li_j] <= li_tableOccurrence ALORS pc_champ[pt_LstIndice[li_j],li_i]=Faux SINON ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,pc_champ..NomComplet,pt_LstIndice[li_i],li_tableOccurrence)) FIN FIN lb_retour=Vrai SORTIR FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+pc_champ..NomComplet+"' n'est pas de type table ou colonne") FIN SINON ExceptionDéclenche(1,"Le champ '"+pc_champ..NomComplet+"' n'existe pas") FIN RENVOYER lb_retour
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 // Résumé : Selectionne toutes lignes de la colonne de type interrupteur // Syntaxe : //[ <Résultat> = ] TableSelectionneTout (<pc_champ> est champ) // // Paramètres : // pc_champ (champ) : Nom de la table ou nom de la colonne // Valeur de retour : // booléen : Vrai si toutes les lignes ont été sélectionnées // // Exemple : // TableSelectionneTout(Col_Select) // PROCEDURE TableSelectionneTout(pc_champ est un Champ) //----->Declaration des variables lb_retour est un booléen //----->Initialisation des variables lb_retour=Faux SI ChampExiste(pc_champ..NomComplet) ALORS SI pc_champ..Type = typColonne ALORS POUR li_i=1 _A_ TableOccurrence(pc_champ) pc_champ[li_i]=1 FIN lb_retour=Vrai SINON SI pc_champ..Type = typTable ALORS POUR li_i=1 _A_ pc_champ..NombreColonne SI pc_champ[1,li_i]..Type = typInterr ALORS POUR li_j=1 _A_ TableOccurrence(pc_champ) pc_champ[li_j,li_i]=Vrai FIN lb_retour=Vrai SORTIR FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+pc_champ..NomComplet+"' n'est pas de type table ou colonne") FIN SINON ExceptionDéclenche(1,"Le champ '"+pc_champ..NomComplet+"' n'existe pas") FIN RENVOYER lb_retour
TableDeselectionne
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
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é : Désélectionne les options des lignes passées en patamètres // Syntaxe : //[ <Résultat> = ] TableDeSelectionne (<pc_champ> est champ, <pt_LstIndice> est tableau) // // Paramètres : // pc_champ (champ) : nom de la colonne de type interrupteur ou de la table // 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 : // TableDeSelectionne(Col_Export,[1,5,10]) // PROCEDURE TableDeSelectionne(pc_champ est un Champ,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(pc_champ..NomComplet) ALORS SI pc_champ..Type = typInterr ALORS ls_nomTable=pc_champ..NomComplet ls_nomTable=ExtraitChaîne(ls_nomTable,2,".",DepuisDébut) SI pc_champ..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 pc_champ[pt_LstIndice[li_i]]=Faux SINON ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,pc_champ..NomComplet,pt_LstIndice[li_i],li_tableOccurrence)) FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+pc_champ..NomComplet+"' n'est pas de type table ou colonne") FIN lb_retour=Vrai SINON SI pc_champ..Type = typTable ALORS li_tableOccurrence=pc_champ..Occurrence POUR li_i=1 _A_ pc_champ..NombreColonne SI pc_champ[1,li_i]..Type = typInterr ALORS POUR li_j=1 _A_ pt_LstIndice..Occurrence SI pt_LstIndice[li_j] <= li_tableOccurrence ALORS pc_champ[pt_LstIndice[li_j],li_i]=Faux SINON ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,pc_champ..NomComplet,pt_LstIndice[li_i],li_tableOccurrence)) FIN FIN lb_retour=Vrai SORTIR FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+pc_champ..NomComplet+"' n'est pas de type table ou colonne") FIN SINON ExceptionDéclenche(1,"Le champ '"+pc_champ..NomComplet+"' 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 // Résumé : désélectionne toutes les options d'une colonne de type interrupteur // Syntaxe : //[ <Résultat> = ] TableDeselectionneTout (<pcs_champ> est champ) // // Paramètres : // pc_champ (champ) : 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 : // TableDeselectionneTout(Col_Export) // PROCEDURE TableDeselectionneTout(pc_champ est un Champ) //----->Declaration des variables lb_retour est un booléen //----->Initialisation des variables lb_retour=Faux SI ChampExiste(pc_champ..NomComplet) ALORS SI pc_champ..Type = typColonne ALORS POUR li_i=1 _A_ TableOccurrence(pc_champ) pc_champ[li_i]=0 FIN lb_retour=Vrai SINON SI pc_champ..Type = typTable ALORS POUR li_i=1 _A_ pc_champ..NombreColonne SI pc_champ[1,li_i]..Type = typInterr ALORS POUR li_j=1 _A_ TableOccurrence(pc_champ) pc_champ[li_j,li_i]=0 FIN lb_retour=Vrai SORTIR FIN FIN SINON ExceptionDéclenche(2,"Le champ '"+pc_champ..NomComplet+"' n'est pas de type table ou colonne") FIN SINON ExceptionDéclenche(1,"Le champ '"+pc_champ..NomComplet+"' n'existe pas") FIN RENVOYER lb_retour
Exceptions
Pour plus de renseignements sur la gestion des exceptions , voir le billet initial WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur
Conclusion
Par ce billet, je viens de mettre à disposition les fonctions pour améliorer la gestion par programmation du champ Interrupteur avec le type de variable Champ. 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.