[Résolu] Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
ChefDeProjet WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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 test

Nom 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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Boucle et ruptures
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


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.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2