IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Voir le flux RSS

Le Blog de DSR57 - Programmation WinDev

[Actualit�] WinDev : fonctions de s�lection/d�s�lection des champs interrupteurs

Noter ce billet
par , 25/06/2015 � 13h31 (9988 Affichages)
Nouvelles fonctions pour am�liorer la gestion de s�lection/d�s�lection d'un champ Interrupteur par programmation

Contexte technique et fonctionnel



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

Lors de mes d�veloppements personnels, j'ai du manipuler le champ interrupteur, celui-ci peut �tre manipuler par programmation avec les fonctions propos�s par WinDev :


L'ensemble de ces fonctions permettent un certains nombre d'actions mais ne couvraient pas l'ensemble de mes besoins, 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 �ventuelles retour.


Version de WinDev : 20 et ant�rieures

Modfication du 22/09/2015 : Une version des fonctions avec le type de variable Champ est disponible dans ce billet WinDev : fonctions de s�lection/d�s�lection des champs interrupteurs V2
Version de WinDev : 19 et sup�rieures


Les fonctions



Nom : case_a_cocher.jpg
Affichages : 9763
Taille : 14,3 Ko

Le nom des fonctions a �t� cr�� en conservant la m�me syntaxe que celles propos�es par PC-Soft

InterrupteurSelectionne

Cette fonction permet de s�lectionner plusieurs options d'un champ 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
// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
//InterrupteurSelectionne (<ps_champ> est chaîne, <pt_LstIndice> est tableau)
//
// Paramètres :
//        ps_champ (chaîne ANSI) : nom du chqmpde type interrupteur
//        pt_LstIndice (tableau) : Liste des indices à sélectionner
// Valeur de retour :
//         Aucune
//
// Exemple :
// InterrupteurSelectionne(Int_options,[1,2,3])
//
PROCEDURE InterrupteurSelectionne(ps_champ est un chaîne,pt_LstIndice est un tableau d'entiers)
 
//----->Declaration des variables
ls_MessageErreur est une chaîne
li_interrupteurOccurrence 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)."
 
SI ChampExiste(ps_champ) ALORS
        SI {ps_champ,indChamp}..Type = typInterr ALORS
                //----->Initialisation des variables
                li_interrupteurOccurrence={ps_champ,indChamp}..Occurrence
 
                POUR li_i=1 _A_ pt_LstIndice..Occurrence
                        SI pt_LstIndice[li_i] <= li_interrupteurOccurrence ALORS
                                {ps_champ,indChamp}[pt_LstIndice[li_i]]=Vrai
                        SINON
                                ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice[li_i],li_interrupteurOccurrence))
                        FIN
                FIN
        SINON
                ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur")
        FIN
SINON
        ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas")
FIN

Exemple d'utilisation :

Code WinDev : S�lectionner tout - Visualiser dans une fen�tre � part
InterrupteurSelectionne(Int_LstOptions..nom,[1,3,5,7])

InterrupteurSelectionneTout

Cette fonction s�lectionne toutes les options du champ interrupteur pass� en param�tre

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
// Résumé : Sélectionne toutes les options d'un champ de type interrupteur
// Syntaxe :
//InterrupteurSelectionneTout (<ps_champ> est chaîne)
//
// Paramètres :
//        ps_champ (chaîne ANSI) : Nom du champ de type interrupteur
// Valeur de retour :
//         Aucune
//
// Exemple :
// InterrupteurSelectionneTout(Int_LstOptions..Nom)
//
PROCEDURE InterrupteurSelectionneTout(ps_champ est un chaîne)
 
SI ChampExiste(ps_champ) ALORS
        SI {ps_champ,indChamp}..Type = typInterr ALORS
                POUR li_i=1 _A_ InterrupteurOccurrence(ps_champ)
                        {ps_champ,indChamp}[li_i]=1
                FIN        
        SINON
                ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur")
        FIN
SINON
        ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas")
FIN

Exemple d'utilisation :

Code WinDev : S�lectionner tout - Visualiser dans une fen�tre � part
InterrupteurSelectionneTout(Int_LstOPtions..nom)

InterrupteurDeselectionne

Cette fonction permet de d�s�lectionner plusieurs options d'un champ 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
// Résumé : Déselectionne les options du champ interrupteur passé en paramètre 1 avec les indices passé en paramètre 2 
// Syntaxe :
//InterrupteurDeselectionne (<ps_champ> est chaîne, <pt_LstIndice> est tableau)
//
// Paramètres :
//        ps_champ (chaîne ANSI) : nom du champ interrupteur à manipuler
//        pt_LstIndice (tableau) : Liste des indices des options à désélectionner
// Valeur de retour :
//         Aucune
//
// Exemple :
// InterrupteurDeselectionne (Int_LstOptions..nom,[1,3,7])
//
PROCEDURE InterrupteurDeselectionne(ps_champ est un chaîne,pt_LstIndice est un tableau d'entiers)
 
//----->Declaration des variables
ls_MessageErreur est une chaîne
li_interrupteurOccurrence 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)."
 
SI ChampExiste(ps_champ) ALORS
        SI {ps_champ,indChamp}..Type = typInterr ALORS
                //----->Initialisation des variables
                li_interrupteurOccurrence={ps_champ,indChamp}..Occurrence
 
                POUR li_i=1 _A_ pt_LstIndice..Occurrence
                        SI pt_LstIndice[li_i] <= li_interrupteurOccurrence ALORS
                                {ps_champ,indChamp}[pt_LstIndice[li_i]]=Faux
                        SINON
                                ExceptionDéclenche(3,ChaîneConstruit(ls_MessageErreur,ps_champ,pt_LstIndice[li_i],li_interrupteurOccurrence))
                        FIN
                FIN
        SINON
                ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur")
        FIN
SINON
        ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas")
FIN

Exemple d'utilisation :

Code WinDev : S�lectionner tout - Visualiser dans une fen�tre � part
InterrupteurDeselectionne(Int_LstOPtions..nom,[1,3,7])

InterrupteurDeselectionneTout

Cette fonction d�s�lectionne toutes les options du champ interrupteur pass� en param�tre

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
// Résumé : Déselectionne toutes les option d'un interrupteur
// Syntaxe :
//InterrupteurDeselectionneTout (<ps_champ> est chaîne)
//
// Paramètres :
//        ps_champ (chaîne ANSI) : Nom du champ de type interrupteur
// Valeur de retour :
//         Aucune
//
// Exemple :
// InterrupteurDeselectionneTout(Int_option..nom)
//
PROCEDURE InterrupteurDeselectionneTout(ps_champ est un chaîne)
 
SI ChampExiste(ps_champ) ALORS
        SI {ps_champ,indChamp}..Type = typInterr ALORS
                POUR li_i=1 _A_ InterrupteurOccurrence(ps_champ)
                        {ps_champ,indChamp}[li_i]=0
                FIN
        SINON
                ExceptionDéclenche(2,"Le champ '"+ps_champ+"' n'est pas de type interrupteur")
        FIN
SINON
        ExceptionDéclenche(1,"Le champ '"+ps_champ+"' n'existe pas")
FIN

Exemple d�utilisation :

Code WinDev : S�lectionner tout - Visualiser dans une fen�tre � part
InterrupteurDeselectionneTout(Int_LstOPtions..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 interrupteur
3 Vous avez appel� l'op�rateur [] sur le champ %%Champ%%.<br>
"L'indice sp�cifi� [%Indice%%] est invalide. "+RC+...
"Les valeurs valides sont comprises entre 1 et %%Occurrence%% (inclus).

Exemple d'utilisation avec la gestion des exceptions :

InterrupteurSelectionne

Code WinDev : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
QUAND EXCEPTION DANS 
	InterrupteurSelectionne(Int_LstOptions..Nom,[1,3,4,20])
FAIRE
	//Gestion des exceptions
FIN

InterrupteurSelectionneTout

Code WinDev : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
QUAND EXCEPTION DANS 
	InterrupteurSelectionneTout(Int_LstOptions..Nom)
FAIRE
	//Gestion des exceptions
FIN

InterrupteurDeselectionne

Code WinDev : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
QUAND EXCEPTION DANS 
	InterrupteurDeSelectionne(Int_LstOptions..Nom,[1,3,4,20])
FAIRE
	//Gestion des exceptions
FIN

InterrupteurDeselectionneTout

Code WinDev : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
QUAND EXCEPTION DANS 
	InterrupteurDeselectionneTout(Int_LstOptions..Nom,[1,3,4,20])
FAIRE
	//Gestion des exceptions
FIN

Conclusion



Par ce billet, je viens de mettre � disposition de la communaut� des fonctions pour am�liorer la gestion par programmation du champ Interrupteur. 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

Envoyer le billet � WinDev : fonctions de  s�lection/d�s�lection des champs interrupteurs � dans le blog Viadeo Envoyer le billet � WinDev : fonctions de  s�lection/d�s�lection des champs interrupteurs � dans le blog Twitter Envoyer le billet � WinDev : fonctions de  s�lection/d�s�lection des champs interrupteurs � dans le blog Google Envoyer le billet � WinDev : fonctions de  s�lection/d�s�lection des champs interrupteurs � dans le blog Facebook Envoyer le billet � WinDev : fonctions de  s�lection/d�s�lection des champs interrupteurs � dans le blog Digg Envoyer le billet � WinDev : fonctions de  s�lection/d�s�lection des champs interrupteurs � dans le blog Delicious Envoyer le billet � WinDev : fonctions de  s�lection/d�s�lection des champs interrupteurs � dans le blog MySpace Envoyer le billet � WinDev : fonctions de  s�lection/d�s�lection des champs interrupteurs � dans le blog Yahoo

Mis � jour 03/08/2016 � 22h15 par dsr57

Cat�gories
WinDev , Fonctions

Commentaires

  1. Avatar de KKJJAK
    • |
    • permalink
    bonjour ,je suis d�butant en windev aider moi
    j'ai deux fen�tres ,FEN_VISION, et FEN_FICHE _ARTICLE
    DANS LA FEN�TRE VISION j'ai une (table article) qui regroupe les articles(ID,d�signation,prix u,quantit�,montant)
    dans la fen�tre FICHE j'ai une autre (table affiche)vide que je veux remplir.quant je s�lectionne un article dans la table il appara�t dans la fen�tre FICHE dans un champ combo et ensuite j'utilise le bouton Ajout pour ajouter l'article dans la table affiche.Mais quand je fais cela c'est le m�me article qui appara�t dans la table et pas en ordre.
    voila le code du bouton AJOUT

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // Affiche le nom de tous les articles
    
    HLitRecherchePremier(ARTICLE,IDARTICLE,COL_NOM)
    TableAjouteLigne(TABLE_COMMANDE, ARTICLE.IDARTICLE,ARTICLE.IDARTICLE, ARTICLE.Nomarticle, ARTICLE.quantit�,ARTICLE.Prix_U_HT,ARTICLE."Taux de TVA",ARTICLE."Total TTC")
    
    // rafraichissement de la table
    TableAffiche(TABLE_COMMANDE,taCourantEnreg)
    // rafraichissement de la fiche
    FichierVersEcran()
    
    // Remet la quantit� d'ajout � 0
    SAI_Ajouter_Quantit� = 0
    
    // Reprend la saisie � la quantit� (pour effectuer plusieurs saisies � la suite)
    RepriseSaisie(SAI_Ajouter_Quantit�)
    �a na marche pas .aidez moi
    mer�i d'avance
    Mis � jour 01/09/2015 � 13h16 par dsr57
  2. Avatar de dsr57
    • |
    • permalink
    Bonjour

    Dans un premier temps, mettez en place un test sur le retour de la fonction HLitRecherchePremier, soit en testant le retour, soit en utilisant la fonction HTrouve().

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    Si HLitRecherchePremier(ARTICLE,IDARTICLE,COL_NOM) alors
           //---->Suite du traitement
    SINON
          Erreur("......;")
    FIN
    ou

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    HLitRecherchePremier(ARTICLE,IDARTICLE,COL_NOM)
    Si HTrouve(Article) alors
           //---->Suite du traitement
    SINON
          Erreur("......;")
    FIN
    (Cf. documentation en ligne de Pc-Soft : HlitRecherchePremier() )

    Ensuite lors de l'appel de la fonction HlitRecherchePremier, vous passez en troisi�me param�tre COL_NOM, est ce bien cette colonne qui contient l'identidfiant de l'article ?

    En esp�rant vous avoir aid�.
    En cas de questions sur WinDev, WinDev Mobile, WebDev, n'h�sitez pas � ouvrir une discussion sur les forums et sous-forums : http://www.developpez.net/forums/f22...pement/windev/

    Bon dev
  3. 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 occurrences
    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
  4. Avatar de jerbas
    • |
    • permalink
    Comment je peux faire pour ajouter dans le fichier de donn�es tout mes options s�lectionn�es de mon champ INT_
    c�d avec la fonction: EcranversFichier et faire �galement FichierVersEcran, pour faire apparaitre mes options que j'avais s�lectionn�es

    J'ai fais une Appli � la quel on aura la possibilit� de s�lectionn� plusieurs mois avec le champs INTERRUPTEUR...

    Cordial...