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 :

calculs sur les enregistrements d'une rupture dans un état [WD19]


Sujet :

WinDev

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 365
    Points : 176
    Points
    176
    Par défaut calculs sur les enregistrements d'une rupture dans un état
    Bonjour,
    j'ai un état tableau qui liste le nombre de produits vendus par des commerciaux chez des revendeurs. J'ai créé des ruptures pour pour pouvoir trier mes données selon le nom du produit, l'enseigne du revendeur et le nom du revendeur.

    Mon état se présente de cette manière:
    HAUT de rupture 1 (nom du produit)
    HAUT de rupture 2 (nom de l'enseigne du revendeur)
    HAUT de rupture 3 (nom du revendeur)
    CORPS --> nom du commercial <tab> nombre de produits vendus <tab> CA du commercial
    BAS de rupture 3 (nom du revendeur)
    BAS de rupture 2 (nom de l'enseigne du revendeur)
    BAS de rupture 3 (nom du produit)

    Je voudrais, pour chacune des ruptures calculer le nombre de produits vendus et le chiffre d'affaires et afficher ces résultats dans les blocs HAUT de rupture correspondants. J'ai vu dans la doc en ligne de PCSOFT qu'il était possible de réaliser des calculs sur les enregistrements de la rupture mais ils ne donnent pas d'exemple sur comment faire; il disent tout de même que le calcul doit se faire dans le bloc bas de rupture.

    Savez-vous comment parcourir les lignes à l'intérieur d'une rupture pour que je puisse additionner mes valeurs?

    Je vous remercie
    Qui vit par le Troll périra par le Troll!

  2. #2
    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,

    La chose à retenir avec les états, c'est que c'est un "process séquentielle", derrière ces mots cela sous-entend que ce qui est passé ne peut pas être modifié et ce qui va arriver est inconnu.

    C'est pour cela que l'on ne peut pas savoir le nombre de page d'un état avant que l'état soit généré réellement (sauf depuis la version 20, ils ont entendu nos doléances ^^ )
    Et donc si l'entête est "imprimé", Windev ne peut pas remonter la feuille de papier pour modifier le contenu de cet entête... C'est un choix de concept que PCSOFT a fait pour ses états.
    Pour faire simple, il n'y a pas de post-calcul ou post-algorithme qui gère un état, tout se fait au fil de l'eau.

    Donc si vous voulez faire une synthèse dans l'entête, il va falloir le gérer manuellement par programmation. Si vous le voulez en bas de rupture, cela est fait en automatique par Windev.

    Cordialement.


    EDIT : lien de l'aide PCSOFT pour le calcul automatique : http://doc.pcsoft.fr/?1013212&lang=f...ion=01F190056s

  3. #3
    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
    Ils ont résolu le problème... de la pagination avec une case à cocher dans les blocs qui remettent à un la pagination.
    L'indication de Ry_Yo est vrai car le parcours de la source de l'état ainsi que la génération de l'impression sont bien séquentielles. C'est le changement de valeur des rubriques qui déclenches les ruptures.


    Toutefois la demande d'elscorpio peut être assurée en une seule impression.
    On va cependant devoir interpréter les ruptures, effectuer les calculs et alimenter le tableau des valeurs qui en résultent.

    Le truc c'est de le faire au bon moment, à savoir... lors du tri de l'état.
    En effet, si on affecte une procédure de trie à un état, celle si va être lancée avant le parcours de l'état. C'est la valeur de retour de la procédure qui va déterminer l'ordre de tri des lignes.
    Il y a donc bien deux parcours... celui du tri et celui du rendu.

    Je vous invite donc à caler votre code de calcul-enregistrement dans cette procédure pour l'utiliser lors du rendu.

    Pour ajouter une procédure de tri dans un état,
    - créez voter procédure dans l'état qui retournera une chaine (la clé de parcours des enregistement, le parcours de tri va monter un tableau de ces chaines + un pointeur d'enregistement pour trier le tableau et assurer le bon parcours).
    -Ouvrir la description de l'état > onglet "Données" cliquer le bouton 'Tri / Ruptures'
    - dans la partie gauche on a une liste des tris, cliquer sur le bouton d'ajout d'un tri et choisi "Tri sur du code WLangage et entre le nom de votre fonction (le bouton fonciton permet de sélectionner une fonction WLangage. Ainsi c'est votre procédure qui retourne la valeur du tri.

    je vous invite à retourner "MonEtat..RubriqueParcourue" pour ne pas interférer avec ce que vous avez prévu comme parcours.

    En utilisant un tableau associatif de structure par rupture et l'algorythme suivant, le passage sur tous les enregistrement va alimenter sa bonne case avec ses données lors du parcours de "tri".
    Il suffira alors de lire dans le tableau avant l'impression du haut de la rupture correspondante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PROCEDURE EtatTrie()
    // RAZ les valeurs de clé de ruptures
    // RAZ les données de calcul
    ...
    // Lit à partir de l'enregistrement les clés de rupture pour l'enregistrement
    ...
    // Recherche dans les tableaux les clés de rupture et lit les données de calcul déjà mémorisées
    ...
    // Ajoute les données de l'enregistement aux données du calcul
    ...
    // Ecrit les données de calcul dans les tableaux
    ...
    // retourne le tri normal
    RENVOYER MonEtat..RubriqueParcourue

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 365
    Points : 176
    Points
    176
    Par défaut
    Je vous remercie pour vos réponses. J'ai finalement fait les calculs des différents totaux lors du remplissage de mon champ table, j'ai rajouter les colonnes manquantes (Nombre de machines et CA pour le produit, l'enseigne et le client) et j'affiche ces valeurs dans des champs rubrique.

    Je vous remercie pour votre aide
    Qui vit par le Troll périra par le Troll!

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

Discussions similaires

  1. Test sur les enregistrements d'une jointure
    Par nessim dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/04/2012, 12h57
  2. Calcul sur les champs d'une table
    Par cvfe13 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 20/03/2012, 15h59
  3. Réponses: 12
    Dernier message: 22/08/2011, 13h20
  4. Réponses: 9
    Dernier message: 12/10/2008, 20h37
  5. Copier les enregistrements d'une table dans une autre
    Par doolar dans le forum Bases de données
    Réponses: 10
    Dernier message: 21/04/2008, 21h36

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