Voir le flux RSS

Le Blog de DSR57 - Programmation WinDev

WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur V2

Noter ce billet
par , 28/09/2015 à 14h20 (966 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



Nom : contexteTechnique.jpg
Affichages : 1290
Taille : 27,5 Ko

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



Nom : photo_programmation_web.png
Affichages : 178
Taille : 172,3 Ko

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.

Envoyer le billet « WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur V2 » dans le blog Viadeo Envoyer le billet « WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur V2 » dans le blog Twitter Envoyer le billet « WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur V2 » dans le blog Google Envoyer le billet « WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur V2 » dans le blog Facebook Envoyer le billet « WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur V2 » dans le blog Digg Envoyer le billet « WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur V2 » dans le blog Delicious Envoyer le billet « WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur V2 » dans le blog MySpace Envoyer le billet « WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur V2 » dans le blog Yahoo

Mis à jour 03/08/2016 à 23h09 par dsr57

Catégories
Sans catégorie

Commentaires

  1. Avatar de dsr57
    • |
    • permalink
    Bonjour à tous ,

    Suite à un signalement de dysfonctionnement dans les procédures du billet WinDev : fonctions de sélection/désélection d'une colonne de type interrupteur, j'ai modifié les fonctions de ce billet pour prendre en compte ces BUGs. Le code présent dans ce billet prend en compte ces corrections.

    Le problème se situait aux lignes de tests sur les occurences
    Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
    Code WinDev : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SI pt_LstIndice[li_i] < li_TableOccurrence ALORS


    Merci au développeur pour son retour

    Bon dev à tous