IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Rassembler les résultats d'un état [WD18]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2014
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Rassembler les résultats d'un état
    Bonjour,

    Je travaille actuellement sur un petit outil de gestion inventaire. Tous les produits, un par un, sont enregistrés dans l'analyse. Voici le détail du fichier de données "Produit" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IDProduit
    Référence
    Dénomination
    Exemplaire
    Rayon
    Etagère
    L'aboutissement du logiciel est de générer un état (Etat_Inventaire) alimenté par une requête paramétrée (REQ_Position). La requête permet à l'utilisateur de filtrer les produits en fonction de leur emplacement (ex : Rayon Jouets) et donc, d'imprimer un inventaire sélectif (ex : Inventaire Rayon Jouets).

    Les différents codes de "Etat_Inventaire" sont :

    Ouverture de Etat_Inventaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HLitPremier(REQ_Position)
    Lecture des données de Etat_Inventaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Fin du fichier "Produit" atteinte ?
    SI HEnDehors() = Vrai ALORS
    	// Arrêt de l'impression du bloc Corps
    	RENVOYER Faux
    SINON
    	// Impression du bloc Corps et exécution de ses traitements
    	RENVOYER Vrai
    FIN
    Avant impression de CORPS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Remplissage
    RUB_Référence = REQ_Position.Référence
    RUB_Dénomination = REQ_Position.Dénomination
    RUB_Exemplaires = REQ_Position.Exemplaire
     
    // Lecture de la requête
    HLitSuivant(REQ_Choix)
    Avant impression de HAUT_RUPTURE1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RUB_Etagère = REQ_Position.Etagère
    Rupture ? de HAUT_RUPTURE1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RENVOYER REQ_Position.Etagère
    Ce qui me donne un état final ressemblant à cela :

    Nom : inventaire.png
Affichages : 224
Taille : 19,1 Ko

    Le résultat final ne me surprend pas. En revanche, je ne sais pas comment rassembler les produits identiques sur la même ligne. A savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Etagère 1
     
    Référence          Dénomination               Exemplaires
    DDD444             TELEPHONE VOIP             3618 / 5512 / 5513
    Quelqu'un a t-il une piste ?

    Merci d'avance :-)

  2. #2
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    Bonjour

    Ok vous avez géré la rupture par étagère...
    Et si vous faisiez de même sur les articles dans un niveau de rupture inférieure...
    Vous obtiendriez le cumul par article et donc une agrégation à ce niveau.
    A l'observation (prévisible) "Oui mais maintenant j'ai en plus un entête, tous mes articles et un cumul par article : c'est n'importe quoi....",
    je réponds qu'il suffit de manipuler la visibilité de ces blocs pour n'imprimer que le bas de rupture des articles et hop : magique !
    Petit bonus : produisez une clé de parcours qui permette le découpage selon ces deux niveaux (étagère et article).
    Voila un petit procédé utile car extensible à un nombre considérable de ruptures pour des états complexes...

    Une petite lecture approfondie de l'aide et des concepts sur les états semble utile.

  3. #3
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 723
    Points : 627
    Points
    627
    Par défaut
    Bonjour,

    je ne saispas si j'ai tout bien compris à la question et si je suis à côté du sujet, mais pourquoi ne pas faire une requête sur les articles avec le rayon comme paramètre au lieu d'afficher ou pas les ruptures ?

    SELECT Article_ID, Article_Nom ...... WHERE Rayon=ID_Rayon
    ( si rayon vient d'un table liée )

    SELECT Article_ID, Article_Nom ...... WHERE Rayon='Jouets'

    Amicalement

    Olivier

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2014
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,

    Merci pour vos réponses.

    Bon.. j'ai ajouté une seconde rupture par référence.

    Ainsi, j'ai bien d'une part la rupture par étagère, puis, d'autre part, la rupture par référence. Ceci m'évite la répétition incessante des références et dénominations à la suite.

    En revanche, je n'arrive toujours pas à rassembler les exemplaires sur la même ligne...

    Voici le code utilisé :

    Avant impression de HAUT_RUPTURE2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Etat_Inventaire.RUB_Référence = REQ_Position.Référence
    RUB_Dénomination = REQ_Position.Dénomination
    Rupture ? de HAUT_RUPTURE2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RENVOYER REQ_Position.Référence
    Avant impression de CORPS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Etat_Inventaire.RUB_Exemplaires = REQ_Position.Exemplaire + " / "
    HLitSuivant(REQ_Choix)
    Voici ce que ça donne :

    Nom : inventaire2.png
Affichages : 190
Taille : 14,4 Ko

    Voici ce que j'aimerai obtenir (exemplaires rassemblés, cases vides supprimées) :

    Nom : inventaire3.png
Affichages : 181
Taille : 12,3 Ko

    Merci à vous

  5. #5
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    Produisez une clé de parcours qui permette le découpage selon ces deux niveaux (étagère et article).
    Je parlais d'une clé composée !

    Le parcours de l'état doit intégrer les composantes de toutes les ruptures.
    La rupture de niveau le plus bas en dernier ainsi on aura une liste comme suit E1...En pour les étagère, A1...An pour les articles :
    E1,A1;E1,A1;<rupture article>E1,A2;<rupture article><rupture étagère>E2,A1;<rupture article>;E2,A2;E2,A2;E2,A2<rupture article><rupture étagère>

    La source de données doit comporter une telle clé.

    Autre solution : effectuer un tri programmé (dans la description de l'état, on peut brancher une procédure à la place des rubriques de tri) qui renverra la concaténation des codes étagère/article de manière à ce que vos ruptures puisse s'accorder au parcours des données.

    Il est encore temps de bosser les états car on touche à leurs fondement : parcours et ruptures.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 552
    Points : 1 193
    Points
    1 193
    Par défaut
    Bonjour,

    Le résultat tel que vous le souhaitez n'est pas possible en direct (enfin avec HFSQL).

    Il vous faut une table intermédiaire qui va formater correctement le résultat attendu. Car au niveau de l'état, à partir du moment qu'une ligne est imprimée / affichée, on ne peut plus y revenir dessus. Imaginer un bon vieux système de "machine à écrire".

    Votre requête renvoi 3 lignes d'exemplaires, avec votre état vous aurez 3 lignes affichés.
    Pour n'avoir qu'une ligne, il faut donc faire une somme globale des 3 lignes. Si vous voulez votre formatage xxx / yyy / zzz alors il faut passer par un tableau intermédiaire pour construire l'état tel que vous le voulez.
    Puis de baser l'état sur ce tableau et non sur la requête.

    Cordialement.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2014
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,

    Merci pour votre aide, je suis parvenu au résultat escompté.

    Nul doute qu'il me reste du travail concernant les états.. mais voici comment j'ai procédé :

    - création d'une fenêtre invisible contenant un tableau,
    - le tableau est remplit comme cela :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    // Ouvre le tableau de transition
    OuvreFille(FEN_Tableau)
     
    POUR TOUT REQ_Position 
    	Rayon = REQ_Position.Rayon
    	Référence = REQ_Position.Référence
     
            // Pas de doublon dans la table
    	SI TableCherche(FEN_Tableau.TABLE_Etat.Référence, REQ_Position.Référence, Vrai) = -1 ALORS
     
                   // Rassembler les exemplaires
                   POUR TOUT REQ_Position
    			SI REQ_Position.Rayon = Rayon ET REQ_Position.Référence = Référence ALORS
    				SousExemplaire = REQ_Position.Exemplaire
    				Exemp = Exemp + SousExemplaire + " / "
    				Quantité++
    			FIN
    		FIN
     
    		// Ajoute la ligne au tableau
    		TableAjouteLigne(FEN_Tableau.TABLE_Etat, REQ_Position.Rayon, REQ_Position.Référence, REQ_Position.Dénomination, Quantité, Exemp)
    		Exemp = ""
    		Quantité = 0
    	FIN
    FIN
    - l'état final est désormais alimenté directement par le tableau, les ruptures sont : Etagère puis Référence.

    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/05/2015, 21h00
  2. Réponses: 4
    Dernier message: 11/02/2014, 17h37
  3. Réponses: 12
    Dernier message: 16/09/2013, 20h23
  4. Réponses: 0
    Dernier message: 16/05/2013, 10h34
  5. Réponses: 3
    Dernier message: 04/07/2006, 16h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo