IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Système de configuration de devis multi niveaux


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 243
    Par défaut Système de configuration de devis multi niveaux
    Bonjour
    J'aimerai pour une application interne (Access + SQL Server) faire une système de devis à multi niveau
    J'entends par là ce genre de schéma :
    Item 1
    + Item 2 - 200€
    + Item 3
    ++ Item 4 - 300€
    ++ Item 5 - 500€
    +Item 6
    ++ Item 7 - 600€
    ++ Item 8
    +++ Item 9 - 600€
    +++ Item 10 - 100€

    L'idée que j'ai c'est d'avoir une seule table avec comme colonnes:
    DETAILS_ID comme identifiant unique
    DETAILS_PARENT_ID identifier le parent
    DETAILS_DESCRIPTION comme description de l'élément
    DETAILS_PRICE qui serait le prix, sachant que pour les éléments avec enfant il serait inutile

    Maintenant je me demande si c'est une méthode jouable et surtout comment gérer la récursivité (procédure stockée ?). Ensuite je pense que dans Access je verrais pour utiliser un contrôle type treeview ou si vous avez des idées (un peu hors sujet là) autre chose, mais à part créer des sous formulaires à la volée je vois pas comment...

    D'avance merci pour vos conseils

  2. #2
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 60
    Par défaut
    salut !

    vas donc jeter un coup d'oeil là dessus :

    https://sqlpro.developpez.com/cours/...te-recursives/

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 243
    Par défaut
    Merci
    Je vais voir pour me faire un jeu de données et trouver comment faire ce que je souhaite (avoir à chaque étage le prix cumulé des éléments enfants)

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 243
    Par défaut
    Bon j'ai regardé mais ce que je souhaite faire c'est pas trouvé les parents et remonter mais le contraire
    Avoir un ID d'un élément, et récupérer les enfants (ça c'est simple) mais surtout par récursivité faire des calculs depuis le plus bas niveau et remonter pour avoir un prix
    Voici mon jeux de données simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    CREATE TABLE [dbo].[TESTDEVIS](
    	[DVS_ID] [int] IDENTITY(1,1) NOT NULL,
    	[DVS_PARENT_ID] [int] NULL,
    	[DVS_DESCRIPTION] [nvarchar](50) NOT NULL,
    	[DVS_UNIT_PRICE] [decimal](11, 2) NULL,
    	[DVS_QUANTITY] [int] NULL,
     CONSTRAINT [PK_TESTDEVIS] PRIMARY KEY CLUSTERED 
    (
    	[DVS_ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    SET IDENTITY_INSERT [dbo].[TESTDEVIS] ON 
    GO
    INSERT [dbo].[TESTDEVIS] ([DVS_ID], [DVS_PARENT_ID], [DVS_DESCRIPTION], [DVS_UNIT_PRICE], [DVS_QUANTITY]) VALUES (1, NULL, N'Machine 1', NULL, NULL)
    GO
    INSERT [dbo].[TESTDEVIS] ([DVS_ID], [DVS_PARENT_ID], [DVS_DESCRIPTION], [DVS_UNIT_PRICE], [DVS_QUANTITY]) VALUES (2, NULL, N'Machine 2', NULL, NULL)
    GO
    INSERT [dbo].[TESTDEVIS] ([DVS_ID], [DVS_PARENT_ID], [DVS_DESCRIPTION], [DVS_UNIT_PRICE], [DVS_QUANTITY]) VALUES (3, 1, N'Moteur', CAST(200.00 AS Decimal(11, 2)), 1)
    GO
    INSERT [dbo].[TESTDEVIS] ([DVS_ID], [DVS_PARENT_ID], [DVS_DESCRIPTION], [DVS_UNIT_PRICE], [DVS_QUANTITY]) VALUES (4, 1, N'balancier', NULL, 6)
    GO
    INSERT [dbo].[TESTDEVIS] ([DVS_ID], [DVS_PARENT_ID], [DVS_DESCRIPTION], [DVS_UNIT_PRICE], [DVS_QUANTITY]) VALUES (5, 4, N'vérin', CAST(100.00 AS Decimal(11, 2)), 1)
    GO
    INSERT [dbo].[TESTDEVIS] ([DVS_ID], [DVS_PARENT_ID], [DVS_DESCRIPTION], [DVS_UNIT_PRICE], [DVS_QUANTITY]) VALUES (6, 4, N'plaque', CAST(50.00 AS Decimal(11, 2)), 2)
    GO
    INSERT [dbo].[TESTDEVIS] ([DVS_ID], [DVS_PARENT_ID], [DVS_DESCRIPTION], [DVS_UNIT_PRICE], [DVS_QUANTITY]) VALUES (7, 2, N'Moteur', CAST(200.00 AS Decimal(11, 2)), 1)
    GO
    INSERT [dbo].[TESTDEVIS] ([DVS_ID], [DVS_PARENT_ID], [DVS_DESCRIPTION], [DVS_UNIT_PRICE], [DVS_QUANTITY]) VALUES (8, 2, N'balancier', NULL, 6)
    GO
    INSERT [dbo].[TESTDEVIS] ([DVS_ID], [DVS_PARENT_ID], [DVS_DESCRIPTION], [DVS_UNIT_PRICE], [DVS_QUANTITY]) VALUES (9, 8, N'vérin', CAST(100.00 AS Decimal(11, 2)), 1)
    GO
    INSERT [dbo].[TESTDEVIS] ([DVS_ID], [DVS_PARENT_ID], [DVS_DESCRIPTION], [DVS_UNIT_PRICE], [DVS_QUANTITY]) VALUES (10, 8, N'plaque', CAST(50.00 AS Decimal(11, 2)), 2)
    GO
    SET IDENTITY_INSERT [dbo].[TESTDEVIS] OFF
    GO
    J'aimerai en fait avoir le prix de la machine 1 par exemple indépendamment du nombre d'enfants
    La machine 1 a:
    -1 moteur à 200€
    -6 balanciers qui contiennent 1 vérin à 100€ et 2 plaque à 50€
    Je devrais avoir le total de 1400€
    Si en plus je peux avoir les calculs intermédiaires c'est top

  5. #5
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 60
    Par défaut
    voilà une requête qui montre le début de ce que l'on peut faire.

    Je dois bouger, pas trop le temps pour l'instant je complèterai demain matin si besoin. Je n'ai pas pu la tester, mais le principe doit être correct.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    WITH LISTE as (
    		SELECT DVS_ID, DVS_PARENT_ID, DVS_UNIT_PRICE, DVS_QUANTITY, DVS_QUANTITY as QTE_MULTINIV
    		FROM TESTDEVIS
    		WHERE DVS_ID = 1
    		UNION ALL
     
    		SELECT D.ID, D.DVS_PARENT_ID, D.DVS_UNIT_PRICE, D.DVS_QUANTITY, LISTE.QTE_MULTINIV * D.DVS_QUANTITY as QTE_MULTINIV
    		FROM LISTE
    		INNER JOIN TESTDEVIS D ON D.DVS_PARENT_ID = LISTE.DVS_ID
    )
    SELECT * FROM LISTE
    il y aura peut être besoin de faire des CAST pour forcer le type de QTE_MULTI_NIV.

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 243
    Par défaut
    Ok
    Faut juste modifier la quantité Null dans les premiers niveaux (machine 1 et machine 2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT SUM(LISTE.QTE_MULTINIV * LISTE.DVS_UNIT_PRICE ) FROM LISTE
    Faut juste que je regarde à passer à NULL le DVS_UNIT_PRICE si l'objet a des enfants) et normalement ça devrait fonctionner

Discussions similaires

  1. [Joomla!] Menu horizontal multi-niveaux
    Par erman_yazid dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 05/03/2008, 16h10
  2. [Conception] Génération d'un menu HTML multi-niveaux (indéfini)
    Par R'SKaP dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/02/2007, 13h39
  3. Réponses: 3
    Dernier message: 22/06/2006, 18h41
  4. Configuration d'appli multi-serveurs
    Par j2ee_laurent dans le forum Struts 1
    Réponses: 5
    Dernier message: 04/10/2004, 21h03
  5. Réponses: 10
    Dernier message: 06/06/2004, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo