|
Problème d'une conception de nomenclature multi-niveaux |
Started by Manu-dev, Jun., 05 2013 1:49 PM - 8 replies |
| |
| | | |
|
| |
Posted on June, 05 2013 - 1:49 PM |
Bonjour à toutes et à tous,
Je débute avec Windev à la demande de mon employeur sur une version 14 qui traînait dans une armoire (à croire que mon prédécesseur à déjà tâté le terrain). Je recherche à créer une nomenclature multi-niveaux avec une table hiérarchique. Pour cela j'ai les éléments suivants : - 1 fichier "nomenclature" qui contient trois champs : ArticleParent(tnomq_artm), ArticleEnfant(tnomq_arte), Qte(tnomq_qte) - une fenêtre simple avec un champ de saisie SAI_refmachine et un bouton pour lancer la génération - une requête SELECT qui va chercher tous les ArticleEnfant correspondant à un ArticleParent défini en paramètre.
En exemple voici un début de contenu du fichier Nomenclature : VELO | CADRE | 1 VELO | ROUE | 2 VELO | PHARE | 1 CADRE | TUBE | 4 CADRE | ECROU | 6 PHARE | COQUE | 1 ECROU | KIT GRAISSAGE | 1
Mais je souhaite obtenir dans une table hiérarchique Windev une nomenclature multiniveaux qui afficherait : VELO | CADRE -|TUBE -|ECROU --|KIT GRAISSAGE
ROUE PHARE -|COQUE
Je pense stopper ma nomenclature dans la limite de 10 niveaux Coté code j'ai l'idée d'appeler la requete sur le niveau 0 et d'inscrire le résultat dans un tableau. Je teste si le tableau contient des éléments et je refais la requete pour chaque élément du tableau que je stocke ainsi de suite dans un autre tableau. Si le tableau ne contient plus d'éléments je remonte d'un niveau et je recommence ma requete...
En code j'ai déjà commencé ceci :
tabNiv0 est un tableau de chaînes tabNiv1 est un tableau de chaînes tabNiv2 est un tableau de chaînes tabNiv3 est un tableau de chaînes tabNiv4 est un tableau de chaînes tabNiv5 est un tableau de chaînes tabNiv6 est un tableau de chaînes tabNiv7 est un tableau de chaînes tabNiv8 est un tableau de chaînes tabNiv9 est un tableau de chaînes tabNiv10 est un tableau de chaînes
TableauAjouteLigne(tabNiv0,SAI_refmachine) TableAjouteFils(TABLEH_TableHierarchique1,0,SAI_refmachine)
HExécuteRequête(NomenclatureNiv1,hRequêteInterruptible,SAI_refmachine)
SI HLitPremier(NomenclatureNiv1) = Faux ALORS Info("Votre ensemble ne comporte pas de sous-ensembles") RAZ() SINON TANTQUE HTrouve(NomenclatureNiv1) ALORS TableauAjouteLigne(tabNiv1,NomenclatureNiv1.tnomq_arte) HLitSuivant(NomenclatureNiv1) FIN FIN
:( mais est ce que c'est une bonne méthode ou existe t'il un exemple LST ou une méthode pour créer des nomenclatures multi-niveaux en windev ? Là dessus Google est pas trop notre ami, je tombe sur beaucoup de questions mais pas de réponse...
Je remercie par avance chacun d'entre vous pour une éventuelle idée à ce sujet ou une éventuelle piste à explorer. |
| |
| |
| | | |
|
| | |
| |
Posted on June, 05 2013 - 2:44 PM |
salut ! si tu utilise un table hiérarchique, tu peux lister l'ensemble des données de ton fichier dans la table.
ex:
nNiveau est un entier
pour TOUT nomenclature
nNiveau = TableChercheFils(TABLEH_Hierarchique,nomenclature.tnomq_artm)
SI nNiveau = -1 ALORS
TableAjoute(TABLEH_Hierarchique, nomenclature.tnomq_artm) nNiveau = TABLEH_Hierarchique..Occurrence
FIN
TableAjouteFils(TABLEH_Hierarchique, nNiveau, nomenclature.tnomq_arte)
FIN
|
| |
| |
| | | |
|
| | |
| |
Posted on June, 05 2013 - 3:20 PM |
complément d'unformation :
pour gérer x niveaux, il te suffit d'effectuer la recherche de parent sur les x niveaux et pas seulement sur le niveau 1 (recherche par défaut)
nX est un entier = 10
pour i = 1 à nX
nNiveau = TableChercheFils(TABLEH_Hierarchique,nomenclature.tnomq_artm,i)
SI nNiveau <> -1 SORTIR
FIN |
| |
| |
| | | |
|
| | |
| |
Registered member 5 messages |
|
Posted on June, 10 2013 - 10:59 AM |
oki Marco mille fois merci ! Je teste ton idée et je fais un retour sur le forum.
-- Développeur Windev (en herbe) sur WD14 |
| |
| |
| | | |
|
| | |
| |
Registered member 5 messages |
|
Posted on June, 10 2013 - 11:30 AM |
Aïe je reviens sur le sujet j'ai testé ton code Marco sur le projet mais ça me fait une boucle infinie et rien ne s'affiche.... En fait mon fichier Nomenclature contient les nomenclatures de tous les produits de l'usine donc à peu près 200 000 lignes. J'effectue déjà un premier tri au niveau 0 qui me donne les ensembles du premier niveau. En d'autres mots je patauge dans les lignes de codes et j'arrive pas à trouver de solutions...
>> Marco, dans quel élément tu entres ton code ? L'initialisation de la table hiérarchique ou un bouton de génération ?
-- Développeur Windev (en herbe) sur WD14 |
| |
| |
| | | |
|
| | |
| |
Posted on June, 10 2013 - 2:58 PM |
Bonjour, je rentre mon code dans un bouton.
normalement, tu ne devrait pas avoir de boucle infini puisque ton fichier est défini et ton nombre de niveau également.
Voci un nouvelle exemple plus complet. Mais identique au précédent. J'ai construit un tableau avec les données que tu as fourni en exemple pour simuler ton fichier HF.
tu peu placer ce code dans un bouton ou le placer dans une procédure exécuté à l'initialisation de ta table.
En premier lieu fait un test avec un bouton.
tabNomenclature est un tableau de chaînes TableauAjoute(tabNomenclature,"VELO"+TAB+"CADRE"+TAB+"1") TableauAjoute(tabNomenclature,"VELO"+TAB+"ROUE"+TAB+"2") TableauAjoute(tabNomenclature,"VELO"+TAB+"PHARE"+TAB+"1") TableauAjoute(tabNomenclature,"CADRE"+TAB+"TUBE"+TAB+"4") TableauAjoute(tabNomenclature,"CADRE"+TAB+"ECROU"+TAB+"6") TableauAjoute(tabNomenclature,"PHARE"+TAB+"COQUE"+TAB+"1") TableauAjoute(tabNomenclature,"ECROU"+TAB+"KIT GRAISSAGE"+TAB+"1")
nNiveau est un entier nX est un entier = 10 sParent est une chaîne sFils est une chaîne nValeur est un entier nIndice est un entier
POUR TOUT sEnregistrement DE tabNomenclature
sParent = ExtraitChaîne(sEnregistrement,1,TAB) sFils = ExtraitChaîne(sEnregistrement,2,TAB) nValeur = ExtraitChaîne(sEnregistrement,3,TAB)
POUR nIndice = 1 A nX
nNiveau = TableChercheFils(TABLEH_SansNom1.COL_Arbre,sParent,Vrai,nIndice)
SI nNiveau <> -1 SORTIR
FIN
SI nNiveau = -1 ALORS
TableAjouteFils(TABLEH_SansNom1,Null, sParent)
nNiveau = TABLEH_SansNom1..Occurrence FIN
TableAjouteFils(TABLEH_SansNom1, nNiveau, sFils,nValeur) FIN
|
| |
| |
| | | |
|
| | |
| |
Registered member 5 messages |
|
Posted on June, 10 2013 - 3:41 PM |
:merci: Superbe ! J'ai déjà testé avec un bouton sur le tableau de test puis sur le fichier Nomenclature ça fonctionne nickel.
Merci Marco !
-- Développeur Windev (en herbe) sur WD14 |
| |
| |
| | | |
|
| | |
| |
Posted on October, 16 2017 - 7:15 PM |
Bonjour Par contre le code ne fonctionne pas si les liens ne sont pas dans le bon ordre |
| |
| |
| | | |
|
| | |
| |
Posted on April, 22 2022 - 6:41 PM |
i:) bonjour mon ami Je cherche une methode de facturation d'1 produit composé au momment de vente P.Composé =Velo Composants : HDD,RAM,Carte mere,Lecteur,... Lors je facture l'article Composé(Ordinateur) je veux bien que la sortie des qtés touche uniquement le stock des composants
Sachant bien au moment des entrées des qtés, j'ai saisi uniquement le stock des composants et non de P.Composé |
| |
| |
| | | |
|
| | | | |
| | |
|