Gestion de produits composés / composants

Le
elxav
Bonjour la communauté,

Un truc à faire fumer les neurones ;-)

J'ai une table classique de gestion de liens produits Composés/
Composants, avec les champs suivants:
IdProduitComposé, IdProduitsComposant, NbComposant.

Soit par exemple,

IdProduitComposé, IdProduitsComposant, NbComposant
P1 P2 2
P1 P3 1
P2 P4
2
P3 -
-
P4 P5 3

Dans cette liste:
P2 est un composant, lui même composé
P2 est composant de plusieurs produits

P1 et P4 sont des Composés
P3 est un produit simple (pas de composants)

A partir de cette liste de produits à traiter, je souhaite produire
une liste ordonné de façon à ce qu'un produit ne soit
"traité" (manuellement par un utilisateur) qu'une fois.

La liste que je souhaite obtenir:

P4 P5 3
P2 P4
2
P3 -
-
P1 P2 2
P1 P3 1


Comment, par un SQL, ou par programmation sortir une liste ordonnée
comme ci-avant?

D'avance merci pour vos lumières.
Cordialement.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michel__D
Le #16597851
Bonjour,

Heu ... je ne sais pas si j'ai tout compris, mais essaye avec ce SQL.

SELECT *
FROM LaTable
ORDER BY CLng(Right([IdProduitComposé],1))
*Nz(NbComposant,1) DESC;


PS:Il faudrait pas plutôt avoir l'ordonnancement ci-dessous ?

IdProduitComposé, IdProduitsComposant, NbComposant
P4 P5 3
P2 P4 2
P1 P2 2
P3 - -
P1 P3 1


Bonjour la communauté,

Un truc à faire fumer les neurones ;-)

J'ai une table classique de gestion de liens produits Composés/
Composants, avec les champs suivants:
IdProduitComposé, IdProduitsComposant, NbComposant.

Soit par exemple,

IdProduitComposé, IdProduitsComposant, NbComposant
P1 P2 2
P1 P3 1
P2 P4
2
P3 -
-
P4 P5 3

Dans cette liste:
P2 est un composant, lui même composé
P2 est composant de plusieurs produits

P1 et P4 sont des Composés
P3 est un produit simple (pas de composants)

A partir de cette liste de produits à traiter, je souhaite produire
une liste ordonné de façon à ce qu'un produit ne soit
"traité" (manuellement par un utilisateur) qu'une fois.

La liste que je souhaite obtenir:

P4 P5 3
P2 P4
2
P3 -
-
P1 P2 2
P1 P3 1


Comment, par un SQL, ou par programmation sortir une liste ordonnée
comme ci-avant?

D'avance merci pour vos lumières.
Cordialement.
elxav
Le #16598141
Bonjour Michel,

Merci pour ta réponse, mais elle ne convient pas :-/

Ceci étant, je me suis sans doute mal exprimé:
1) P1, P2, etc représente des Codes Produits (valeurs numériques),
j'avais mis cette codif pour ne pas "noyer" les données.
2) Le champ NbComposant indique en fait le nombre d'unités pour un
produit Composant dans son composé.

Plus précisément, quand je note:

IdProduitComposé, IdProduitsComposant, NbComposant
P1 P2 2
P1 P3 1

Il faut lire: Le Produit P1, est composé de 2 fois le Produit P2, et 1
fois le Produit P3 (soit 3 unités dans le Composé).

L'ordonnancement que j'indique est bien ce que je recherche.

Exemple réel:

Code Code Qté UC
Produit Produit
Composant
485 500
49 453 485 500 1
302 046 485 500 1
499 914 485 500 1

485 527
485 500 485 527 12
514 382 485 527 26
514 415 485 527 24
514 452 485 527 16
514 522 485 527 12
514 566 485 527 24

514 382
302 046 514 382 3

514 415
499 914 514 415 3

Dans cette liste, le Produit 485 500 est un Composant, lui même
composé.
Sa description apparait AVANT la description du Produit Composé (485
527) dans lequel il se trouve (Liste triée, lors de l'extraction des
infos, sur le Code Produit Composé, puis sur le Code Produit
Composant).
Idem pour le 514 382, lui même Composé, MAIS, sa description apparait
APRES la description du Produit Composé dans lequel il se trouve.
Et c'est là mon problème.

Les Composants doivent être placés quelque part AVANT le premier
Composé dans lequel il sont inclus.

Suis-je plus clair? :-/
Peut être devrais-je modifier la façon dont j'extrait mes données?

Pour l'instant, voici comment je procède:
A partir d'une liste de produits à traiter (trier sur le code produit)
Pour chaque Produit à traiter
Extraction des infos du Produit
Ecriture dans un fichier de travail
Pour chaque Composant du Produit en cours (si composant il y a)
Extraction des infos du Produit
Ecriture dans un fichier de travail
Fin Pour
Fin Pour

Si quelqu'un est arrivé jusqu'ici (lol), chapeau (re lol).

D'avance merci pour toutes les idées qui vous viendraient.
Cordialement.

On 22 août, 09:30, "Michel__D" wrote:
Bonjour,

Heu ... je ne sais pas si j'ai tout compris, mais essaye avec ce SQL.

SELECT *
FROM LaTable
ORDER BY CLng(Right([IdProduitComposé],1))
*Nz(NbComposant,1) DESC;

PS:Il faudrait pas plutôt avoir l'ordonnancement ci-dessous ?

IdProduitComposé, IdProduitsComposant, NbComposant
       P4                              P5                        3
       P2                              P4                        2
       P1                              P2                        2
       P3                               -                          -
       P1                              P3                        1

Bonjour la communauté,

Un truc à faire fumer les neurones ;-)

J'ai une table classique de gestion de liens produits Composés/
Composants, avec les champs suivants:
  IdProduitComposé, IdProduitsComposant, NbComposant.

Soit par exemple,

IdProduitComposé, IdProduitsComposant, NbComposant
       P1                              P2                        2
       P1                              P3                        1
       P2                              P4
2
       P3                               -
-
       P4                              P5                        3

Dans cette liste:
      P2  est un composant, lui même composé
      P2 est composant de plusieurs produits

      P1 et P4 sont des Composés
      P3 est un produit simple (pas de composants)

A partir de cette liste de produits à traiter, je souhaite produire
une liste ordonné de façon à ce qu'un produit ne soit
"traité" (manuellement par un utilisateur) qu'une fois.

La liste que je souhaite obtenir:

       P4                              P5                        3
       P2                              P4
2
       P3                               -
-
       P1                              P2                        2
       P1                              P3                        1

Comment, par un SQL, ou par programmation sortir une liste ordonnée
comme ci-avant?

D'avance merci pour vos lumières.
Cordialement.


elxav
Le #16598131
J'oubliais, si possible, du SQL standard (je ne passe pas par Access),
ou à défaut du VBA access ou excel.
Ma liste étant dans Excel.

Merci.
Michel__D
Le #16600361
re,

J'oubliais, si possible, du SQL standard (je ne passe pas par Access),
ou à défaut du VBA access ou excel.
Ma liste étant dans Excel.
------------------------------------

Avant d'aller plus loin cette requête te servirai à quoi ?
à alimenter un formulaire ?

PS:Apparemment ton souci est de vérifier que le [ProduitComposé]
n'existe pas en base pour ne pas avoir à le resaisir et donc il suffirait
de compter s'il y a déja une occurence du [ProduitComposé] dans la
base (voir DCount...)
Michel__D
Le #16600341
re,

Essaye avec ce SQL

SELECT 0, T2.[IdProduitComposé], T2.IdProduitsComposant,
T2.NbComposant
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON T1.IdProduitsComposant=T2.[IdProduitComposé]
WHERE T1.[IdProduitComposé]=[Quel produit composé ?]
UNION
SELECT 1, [IdProduitComposé], IdProduitsComposant,
NbComposant
FROM LaTable
WHERE [IdProduitComposé]=[Quel produit composé ?];


Bonjour Michel,

Merci pour ta réponse, mais elle ne convient pas :-/

Ceci étant, je me suis sans doute mal exprimé:
1) P1, P2, etc représente des Codes Produits (valeurs numériques),
j'avais mis cette codif pour ne pas "noyer" les données.
2) Le champ NbComposant indique en fait le nombre d'unités pour un
produit Composant dans son composé.

Plus précisément, quand je note:

IdProduitComposé, IdProduitsComposant, NbComposant
P1 P2 2
P1 P3 1

Il faut lire: Le Produit P1, est composé de 2 fois le Produit P2, et 1
fois le Produit P3 (soit 3 unités dans le Composé).

L'ordonnancement que j'indique est bien ce que je recherche.

Exemple réel:

Code Code Qté UC
Produit Produit
Composant
485 500
49 453 485 500 1
302 046 485 500 1
499 914 485 500 1

485 527
485 500 485 527 12
514 382 485 527 26
514 415 485 527 24
514 452 485 527 16
514 522 485 527 12
514 566 485 527 24

514 382
302 046 514 382 3

514 415
499 914 514 415 3

Dans cette liste, le Produit 485 500 est un Composant, lui même
composé.
Sa description apparait AVANT la description du Produit Composé (485
527) dans lequel il se trouve (Liste triée, lors de l'extraction des
infos, sur le Code Produit Composé, puis sur le Code Produit
Composant).
Idem pour le 514 382, lui même Composé, MAIS, sa description apparait
APRES la description du Produit Composé dans lequel il se trouve.
Et c'est là mon problème.

Les Composants doivent être placés quelque part AVANT le premier
Composé dans lequel il sont inclus.

Suis-je plus clair? :-/
Peut être devrais-je modifier la façon dont j'extrait mes données?

Pour l'instant, voici comment je procède:
A partir d'une liste de produits à traiter (trier sur le code produit)
Pour chaque Produit à traiter
Extraction des infos du Produit
Ecriture dans un fichier de travail
Pour chaque Composant du Produit en cours (si composant il y a)
Extraction des infos du Produit
Ecriture dans un fichier de travail
Fin Pour
Fin Pour

Si quelqu'un est arrivé jusqu'ici (lol), chapeau (re lol).

D'avance merci pour toutes les idées qui vous viendraient.
Cordialement.

On 22 août, 09:30, "Michel__D" wrote:
Bonjour,

Heu ... je ne sais pas si j'ai tout compris, mais essaye avec ce SQL.

SELECT *
FROM LaTable
ORDER BY CLng(Right([IdProduitComposé],1))
*Nz(NbComposant,1) DESC;

PS:Il faudrait pas plutôt avoir l'ordonnancement ci-dessous ?

IdProduitComposé, IdProduitsComposant, NbComposant
P4 P5 3
P2 P4 2
P1 P2 2
P3 - -
P1 P3 1

Bonjour la communauté,

Un truc à faire fumer les neurones ;-)

J'ai une table classique de gestion de liens produits Composés/
Composants, avec les champs suivants:
IdProduitComposé, IdProduitsComposant, NbComposant.

Soit par exemple,

IdProduitComposé, IdProduitsComposant, NbComposant
P1 P2 2
P1 P3 1
P2 P4
2
P3 -
-
P4 P5 3

Dans cette liste:
P2 est un composant, lui même composé
P2 est composant de plusieurs produits

P1 et P4 sont des Composés
P3 est un produit simple (pas de composants)

A partir de cette liste de produits à traiter, je souhaite produire
une liste ordonné de façon à ce qu'un produit ne soit
"traité" (manuellement par un utilisateur) qu'une fois.

La liste que je souhaite obtenir:

P4 P5 3
P2 P4
2
P3 -
-
P1 P2 2
P1 P3 1

Comment, par un SQL, ou par programmation sortir une liste ordonnée
comme ci-avant?

D'avance merci pour vos lumières.
Cordialement.


elxav
Le #16636501
Bonjour tout le monde,

J'ai revu entièrement ma procédure d'extraction.
Le tri est donc fait à ce niveau.

Cordialement.

On 22 août, 15:07, "Michel__D" wrote:
re,

Essaye avec ce SQL

SELECT 0, T2.[IdProduitComposé], T2.IdProduitsComposant,
 T2.NbComposant
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON T1.IdProduitsComposant=T2.[IdProduitComposé]
WHERE T1.[IdProduitComposé]=[Quel produit composé ?]
UNION
SELECT 1, [IdProduitComposé], IdProduitsComposant,
 NbComposant
FROM LaTable
WHERE [IdProduitComposé]=[Quel produit composé ?];

Bonjour Michel,

Merci pour ta réponse, mais elle ne convient pas :-/

Ceci étant, je me suis sans doute mal exprimé:
  1) P1, P2, etc représente des Codes Produits (valeurs numériques) ,
j'avais mis cette codif pour ne pas "noyer" les données.
  2) Le champ NbComposant indique en fait le nombre d'unités pour un
produit Composant dans son composé.

Plus précisément, quand je note:

IdProduitComposé, IdProduitsComposant, NbComposant
       P1                              P2                        2
       P1                              P3                        1

Il faut lire: Le Produit P1, est composé de 2 fois le Produit P2, et 1
fois le Produit P3 (soit 3 unités dans le Composé).

L'ordonnancement que j'indique est bien ce que je recherche.

Exemple réel:

Code Code Qté UC
Produit Produit
  Composant
485 500
49 453 485 500 1
302 046 485 500 1
499 914 485 500 1

485 527
485 500 485 527 12
514 382 485 527 26
514 415 485 527 24
514 452 485 527 16
514 522 485 527 12
514 566 485 527 24

514 382
302 046 514 382 3

514 415
499 914 514 415 3

Dans cette liste, le Produit 485 500 est un Composant, lui même
composé.
Sa description apparait AVANT la description du Produit Composé (485
527) dans lequel il se trouve (Liste triée, lors de l'extraction des
infos, sur le Code Produit Composé, puis sur le Code Produit
Composant).
Idem pour le 514 382, lui même Composé, MAIS, sa description apparait
APRES la description du Produit Composé dans lequel il se trouve.
Et c'est là mon problème.

Les Composants doivent être placés quelque part AVANT le premier
Composé dans lequel il sont inclus.

Suis-je plus clair? :-/
Peut être devrais-je modifier la façon dont j'extrait mes données?

Pour l'instant, voici comment je procède:
A partir d'une liste de produits à traiter (trier sur le code produit)
Pour chaque Produit à traiter
  Extraction des infos du Produit
  Ecriture dans un fichier de travail
  Pour chaque Composant du Produit en cours (si composant il y a)
    Extraction des infos du Produit
    Ecriture dans un fichier de travail
  Fin Pour
Fin Pour

Si quelqu'un est arrivé jusqu'ici (lol), chapeau (re lol).

D'avance merci pour toutes les idées qui vous viendraient.
Cordialement.

On 22 août, 09:30, "Michel__D" wrote:



> Bonjour,

> Heu ... je ne sais pas si j'ai tout compris, mais essaye avec ce SQL.

> SELECT *
> FROM LaTable
> ORDER BY CLng(Right([IdProduitComposé],1))
> *Nz(NbComposant,1) DESC;

> PS:Il faudrait pas plutôt avoir l'ordonnancement ci-dessous ?

> IdProduitComposé, IdProduitsComposant, NbComposant
> P4 P5 3
> P2 P4 2
> P1 P2 2
> P3 - -
> P1 P3 1

> > Bonjour la communauté,

> Un truc à faire fumer les neurones ;-)

> J'ai une table classique de gestion de liens produits Composés/
> Composants, avec les champs suivants:
> IdProduitComposé, IdProduitsComposant, NbComposant.

> Soit par exemple,

> IdProduitComposé, IdProduitsComposant, NbComposant
> P1 P2 2
> P1 P3 1
> P2 P4
> 2
> P3 -
> -
> P4 P5 3

> Dans cette liste:
> P2 est un composant, lui même composé
> P2 est composant de plusieurs produits

> P1 et P4 sont des Composés
> P3 est un produit simple (pas de composants)

> A partir de cette liste de produits à traiter, je souhaite produire
> une liste ordonné de façon à ce qu'un produit ne soit
> "traité" (manuellement par un utilisateur) qu'une fois.

> La liste que je souhaite obtenir:

> P4 P5 3
> P2 P4
> 2
> P3 -
> -
> P1 P2 2
> P1 P3 1

> Comment, par un SQL, ou par programmation sortir une liste ordonnée
> comme ci-avant?

> D'avance merci pour vos lumières.
> Cordialement.- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Publicité
Poster une réponse
Anonyme