Reliquat commande

salut les gars, j'ai une table commande, ligne commande, livraison et ligne livraison & reliquat, quand un client passe une commande par exemple Cmd1 (art1=15,art2=10 et art3=8) et la table livraison livr1(Cmd1:art1=11,art2=10 et art3=6) la table livraison a la collonne reste a livrer reçois (art1=4,art2=0 et art3=2) donc c'est ca qui est com le reste a livré, et la table reliquat (art1=4,art2=0 et art3=2) du coup pour une prochaine commande des mem produits Cmd2 (art1=9,art2=6 et art3=16) il va cummuler la qté commandée plus le reliquat.....ce qui donne comme réliquat (art1=13,art2=6 et art3=18)
ma question est de savoir comment aditionner la qté de la table reliquat avec la table livraison pour trouver le reste à livrer dans sql server

Soyons Toujours à la disposition des autres (si la personne à bien posée son problem)

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    bonjour,
    peux-tu donner pour chaque table, son nom, ainsi que le nom et le type de chaque champ dans cette table?

    peux-tu ensuite montrer clairement un exemple de données qui sont enregistrées?

    ensuite, montrer le résultat que tu attends, en fonction de ces données?
  2. /*table article*/
    CREATE TABLE [dbo].[bouteuil](
    	[refbtl] [nvarchar](255) NOT NULL,
    	[prixbtl] [int] NULL,
    	[txtonag] [float] NULL,
    	[stkin] [int] NULL,
    	[ordern] [int] NULL)
     
    	/*table Lign commande*/
    	CREATE TABLE [dbo].[COMMD](
    	[refcom] [int] NOT NULL,
    	[date] [date] NULL,
    	[refclicm] [nvarchar](255) NULL,
    FOREIGN KEY([refclicm])REFERENCES [dbo].[Client] ([refcli]))
     
    /*table commande*/
    CREATE TABLE [dbo].[Comde](
    	[refcmd] [int] NOT NULL,
    	[refclicmdd] [nvarchar](255) NULL,
    	[qtecmd] [int] NULL,
    	[tonagecmd] [int] NULL,
    	[montcmd] [int] NULL,
    	[margecmd] [int] NULL,
    	[gabaritcmd] [nvarchar](255) NULL,
    	[zonnecmd] [nvarchar](255) NULL,
    	[reliq] [int] NULL,
    	[cummul] [int] NULL
     FOREIGN KEY([gabaritcmd])REFERENCES [dbo].[bouteuil] ([refbtl])
     FOREIGN KEY([refclicmdd])REFERENCES [dbo].[Client] ([refcli]) 
     FOREIGN KEY([refcmd])REFERENCES [dbo].[COMMD] ([refcom])
     FOREIGN KEY([zonnecmd])REFERENCES [dbo].[zonne] ([refzone]))
     
    /*table reliquat*/
    CREATE TABLE [dbo].[Reliquats](
    	[refcomrlq] [int] NOT NULL,
    	[reflivrerlq] [int] NOT NULL,
    	[qtecomrlq] [int] NULL,
    	[qtelivrlq] [int] NULL,
    	[restrlq] [int] NULL,
    	[gabaritrlq] [nvarchar](255) NULL,
    	[zonnerlq] [nvarchar](255) NULL,
    	[Clirlq] [nvarchar](255) NULL
    FOREIGN KEY([Clirlq])REFERENCES [dbo].[Client] ([refcli])
    FOREIGN KEY([gabaritrlq])REFERENCES [dbo].[bouteuil] ([refbtl])
    FOREIGN KEY([refcomrlq])REFERENCES [dbo].[COMMD] ([refcom])
    FOREIGN KEY([reflivrerlq])REFERENCES [dbo].[livr] ([reflivr])
    FOREIGN KEY([zonnerlq])REFERENCES [dbo].[zonne] ([refzone]))
    GO
     
     /*table ligne livr*/
     CREATE TABLE [dbo].[livr](
    	[reflivr] [int] NOT NULL,
    	[datelivr] [date] NULL,
    	[refcomlivr] [int] NULL,
     FOREIGN KEY([refcomlivr])REFERENCES [dbo].[COMMD] ([refcom]))
    GO
     
    /*table livraison*/
    CREATE TABLE [dbo].[livraisons](
    	[reflivre] [int] NOT NULL,
    	[refcomlivr] [int] NOT NULL,
    	[qtelivr] [int] NULL,
    	[tonagelivr] [int] NULL,
    	[montlivr] [int] NULL,
    	[margelivr] [int] NULL,
    	[gabaritlivr] [nvarchar](255) NULL,
    	[zonnelivr] [nvarchar](255) NULL,
    	[restlivr] [int] NULL,
    	[qtecomm] [int] NULL
    FOREIGN KEY([gabaritlivr])REFERENCES [dbo].[bouteuil] ([refbtl])
    FOREIGN KEY([refcomlivr])REFERENCES [dbo].[COMMD] ([refcom])
    FOREIGN KEY([reflivre])REFERENCES [dbo].[livr] ([reflivr])
    FOREIGN KEY([zonnelivr])REFERENCES [dbo].[zonne] ([refzone]))
    GO


    ma question est de savoir comment faire la soustraction de la quantité de la table reliquat avec la table livraison pour trouver le reste à livrer dans sql server

    ou je veux-t savoir que serait le reste à livre a la fin de la journée sachant que la commande Num2 n'as pas été livrée
    1. Contributeur
      peux-tu montrer clairement un exemple de données qui sont enregistrées?
      ensuite, montrer le résultat que tu attends, en fonction de ces données?
    2. Contributeur
      @yg_bemontre-nous aussi les requêtes que tu utilises pour obtenir:
      - la quantité de la table reliquat
      - la quantité de la table livraison
    3. Contributeur
      @yg_beje ne pourrai pas t'aider si tu ne réponds pas aux questions en #4.
    4. @yg_betable Comde


      et ci dessous la table livraisons


      table reliquat
  3. pour trouver la quantité du réliquat je fait ceci

    avec la livraison je fait ceci
    insert into Reliquats(refcomrlq,reflivrerlq,qtecomrlq,qtelivrlq,restrlq,gabaritrlq,zonnerlq,Clirlq)values(@refcomrlq,@reflivrerlq,@qtecomrlq,@qtelivrlq,@restrlq,@gabaritrlq,@zonnerlq,@Clirlq)";


    je commence l'insertion dans la table reliquat si la quantité livrée est inférieure à la qté commandée par exemple comd=10 mais livraison =7 la table reliquat prend le 3 par rapport au produit

    puis la prochaine comd, si je commande qté 9, il fera un update de 9+3 restants ce qui donne le reliquat devient à 12
    avec la table commande, je fait
    update Reliquats set restrlq = restrlq-@restrlq where gabaritrlq=@gabaritrlq


    or ma livraison avait comme reliquat 3, je veut faire de sorte que a ce stade qu'une requête me dise la qté à livré c'est à dire 12(du 9+3) et remet le reliquat à 0 zéro) apartir de cet update au lieu du 3 qui étais à la dernière livraison, mais ma table livraison garde jusque là 3 comme reliquat

    1. 1. Comde


      2. Livraisons


      3. Reliquat apres livraisons


      Cmde apres une Livraisons

      1. Contributeur
        je pense que la base de données n'est pas bien conçue.
        le reliquat, est-ce la quantité encore à livrer?

        je pense qu'il est préférable de faire ainsi:
        - une table commande, qui est mise à jour uniquement quand une commande est effectuée, et contient uniquement des données à propos de la commande
        - une table livraison, qui est mise à jour uniquement quand une livraison est effectuée, et contient uniquement des données à propos de la livraison
        - une requête reliquat, qui va calculer les quantités encore à livrer