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 :

Traitement sur rupture


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Traitement sur rupture
    Bonjour

    Je veux que mon code exécute un traitement a chaque rupture de la table mémoire alimenter par une requête , mais le problème il parcourt toutes la table il traite pas chaque rupture en interpretant le code


    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
    26
    27
    28
    29
    30
    31
    32
    33
    MaRépétition est un entier = 1 // Début de la rupture
    DébutRupture est un entier  // Indice du haut de rupture
    FinRupture est un entier// Indice du bas de rupture
    Indice est un entier // Indice des ruptures
     
     
     
    TANTQUE MaRépétition <= TABLE_REQ_LOGTERMINAL..Occurrence
    	// Indice de la rupture courante
    	DébutRupture = TableIndiceRupture(TABLE_REQ_LOGTERMINAL.RUPT_HautRupture2, MaRépétition)
    	FinRupture = TableIndiceRupture(TABLE_REQ_LOGTERMINAL.RUPT_BasRupture2, MaRépétition)
     
    	// Parcours  de la rupture courante
     
     
    	POUR Indice = DébutRupture À FinRupture
    		SI EstPair(Indice) ALORS
     
    			TABLE_REQ_LOGTERMINAL[Indice].COL_DwInOutMode="Sortie"
     
     
    		SINON
     
    			TABLE_REQ_LOGTERMINAL[Indice].COL_DwInOutMode="Entrée"
     
    		FIN
    	FIN
     
     
     
    	// Passage à la rupture suivante
    	MaRépétition = FinRupture + 1
    FIN

    Merci pour vous réponses

  2. #2
    Rédacteur/Modérateur

    Tu as mis une boucle TANTQUE en ligne 8, donc tu lui demandes de répéter une certaine opération.
    Et Windev, il fait ce que tu lui demandes. il exécute cette boucle.

    La première question, c'est : où as-tu placé ce code ? Sur un bouton, sur une ligne de la table, ailleurs ? C'est important pour comprendre.
    Deuxième question : as-tu vu cette page de la documentation : Ruptures champ table ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre chevronné
    Bonjour,
    Tu parles de table mémoire alimentée par une requête. C'est soit l'un (table mémoire=Table remplie par programmation,) soit l'autre on a alors affaire à une table fichier.
    Il y a peut être plus simple, mais ça tourne

  4. #4
    Membre à l'essai
    Citation Envoyé par tbc92 Voir le message
    Tu as mis une boucle TANTQUE en ligne 8, donc tu lui demandes de répéter une certaine opération.
    Et Windev, il fait ce que tu lui demandes. il exécute cette boucle.

    La première question, c'est : où as-tu placé ce code ? Sur un bouton, sur une ligne de la table, ailleurs ? C'est important pour comprendre.
    Deuxième question : as-tu vu cette page de la documentation : Ruptures champ table ?
    Bonjour j'ai essayer les deux code sur bouton , en affichage de ligne de la table toujours le même résultat et j'ai bien regarder les tables rupture

  5. #5
    Membre à l'essai
    Jai même essayer avec ce code même résultat je sais pas ou j'ai louper qqe chose

    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
    POUR TOUTE LIGNE nLigne DE TABLE_REQ_LOGTERMINAL
    POUR nIndice = TableIndiceRupture(TABLE_REQ_LOGTERMINAL.RUPT_HautRupture2,nLigne) _À_ TableIndiceRupture(TABLE_REQ_LOGTERMINAL.RUPT_BasRupture2,nLigne)
     
     
    	SI EstPair(nIndice) ALORS
     
    		TABLE_REQ_LOGTERMINAL[nIndice].COL_DwInOutMode="Sortie"
     
     
    	SINON
     
    		TABLE_REQ_LOGTERMINAL[nIndice].COL_DwInOutMode="Entrée"
     
    	FIN
     
     
    FIN
     
    FIN

  6. #6
    Membre chevronné
    Citation Envoyé par moradsoft Voir le message
    Bonjour j'ai essayer les deux code sur bouton , en affichage de ligne de la table toujours le même résultat et j'ai bien regarder les tables rupture
    Et au niveau du code de fin de rupture ?
    Il y a peut être plus simple, mais ça tourne

  7. #7
    Membre à l'essai
    Citation Envoyé par Voroltinquo Voir le message
    Et au niveau du code de fin de rupture ?
    Comment ça

  8. #8
    Membre chevronné
    Tu veux que lorsque l'on arrive en fin de rupture, une colonne des ligne de la rupture ait alternativement la valeur entrée et sortie.
    Il faut donc appeler ta fonction lors de l'affichage de la rupture.
    Il y a peut être plus simple, mais ça tourne

  9. #9
    Membre à l'essai
    Citation Envoyé par Voroltinquo Voir le message
    Tu veux que lorsque l'on arrive en fin de rupture, une colonne des ligne de la rupture ait alternativement la valeur entrée et sortie.
    Il faut donc appeler ta fonction lors de l'affichage de la rupture.
    cette option n'existe pas sur les table , ta pu la trouver comment

  10. #10
    Membre confirmé
    Bonjour,
    Vous n'arrivez pas à expliquer ce que vous voulez. Alors, prenons quelques exemples.

    Exemple 1 : J'ai une rupture qui contient 2 lignes. Le code actuel vous donne ceci

    ligne 1 xxxxxxx Entrée
    ligne 2 xxxxxxx Sortie

    ça ne répond pas à votre besoin, peut être vous voulez le résultat suivant :
    ligne 1 xxxxxxx
    ligne 2 xxxxxxx Sortie

    Exemple 2 : J'ai une rupture qui contient 1 ligne et ça donne ceci
    ligne 1 xxxxxxx Entrée et ça vous convient.

    Je ne sais pas comment les lignes sont triées dans chaque rupture. Je suppose que vous avez au maximum 2 lignes par rupture. Une capture d'écran de votre table est souhaitable.

  11. #11
    Membre à l'essai
    Citation Envoyé par midou23175 Voir le message
    Bonjour,
    Vous n'arrivez pas à expliquer ce que vous voulez. Alors, prenons quelques exemples.

    Exemple 1 : J'ai une rupture qui contient 2 lignes. Le code actuel vous donne ceci

    ligne 1 xxxxxxx Entrée
    ligne 2 xxxxxxx Sortie

    ça ne répond pas à votre besoin, peut être vous voulez le résultat suivant :
    ligne 1 xxxxxxx
    ligne 2 xxxxxxx Sortie

    Exemple 2 : J'ai une rupture qui contient 1 ligne et ça donne ceci
    ligne 1 xxxxxxx Entrée et ça vous convient.

    Je ne sais pas comment les lignes sont triées dans chaque rupture. Je suppose que vous avez au maximum 2 lignes par rupture. Une capture d'écran de votre table est souhaitable.



    la table sans exécution du code mentionnée alors je veux qu'a chaque rupture il compte ligne de la rupture si il sont paire il fait le traitement de convertir entrée en sortie sinon il le laisse comme il est

  12. #12
    Rédacteur/Modérateur

    Je n'ai jamais utilisé de table avec rupture, donc je viens d'essayer.

    1. Je crée une table.
    2. Table remplie par programmation. J'ai cru comprendre que c'était ce que tu faisais, mais c'est probablement là qu'il y a un quiproquo.
    3. Comme décrit sur cette page de la documentation , dans le paragraphe 'Comment le faire', je clique sur le bouton adéquat, pour créer 1 rupture.
    4. Quand je reviens à l'affichage de ma fenêtre, Windev a ajouté 2 bandes grises au milieu de ma table.
    Si je clique sur ces bandes grises, je peux mettre ici le code qui va s'exécuter à chaque début de rupture, ou à chaque fin de rupture.

    Donc en principe, ça parait le meilleur emplacement pour mettre ton code (code corrigé bien sûr)
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  13. #13
    Membre chevronné
    Citation Envoyé par moradsoft Voir le message
    cette option n'existe pas sur les table , ta pu la trouver comment
    En lisant la doc :

    Les hauts et bas de rupture apparaissent en édition dans le champ Table.
    Pour modifier les caractéristiques de ces hauts et bas de rupture (nom, visibilité, couleur de fond, ...), il suffit d'afficher leur fenêtre de description (option "Description" du menu contextuel).
    Chaque haut et bas de rupture est associé à l'événement "Affichage d'une ligne". Cet événement est exécuté lorsqu'un nouveau haut ou bas de rupture est affiché dans le champ Table.
    Ces hauts et bas de rupture peuvent contenir des champs. Ces champs sont manipulables par programmation.
    Il y a des code de traitement au niveau des champs de rupture. Il y a d'ailleurs un exemple dans https://doc.pcsoft.fr/?1013305 qui illustre comment utiliser cet événement pour afficher un libellé dans la rupture.
    Il y a peut être plus simple, mais ça tourne

  14. #14
    Membre à l'essai
    Pardon j'ai mal compris vous réponses , j'ai déjà met ce code dans affichage ligne de rupture et ça rester le même problème , mon code contient surement une erreur que je parviens pas a localiser

  15. #15
    Membre chevronné
    A priori, tu veux que la première ligne de la rupture ait une colonne "Entrée" puis "Sortie" etc...
    Or, tu prend en compte la ligne "globale". nIndice commence à la première ligne de la rupture, au niveau de la table, donc ne prend pas en compte la rupture.
    Il faut faire un changement de référentiel en incluant une variable qui fasse référence à la rupture e.g. nNoLigneRupture.
    Le code devrait ressembler à ça :
    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
     
    nLigneTravail est entier
    nLigneRupture est un entier
    nIndiceHaut est un entier
    nIndiceBas est un entier
     
    nIndiceHaut=TableIndiceRupture(RUPT_HautProduit)
    nIndiceBas=TableIndiceRupture(RUPT_BasProduit)
    nLigneRupture=1
     
    POUR nLigneTravail = nIndiceHaut À nIndiceBas
    	SI EstImpair(nLigneRupture) ALORS
    		COL_IO[nLigneTravail]="Entrée"
    	SINON
    		COL_IO[nLigneTravail]="Sortie"
    	FIN
    	nLigneRupture++
    FIN

    Ce code est à placer dans la partie affichage bas de rupture

    Par ailleurs, tu n'as pas répondu à la question de mon post #3, s'agit-il d'une "vraie" table mémoire ou d'une table fichier chargée en mémoire ?
    Il y a peut être plus simple, mais ça tourne

  16. #16
    Membre confirmé
    Citation Envoyé par moradsoft Voir le message
    mon code contient surement une erreur que je parviens pas a localiser
    Le problème se situe dans cette partie du code.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    POUR Indice = DébutRupture À FinRupture
    	SI EstPair(Indice) ALORS
    		TABLE_REQ_LOGTERMINAL[Indice].COL_DwInOutMode="Sortie"
    	SINON
    		TABLE_REQ_LOGTERMINAL[Indice].COL_DwInOutMode="Entrée"
    	FIN
    FIN

  17. #17
    Membre à l'essai
    Citation Envoyé par Voroltinquo Voir le message

    Merci ça marche, c'est une vraie table mémoire

    Citation Envoyé par midou23175 Voir le message

    Oui je suis arrivé à trouver

###raw>template_hook.ano_emploi###