Aller au contenu
  • 0
Aquirio

Identifier les valeurs d'un champs pour les répartir par famille

Question

Bonjour,

Voici ma question :
Je dispose d'une table "stock".
Celle ci contient notamment deux champs : "Identifiant" et "Configuration". "Identifiant" est la clef unique et "Configuration" contient une suite de codes correspondants aux différentes options du véhicule séparés par un espace.

J'ai créé plusieurs tables, une pour chaque famille d'équipements : "Modèle", "Motorisation", "Finition", "Couleur", "Options" ...
Celles ci contiennent notamment deux champs : "Code" et "Libellé".

Maintenant voici le process que je souhaite mettre en place :
1. Importer le fichier "stock" avec l'identifiant et le champ contenant l'ensemble des codes (séparés par des espaces)
2. Identifier les codes depuis le champ "configuration" et répartir ceux ci dans de nouveaux champs "Modèle", "Motorisation", ...

Identifiant | code modele | libelle modele | code couleur | libelle couleur | Code option1 Code option2 Code option3 | Libellé de l'option1 Libellé de l'option2 Libellé de l'option3

 

Ce que j'ai déjà réussi à faire :
1. Convertir les espace en pipe
2. Avec la mise en place d'une liaison entre les tables "Stock" et les tables 
"Modèle", "Motorisation", ... identifier les codes correspondants et les afficher dans un champ spécifique à chaque famille

Mais :
Cela fonctionne bien pour les familles ou un seul code est 
identifiable. Par exemple le modèle ou la finition. Par contre pour la liste des options, le champs ne m'affiche que le premier de la liste et pas les suivants.
D'ailleurs si j'affiche le contenu de la table sous forme de tableau j'ai :
ligne 1 : Identifiant | code modele | libelle modele | code couleur | libelle couleur | Code option (la première de la liste) | Libellé de l'option
ligne 2 :      vide       |     vide            |         vide           |       vide           |        vide           | Code option (la deuxième de la liste) | Libellé de l'option
ligne 3 :      vide       |     vide            |         vide           |       vide           |        vide           | Code option (la troisième de la liste) | Libellé de l'option 

Pouvez vous m'apporter votre expertise pour résoudre ce problème ?
Merci !

Partager ce message


Lien à poster
Partager sur d’autres sites

14 réponses à cette question

Messages recommandés

  • 0

Bonjour,
Le champ "Configuration" de "Stock" contient-il toujours la même série d'éléments ? 
Dit autrement, vous avez toujours ABCDE… (que A, B, C, … soient des codes ou des libellés) ou vous avez un coup ABCDE, un coup ACE, un coup BCD…

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

Non chaque configuration est différente d'un véhicule à l'autre.
Le nombre de codes ainsi que leur valeurs varient.

Nous aurons des véhicules avec les codes AHE CD3 BEZ et d'autres avec AHE RTY IJY

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Mouais, c'aurait été trop simple.
Et y a t'il des codes identiques entre les différentes famille d'éléments ou bien un code donné ne correspond qu'à un élément précis d'une famille elle aussi bien précise ? 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Chaque code est unique et correspond à une seule famille.

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Ben alors ça doit être jouable.

1. Une rub. globale.
2. Lier cette rub. aux différentes tables des familles : Globale = Id.
3. Un script avec une boucle qui passe en revue les valeurs de la liste et leur lien éventuel avec une des familles. Qqchose comme :

N'afficher que la fiche en cours
Définir variable ($Liste ; Substituer ( RubConfiguration ; " " ; "¶" )
Définir variable [$NbValeursListe ; Nombre de valeurs de $Liste]
Définir variable [$Compteur ; 1]
Boucle
Fin de boucle si $Compteur = $NbValeursListe + 1
Definir rubrique ( globale ; ValeursExtraites ( $Liste ; $Compteur ; 1 ) //À chaque boucle on renseigne la globale successivement avec les ≠ valeurs de la liste
Si (1 enregistrement lié à la globale avec la famille Modèle )
Définir rubrique ( NouveauChampModele ; globale )
Fin de si
Si (1 enregistrement lié à la globale avec la famille Motorisation )
Définir rubrique ( NouveauChampMotorisation ; globale )
Fin de si

Définir variable [$Compteur ; $Compteur + 1]
Fin de boucle

Technique "bourrin" à vérifier/compléter, mais je n'ai pas mieux…
 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour Christophe,

Passer par un script est envisageable mais par contre je ne suis pas sur d'avoir les compétences pour cela.

Ce qui est ennuyeux c'est que j'arrive bien à faire cette distinction par famille à l'exception des options du fait qu'il y ait plusieurs codes qui doivent se suivre dans le meme champ.
Toutefois peut etre est ce seulement une question d'affichage. Je m'explique : je vous joins une impression écran de l'affichage fiche et en tableau et une autre de l'export CSV. L'objectif est d'utiliser FM pour regrouper, retraiter et exporter l'information.

Vue export CSV.png

Vue FM fiche.png

Vue FM tableau.png

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,
Je ne comprend pas ce qu'il faut faire des code d'options.
Soit votre exemple Liste_codes : 008 YYF TBB DW9 VV2 VAG… Faut-il ventiler les options VLB, VTB, VUB et VUM dans 4 champs de l'enregistrement, ou (comme je crois le comprendre) avoir 4 enregistrements (et donc, ici, en créer 3) chacun avec un seul champ "Option" rempli avec l'un des codes options ?
Ceci dit, dans les 2 cas, une deuxième boucle, à l'intérieur de la première, doit permettre de résoudre la question.

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

Alors en fait, à l'import, j'ai un champ avec tout les codes sans distinction qu'il s'agisse du code identifiant le modèle, la finition, la carrosserie ... ou la liste des options.
J'ai créé dans FM une table pour chaque catégorie (modèle, finition, carrosserie, options ...) qui contient la liste des codes correspondant à chacune.

Par exemple dans la table "couleurs" j'ai les entrées suivantes :
Code : VBA
Libellé : Golden bronze
et
Code : VBN
Libellé : Rouge arizona
etc...

Ainsi en reprenant chaque code de mon champ importé je suis en mesure d'identifier la couleur. Si dans le lot j'ai "VBA" alors je sais que la couleur est "Golden Bronze".
Donc à partir de la liste des codes je peut retrouver l'ensemble de la configuration du véhicule.
J'arrive bien à faire cette identification tant que je n'ai qu'un code pour chaque famille. Par exemple, je n'ai qu'un seul code correspondant à une couleur donc j'arrive à l'identifier comme une couleur et à créer un champ "code couleur" avec la valeur "VBA" et un champ "Libellé couleur" avec la valeur "Golden bronze".
Par contre en ce qui concerne les options il y a plusieurs codes à prendre en compte car on a par exemple un toit ouvrant ET un gps ET un radar de recul ... Dans ce cas j'identifie bien le premier équipement mais les autres n'apparaissent pas dans le même champ mais sur la ligne suivante (par exemple VLB : camera de recul qui est sur la ligne du véhicule mais les autres options sont sur les lignes suivantes : VTB VUB VUM ...).

Je souhaiterais que l'ensemble des codes soient dans le même champ séparés par un pipe :

Codes_options : VLB|VTB|VUB|VUM
Libellés options : camera de recul|aide stationnement arrière|pack confort|pack hiver

 

 

 

 


 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonsoir,
Alors qqchose comme ça ? Une seule boucle où l'on passe en revue tous les codes pour les mettre dans les champs correspondants (en concaténant pour les options).

Ventiler.fmp12.zip

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Alors là bravo !

Il me reste à comprendre le code et le reproduire dans ma BdD ...
Je vous tiens au courant !

Un grand merci !

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

J'ai réussi à reprendre et adapter le fichier exemple fourni.
Merci à Christophe (Puimoisson04) !

J'ai juste 2 questions :
Pourquoi avoir dupliqué les tables contenant les codes et libellés et ne pas avoir créer de liaisons avec les tables d'origine ?
Est il possible de lancer le script pour l'ensemble de la base et non fiche par fiche ?

Encore un grand merci pour cette aide.

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,
Je n'ai pas dupliqué les tables, mais les occurrences de table (OT). Une table est en quelque sorte le "dur", c.à.d. les données enregistrées. Ces données existent qu'on les utilise ou non, qu'elles figurent dans un modèle ou non (directement ou liées), que la table ait une occurrence ou non dans le graphe de liens. Une occurrence de table est un accès à ces données de la table dans un contexte donné, défini par l'occurrence de table sur laquelle est basé le modèle et les liens vers d'autres tables établis depuis l'occurrence de table à la base du modèle.
En pratique, dans un cas de liens simples comme pour votre problème, on peut n'utiliser qu'une OT pour chaque table dans le graphe des liens et lier ces OT entre-elles. Mais à l'usage, perso., pour que ce soit plus simple à mettre en place (et surtout à comprendre quand on regarde le graphe ou que l'on veut modifier un modèle des mois après l'avoir mis en place et que l'on ne se souvient plus à quoi correspondent les liens), je préfère faire une chaîne de liens par modèle (ce que l'on appelle le sytème ancre - pour l'OT sur laquelle est basée le modèle -, bouées - pour les OT liées à l'ancre).

Oui, on peut appliquer le script à toute la table concernée en incluant le script actuel dans une autre boucle du style :

Rechercher les enregistrements à traiter ou Afficher tous les enregistrements.
Afficher enregistrement [Premier]
Boucle
Exécuter le script de ventilation
Activer enregistrement suivant [avec l'option Sortie après dernier]
Fin de boucle

Vite dit sans trop réfléchir, à tester et compléter éventuellement…

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour Christophe,

Je me suis en effet mal exprimé, je parlais effectivement des OT.
Je comprends mieux le recours à cette technique dans le cas qui me concerne. La fonction est liée à un ensemble d'OT est la maintenance en est donc simplifiée.

Pour ce qui est du script j'essaye d'intégrer les fonctions que vous avez cité. Le résultat n'est pas probant pour le moment mais je m'accroche ...

Un grand merci pour votre aide.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×