|
[Résolu] Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 22/07/2007 10:04
Post(s): 36
|
Bonjour, J'ai crée une table contenant une rubrique avec rupture et j'aimerai insérer une ligne aprés chaque rupture grace à un bouton Je ne sais pas comment faire pour créer une boucle car le code qui suit n'insère qu'une seule ligne aprés la première rupture lorsque qu'on clique sur le bouton. HLitPremier(EXPRESS_REQ_Requête1,MaRubrik)
TANTQUE Répétition <= ZR_EXPRESS_REQ_Requête1.MaRubrik
// Indice de la rupture courante
DébutRupture = ZoneRépétéeIndiceRupture(RUPT_HautRupture1,Répétition)
FinRupture = ZoneRépétéeIndiceRupture(RUPT_BasRupture1, Répétition)
// Parcours des répétitions de la rupture courante
POUR Indice = DébutRupture A FinRupture
FIN
// Insertion de la ligne
TableInsèreLigne(TABLE_EXPRESS_REQ_Requête1,Indice)
// Passage à la rupture suivante
Répétition = FinRupture + 1
HLitSuivant(EXPRESS_REQ_Requête1)
FIN
Contribution le : 14/08/2007 18:52
Edité par drcharly93 sur 21/8/2007 15:10:34
|
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 04/11/2003 13:31
De Belgique
Post(s): 42
|
Bonjour,
L'exemple fournis LST65\WD Tables Ruptures pourrait vous aidez a résoudre ce problème
Cordialement
Albert
Contribution le : 15/08/2007 20:15
|
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 22/07/2007 10:04
Post(s): 36
|
Bonjour, je vous remercie de m'avoir donné l'idée de regarder dans les exemples. Malheureusement je n'ai pas trouvé celui que vous m'avez cité car j'utilise la version 10 Express. Merci de votre réponse. Arsène
Contribution le : 16/08/2007 06:09
|
|
|
Re: Boucle et ruptures |
|
ChefDeProjet WDF ![](http://old.wdforge.org/uploads/rank3e8415f93aaa0.gif)
Inscrit: 29/05/2007 17:03
De Sassenage
Post(s): 180
|
bonjour,
l'exemple cité est contenu dan une LST (magazine trimestriel payant de windev) et non pas liré avec Windev.
Contribution le : 16/08/2007 16:07
|
_________________
be aware
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 22/07/2007 10:04
Post(s): 36
|
Bonjour, Je connaissais pas ce magazine. Il est surement interressant mais je trouve que son prix est vraiment trop élevé(Plus d'une centaine d'euros). C'est dommage. Je pense que je parviendrai quand même tôt ou tard à trouver la solution à mon problème sans avoir consulté cet exemple. Merci
Contribution le : 18/08/2007 14:26
|
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 04/11/2003 13:31
De Belgique
Post(s): 42
|
Bonjour,
Principes de la gestion de ruptures
La table utilisée doit être une table mémoire
Afin de pouvoir gérer les lignes spécifiques il faut ajouter une colonne cachée
COL_Rupture : identifiant de la rupture
Dans le cas d'une ligne de rupture cette colonne contiendra le non logique de la rupture et sera vide dans le cas d'une ligne normale
Ajout d'une rupture s'effectue en deux étapes - l'ajout du haut de rupture avant l'ajout des données de la rupture - l'ajout du bas de rupture après l'ajout des données de la rupture
Le traitement de gestion des ruptures est effectué dans la procédure de remplissage de la table
L'aspect graphique d'une rupture peut être matérialisé en modifiant l'aspect des lignes correspondantes par rapport au style général des données
nLgn est un entier // Création de la ligne de rupture nLgn = TableAjouteLigne( NomTable, sRupture , ....) // Propriétés de la rupture NomTable[nLgn]..CouleurFond = nCouleurFond NomTable[nLgn]..Hauteur = nHauteurLigne
En espérant vous avoir aidé
Cordialement
Albert
Contribution le : 19/08/2007 11:43
|
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 22/07/2007 10:04
Post(s): 36
|
Bonjour, je débute en programmation alors je n'utilisais pas la table mémoire. Je crois qu'il va me falloir utiliser une requête SQLTable dans ce cas. je devrai finir par y arriver, ce que je veux faire est basique il me semble. Je vous donnerai la solution d'ici peu j'espère. Merci beaucoup pour votre aide, A+ Arsène
Contribution le : 19/08/2007 15:19
|
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 04/11/2003 13:31
De Belgique
Post(s): 42
|
Bonjour,
Je ne pense pas que dans votre cas il soit nécessaire de recourir a une requête.
En effet, vous signalez dans votre post initial que votre fichier comporte une rubrique Rupture.
Il suffit donc de remplir la table en parcourant votre fichier de manière classique et de programmer la rupture sur base de la rubrique Rupture de votre fichier.
Supposons la rubrique Rupture de votre fichier
NomFichier.Rupture = "BasRupture"
// Remplir la table sRupt est une chaine
// Parcours classique du Fichier POUR TOUT NomFichier
sRupt = NomFichier.Rupture
// Rubriques du fichier que vous voulez afficher TableAjouteLigne(NomTable, "", Rubq1, Rubq2,.... )
// Rupture - Ajouter une ligne vierge SI sRupt = "BasRupture" ALORS TableAjouteLigne(NomTable, sRupt) FIN FIN
Cordialement
Albert
Contribution le : 19/08/2007 16:06
|
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 22/07/2007 10:04
Post(s): 36
|
Bonsoir, merci de vos réponses, je vais tacher de trouver la solution grace à vos conseil. En attendant, j'ai procédé autrement en utilisant une table mémoire que j'ai programmé comme suit : FichierVersTableMémoire(TABLE_Table1, "EXPRESS_REQ_Requête1")
clc_SauveChaine est une chaîne
clc_chaine est une chaîne
chrubrik2 est une chaîne
chrubrik3 est une chaîne
TableSupprimeTout(TABLE_Table1)
HLitPremier(EXPRESS_REQ_Requête1,Rubrik1)
TANTQUE PAS HEnDehors(Rubrik1)
clc_SauveChaine=EXPRESS_REQ_Requête1.Rubrik1
clc_chaine=EXPRESS_REQ_Requête1.Rubrik1
chrubrik2=EXPRESS_REQ_Requête1.Rubrik2
chrubrik3=EXPRESS_REQ_Requête1.Rubrik3
TANTQUE clc_SauveChaine = clc_chaine ET PAS HEnDehors(EXPRESS_REQ_Requête1)
TableAjouteLigne(TABLE_Table1,clc_chaine,chrubrik2,chrubrik3)
HLitSuivant(EXPRESS_REQ_Requête1,Rubrik1)
clc_chaine=EXPRESS_REQ_Requête1.Rubrik1
chrubrik2=EXPRESS_REQ_Requête1.Rubrik2
chrubrik3=EXPRESS_REQ_Requête1.Rubrik3
FIN
TableAjoute(TABLE_Table1,"rupture")
clc_SauveChaine=EXPRESS_REQ_Requête1.Rubrik1
FIN
ça fonctionne bien lors du test, mais windev dit que les codes ne fonctionneront pas à l'exécution. C'est surement à la fin qu'il me faudrait rajouter quelque chose. Je vous remercie de votre aide et je posterai la solution dés que je l'aurai trouvé. A+ Cordialement, Arsène
Contribution le : 19/08/2007 19:05
|
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 04/11/2003 13:31
De Belgique
Post(s): 42
|
Bonsoir,
Le moins que l'on puisse dire c'est que votre boucle présente des anomalies et n'est certainement pas cohérente
Les variables clc_SauveChaine est une chaîne clc_chaine est une chaîne
reprennent toutes les deux la même rubrique donc les mêmes valeurs
clc_SauveChaine = EXPRESS_REQ_Requête1.Rubrik1 clc_chaine = EXPRESS_REQ_Requête1.Rubrik1
puis vous effectuez un test sur ces variables
TANTQUE clc_SauveChaine = clc_chaine
Pourquoi puisque a l'évidence, ces deux variables seront toujours a l'indentique dans la mesure ou elles font référence à la même rubrique donc la même valeur
Quant a la suite du test
TANTQUE clc_SauveChaine = clc_chaine ET PAS TableAjouteLigne(TABLE_Table1,clc_chaine,chrubrik2,chrubrik3)
cela ne saurait pas fonctionner correctement et a mon avis n'a pas de sens car TableAjouteLigne() renvoi l'indice de la ligne ajoutée ou -1 en cas d'erreur
Il faut impérativement définir une condition cohérente
L'aide en ligne précise Condition "TANTQUE"
TANTQUE <Condition> <Action si condition vraie> FIN
Cordialement
Albert
Contribution le : 19/08/2007 20:57
|
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 04/11/2003 13:31
De Belgique
Post(s): 42
|
Bonsoir,
Excusez moi,mais j'ai omis de vous rappeler
Dans une instruction TANTQUE, l'expression est évaluée à chaque début du bloc d'instructions.
Tant que l'expression de condition est vraie, le traitement boucle.
Il y a sortie du bloc d'instructions lorsque l'expression de condition est fausse
Traduisez votre condition en langage courant et jugez de sa cohérence
Bon développement
Albert
Contribution le : 19/08/2007 21:10
|
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 04/11/2003 13:31
De Belgique
Post(s): 42
|
Bonjour, Voici le code d'une procédure qui répond a votre recherche et qui fonctionne correctement L'ajout d'une ligne vierge dans une table mémoire après un groupe d'enregistrements répondant a un même critère Description du testNom du Fichier : Contacts Nom des rubriques : Nom, Ville Rubrique clé : Ville
// Initialisation des variables
sLocalité est une chaîne
nLgn est un entier
HLitPremier(Contacts,Ville)
sLocalité = Contacts.Ville
// Parcours du fichier
TANTQUE PAS HEnDehors(Contacts)
HLitRecherchePremier(Contacts, Ville, sLocalité, hGénérique)
TANTQUE HTrouve(Contacts)
// Ajout dans la table de l'enregistrement trouvé
TableAjouteLigne(TABLE_Contacts, Contacts.Nom, Contacts.Ville)
HLitSuivant(Contacts,Ville)
FIN
// Ajout d'une ligne vierge < Rupture >
nLgn = TableAjouteLigne(TABLE_Contacts)
// Propriétés de le ligne < Couleur/Hauteur >
TABLE_Contacts[nLgn]..CouleurFond = RVB(205, 230, 255)
TABLE_Contacts[nLgn]..Hauteur = 20
// Condition suivante
sLocalité = Contacts.Ville
FIN
Cordialement Albert
Contribution le : 20/08/2007 11:46
Edité par drcharly93 sur 20/8/2007 12:22:08
|
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 22/07/2007 10:04
Post(s): 36
|
Merci beaucoup de votre aide. Je suis arrivé au résultat que je souhaitais à travers 2 méthodes dont la votre. Les voici : La 1ère : // Insertion d’une ligne de rupture entre chaque //rupture d’une table mémoire :
//(1ère Méthode) :
//(Code à insérer dans la partie « Initialisation » du code de la table)
FichierVersTableMémoire(TABLE_Table1, "EXPRESS_REQ_Requête1")
clc_SauveChaine est une chaîne
clc_chaine est une chaîne
chrubrik2 est une chaîne
chrubrik3 est une chaîne
TableSupprimeTout(TABLE_Table1)
HLitPremier(EXPRESS_REQ_Requête1,Rubrik1)
TANTQUE PAS HEnDehors(Rubrik1)
clc_SauveChaine=EXPRESS_REQ_Requête1.Rubrik1
clc_chaine=EXPRESS_REQ_Requête1.Rubrik1
chrubrik2=EXPRESS_REQ_Requête1.Rubrik2
chrubrik3=EXPRESS_REQ_Requête1.Rubrik3
TANTQUE clc_SauveChaine = clc_chaine ET PAS HEnDehors(EXPRESS_REQ_Requête1)
TableAjouteLigne(TABLE_Table1,clc_chaine,chrubrik2,chrubrik3)
HLitSuivant(EXPRESS_REQ_Requête1,Rubrik1)
clc_chaine=EXPRESS_REQ_Requête1.Rubrik1
chrubrik2=EXPRESS_REQ_Requête1.Rubrik2
chrubrik3=EXPRESS_REQ_Requête1.Rubrik3
FIN
TableAjoute(TABLE_Table1,clc_SauveChaine)
clc_SauveChaine=EXPRESS_REQ_Requête1.Rubrik1
FIN
La 2ème : //Insertion d’une ligne de rupture entre... chaque rupture d’une table mémoire :
//(1ère Méthode) :
//(Code à insérer dans la partie « Initialisation » du code de la table)
FichierVersTableMémoire(TABLE_Table1, "EXPRESS_REQ_Requête1")
// Initialisation des variables
Chrubrik1 est une chaîne
Chrubrik2 est une chaîne
Chrubrik3 est une chaîne
nLgn est un entier
TableSupprimeTout(TABLE_Table1)
HLitPremier(EXPRESS_REQ_Requête1,RUBRIK1)
Chrubrik1 = EXPRESS_REQ_Requête1.RUBRIK1
Chrubrik2 = EXPRESS_REQ_Requête1.RUBRIK2
Chrubrik3 = EXPRESS_REQ_Requête1.RUBRIK3
// Parcours du fichier
TANTQUE PAS HEnDehors(EXPRESS_REQ_Requête1)
HLitRecherchePremier(EXPRESS_REQ_Requête1,RUBRIK1,Chrubrik1,hGénérique)
TANTQUE HTrouve(EXPRESS_REQ_Requête1)
// Ajout dans la table de l'enregistrement trouvé
TableAjouteLigne(TABLE_Table1,Chrubrik1,Chrubrik2,Chrubrik3)
HLitSuivant(EXPRESS_REQ_Requête1,Chrubrik1)
Chrubrik2 = EXPRESS_REQ_Requête1.RUBRIK2
Chrubrik3 = EXPRESS_REQ_Requête1.RUBRIK3
FIN
// Ajout d'une ligne vierge < Rupture >
nLgn = TableAjouteLigne(TABLE_Table1,Chrubrik1,Chrubrik2,Chrubrik3)
// Propriétés de le ligne < Couleur/Hauteur >
TABLE_Table1[nLgn]..CouleurFond = RVB(205, 230, 255)
TABLE_Table1[nLgn]..Hauteur = 20
// Condition suivante
Chrubrik1 = EXPRESS_REQ_Requête1.RUBRIK1
FIN
J'aurai souhaité programmé la table mémoire en utilisant une zone répétée avec rupture mais c'est compliqué et je n'ai pas réussi à trouver le code. Je vous remercie beaucoup pour votre aide Cordialement, Arsène
Contribution le : 20/08/2007 20:25
|
|
|
Re: Boucle et ruptures |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 04/11/2003 13:31
De Belgique
Post(s): 42
|
Bonjour,
Corrigez votre Méthode n° 1
> TANTQUE PAS HEnDehors(Rubrik1)
par : TANTQUE PAS HEnDehors(EXPRESS_REQ_Requête1)
Maintenant si j'avais un conseil a vous donner comme vous vous présentez < je débute en programmation > ce serait d'utiliser des termes plus vivants, conviviales qui faciliteraient grandement la lecture des programmes
Nom Fichier : "EXPRESS_REQ_Requête1" ???
a moins qu'il ne s'agisse d'une requête utilisant une source de données dans ce cas par exemple : sdClient < pour source de données Clients >
Avec un fichier nommé : Contacts,Clients,Fournisseurs,Commandes,Factures,LigneFact,LigneCd, CPostal on peut déjà simaginer les rubriques qu'il doit contenir
Nom des rubriques : Rubrik1, Rubrik2, Rubrik3 ???? Que représente elle ? quel type ? : chaine, date, entier, reels, boleen ....
alors que : Nom,Prénom,Adresse,Ville,Département,Pays,NoTel,Fax,Gsm,DateFact,Montant,Tva ... est bien plus significatif a tous points de vues
Meme chose pour les noms de variable clc_SauveChaine, clc_chaine, chrubrik2, chrubrik3 ???
bien plus compréhensible surtout si vous les préfixés comme il est conseillé voir dans le menu : Projet\ Charte de programmation\Type de variable
sNom, sAdresse, sVille, dDate, rMontant, nLgn, nDoc, rTaux, bCond ...
ces variables sont plus conviviales et le préfixe vous renseigne sur sa nature s=chaine - n=Entier - r=Reel - d=date - b=booleen - sd=source de données
Les champs : saisie : SAI_Nom Libelle : LIB_Nom Table : TABLE_Clients
Pensez également a insérer des commentaires dans votre programme, ils vous seront très utiles si vous devez revenir un jour sur ces programmes dans des mois ou des années
En rendant vos programmes plus lisibles non seulement vous vous rendrez services a vous même mais lorsque vous posterez un message sur un forum cela facilitera bien plus sa comphéhetion
Si vous avez remarqué votre sujet : Boucle et ruptures a été vus 245 fois et combien de réponse
Je ne vous cacherais pas que personnellement ayant compris votre demande, je me suis plus attaché a trouver un exemple concret pour vous aider que d'analyser votre programmation
Si vous voulez me contacter en privé je pourrais également vous communiquer des sites qui pour pourraient vous être très utiles dans votre progression en programmation.
Surtout n'allez pas vous imaginer que je suis un professionnel, non simplement un pensionné du 4eme age autodidacte en informatique qui comble ses temps libres
Cordialement
Albert
Contribution le : 21/08/2007 15:48
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|