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 :

Date de disponibilité d'article dans ERP


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Juin 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Juin 2004
    Messages : 19
    Par défaut Date de disponibilité d'article dans ERP
    Dans un ERP sous SQL server j'ai un état qui me liste les différents mouvements de stock prévisionnels sur un article.
    Il s'agit des mouvements d'entrées (commande client) et sorties (commande fournisseur), trier par date.
    Cet état me permet d'estimer la prochaine date de disponibilité de l'article
    Exemple Nom : PrevStock.PNG
Affichages : 332
Taille : 25,5 Ko
    Dans le cas ci-dessus l'article sera disponible le 12/12/2018.
    PS : Il faut se mettre dans la condition ou l'état à été imprimé le 20/10/2018 par exemple.
    Cette date de disponibilité est en fait la première fois ou le stock est > 0 après la dernière fois ou il est < 0
    Dans le cas présent je peux en mettre jusqu'à 59 unités en commande sans provoquer de rupture pour les autres commandes clients suivantes, déjà saisies.
    Cela correspond à notre attente.

    La requête suivante me permet de réaliser l'état :

    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
    SELECT    opeid,T.TIRCODE, T.TIRSOCIETE,'VENTE', PV.PCVNUM, PV.SOCID, OP.ARTID, A.AFMCODE,A.ARTCODE,A.ARTDESIGNATION, B.STOCKREEL,  PLVDATE, dbo.WS_NumeroSemaine(PLVDATE) AS Week, OP.OPEQUANTITE * OP.OPESENS AS stkOut, 
                          0 AS stkIn , OP.PICCODE, OP.OPENATURESTOCK , V_INFOSOCIETE.SOCIETE_NOM 
    FROM      V_LST_ArTICLES AS A,   OPERATIONSTOCK AS OP, PIECEVENTELIGNES AS PVL, PIECEVENTES AS PV, TIERS AS T, V_INFOSOCIETE, V_EXT_STOCK_ART_DEP_GENERAL AS B
    WHERE     OP.ARTID = a.ARTID AND OP.PCID = PV.PCVID AND OP.PLID = PVL.PLVID AND OP.PICCODE = 'V' AND OP.OPENATURESTOCK = 'V' AND PV.TIRID = T.TIRID AND A.ARTISSTOCK ='O' AND OP.DEPID=1 AND OP.ARTID = B.ARTID
    UNION
    SELECT     opeid,T.TIRCODE, T.TIRSOCIETE,'ACHAT', PA.PCANUM,PA.SOCID, OP.ARTID, A.AFMCODE,A.ARTCODE,A.ARTDESIGNATION,B.STOCKREEL, PAL.PLADATE, dbo.WS_NumeroSemaine(PLADATE), 0 AS stkOut, OP.OPEQUANTITE * OP.OPESENS AS stkIn,OP.PICCODE, OP.OPENATURESTOCK,V_INFOSOCIETE.SOCIETE_NOM 
    FROM       V_LST_ArTICLES AS A,  OPERATIONSTOCK AS OP, PIECEACHATLIGNES AS PAL, PIECEACHATS AS PA, TIERS AS T, V_INFOSOCIETE, V_EXT_STOCK_ART_DEP_GENERAL AS B
    WHERE     OP.ARTID = a.ARTID AND OP.PCID = PA.PCAID AND (OP.PLID = PAL.PLAID AND OP.PICCODE = 'A') AND (OP.OPENATURESTOCK = 'C') AND Pa.TIRID = T.TIRID AND A.ARTISSTOCK ='O' AND OP.DEPID=1 AND OP.ARTID = B.ARTID
    UNION
    SELECT     opeid, 'STOCK RESERVE C', 'STOCK','STOCK',PD.PCDNUM , PD.SOCID, OP.ARTID, A.AFMCODE,A.ARTCODE,A.ARTDESIGNATION,B.STOCKREEL, PDL.PLDDATE, dbo.WS_NumeroSemaine(PLDDATE), OP.OPEQUANTITE * OP.OPESENS AS stkOut, 0 AS stkIn,OP.PICCODE, OP.OPENATURESTOCK,V_INFOSOCIETE.SOCIETE_NOM 
    FROM       V_LST_ArTICLES AS A,   OPERATIONSTOCK AS OP, PIECEDIVERSLIGNES AS PDL, PIECEDIVERS AS PD, V_INFOSOCIETE, V_EXT_STOCK_ART_DEP_GENERAL AS B
    WHERE     OP.ARTID = a.ARTID AND OP.PCID = PD.PCDID AND (OP.PLID = PDL.PLDID) AND (OP.OPENATURESTOCK = 'V') AND A.ARTISSTOCK ='O' AND OP.DEPID=1 AND OP.ARTID = B.ARTID
    UNION
    SELECT     opeid, 'STOCK COMMANDE F', 'STOCK','STOCK',PD.PCDNUM ,PD.SOCID, OP.ARTID, A.AFMCODE,A.ARTCODE,A.ARTDESIGNATION,B.STOCKREEL, PDL.PLDDATE, dbo.WS_NumeroSemaine(PLDDATE) AS Week,0 AS stkOut, 
    OP.OPEQUANTITE * OP.OPESENS AS stkIn,OP.PICCODE, OP.OPENATURESTOCK,V_INFOSOCIETE.SOCIETE_NOM 
    FROM       V_LST_ArTICLES AS A,   OPERATIONSTOCK AS OP, PIECEDIVERSLIGNES AS PDL, PIECEDIVERS AS PD, V_INFOSOCIETE, V_EXT_STOCK_ART_DEP_GENERAL AS B
    WHERE     OP.ARTID = a.ARTID AND OP.PCID = PD.PCDID AND (OP.PLID = PDL.PLDID) AND (OP.OPENATURESTOCK = 'C') AND A.ARTISSTOCK ='O' AND OP.DEPID=1 AND OP.ARTID = B.ARTID
    UNION
    SELECT    opeid, 'FABRICATION', 'STOCK', 'STOCK',PD.PCDNUM ,PD.SOCID, OP.ARTID, A.AFMCODE,A.ARTCODE,A.ARTDESIGNATION,B.STOCKREEL, PDL.PLDDATE, dbo.WS_NumeroSemaine(PLDDATE), 0 AS stkOut, OP.OPEQUANTITE * OP.OPESENS AS stkIn,OP.PICCODE, OP.OPENATURESTOCK,V_INFOSOCIETE.SOCIETE_NOM 
    FROM       V_LST_ArTICLES AS A,   OPERATIONSTOCK AS OP, PIECEDIVERSLIGNES AS PDL, PIECEDIVERS AS PD, V_INFOSOCIETE, V_EXT_STOCK_ART_DEP_GENERAL AS B
    WHERE     OP.ARTID = a.ARTID AND OP.PCID = PD.PCDID AND (OP.PLID = PDL.PLDID) AND (OP.OPENATURESTOCK = 'F') AND A.ARTISSTOCK ='O' AND OP.DEPID=1 AND OP.ARTID = B.ARTID
    Mon besoin complémentaire est de pouvoir, à partir de cet état, extraire la date de première disponibilité, afin de pouvoir renseigner le client facilement en lui indiquant sa date probable de livraison.
    Ceci sans avoir à éditer cet état et à l'analyser.
    Dans le cas ci-dessus j'aimerais extraire date_dispo = 12/12/2018.

    A votre disposition si pas clair, ou pour tous compléments.
    En espérant que quelqu'un pourra m'aider.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 008
    Billets dans le blog
    6
    Par défaut
    C'est la première date (donc min) après la date max à laquelle le produit n'était plus négatif (stock négatif).

    Simple à faire à partir de votre résultat avec un EXISTS.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Juin 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Juin 2004
    Messages : 19
    Par défaut
    Je ne vois pas comment faire.
    Pouvez vous m'en dire plus

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 008
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 008
    Billets dans le blog
    6
    Par défaut
    Postez le DDL de vos tables…
    À lire sur le respect de la charte de postage : https://www.developpez.net/forums/d9...vement-poster/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Juin 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Juin 2004
    Messages : 19
    Par défaut
    V_LST_ARTICLES

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE  VIEW [dbo].[V_LST_ARTICLES] AS  SELECT ART_LST.ARTID, ART_LST.ARTCODE, ART_LST.ARTTYPE, dbo.WS_TRADUCTION(dbo.ARTTYPE.ATYINTITULE) AS ATYINTITULE, ART_LST.AFMID,  dbo.ARTFAMILLES.AFMCODE, ART_LST.ARTDESIGNATION, ART_LST.ARTDESIGNATION2, ART_LST.ARTCEECODE, ART_LST.ARTCEEPRODUIT,  ART_LST.ARTSOUSFAMILLE, ART_LST.ARTNATURE, ART_LST.ARTCATEGORIE, ART_LST.ARTCOLLECTION, ART_LST.ARTISDEFAUTFAM, ART_LST.ARTISSTOCK,  ART_LST.ARTISACTIF, ART_LST.ARTISVENDU, ART_LST.ARTISFORFAIT, ART_LST.ARTISSERIE, ART_LST.ARTISLOT, ART_LST.ARTISSTATISTIQUE,  ART_LST.ARTISGARANTIE, ART_LST.ARTISSOUMISESC, ART_LST.ARTISSOUMISCOM, ART_LST.ARTISSOUMISREM, ART_LST.ARTLASTPA, ART_LST.ARTPMP,  ART_LST.ARTCUMP, ART_LST.ARTCODEBARRE, ART_LST.ARTSEUILVENTE, ART_LST.ARTQTEVENTEMINI, ART_LST.ARTPOIDS, ART_LST.ARTUNITEPOIDS,  ART_LST.DATECREATE, ART_LST.DATEUPDATE, dbo.WS_UserName(ART_LST.USRMODIF) As USRMODIF, 'A' AS niv1, COMPTES_1.CPTCODE AS CPTCODE_FR,  COMPTES_2.CPTCODE AS CPTCODE_EX, COMPTES_3.CPTCODE AS CPTCODE_CE, COMPTES_4.CPTCODE AS CPTCODE_CT,  COMPTES_DV.CPTCODE AS CPTCODE_DV, ANASECTIONS_DV.ANSCODE AS ANSCODE_DV, ANASECTIONS_4.ANSCODE AS ANSCODE_FR, ANASECTIONS_1.ANSCODE AS ANSCODE_EX, ANASECTIONS_2.ANSCODE AS ANSCODE_CE, ANASECTIONS_3.ANSCODE AS ANSCODE_CT, ARTUNITE_1.ARUCODE AS ARUCODE_VENTE, ARTICLES_2.ARTCODE AS ARTCODE_SUIVANT, dbo.V_STOCK_ARTICLES.STOCKREEL,  dbo.V_STOCK_ARTICLES.STOCKCDE, dbo.V_STOCK_ARTICLES.STOCKRSV, dbo.ARTTARIFLIGNE.ATFPRIX,  dbo.WS_TRADUCTION(dbo.ARTMODESTOCK.AMSINTITULE) AS AMSINTITULE, dbo.WS_TRADUCTION(dbo.ARTTYPENOMENCLATURE.ATNINTITULE) AS ATNINTITULE,  ART_LST.SOCID, dbo.V_LST_ETABLISSEMENTS.SOCCODE, dbo.V_STOCK_ARTICLES.STOCKTERME, dbo.TARIFS.TRFID, dbo.V_STOCK_ARTICLES.STOCKDISPO,  ART_LST.ARTQTEUVISMULTI, ART_LST.ARTISDIMENSION, ART_LST.ARTVALOMARGE, ART_LST.ARTVOLUME, ART_LST.ARTDENSITE,  ART_LST.ARTCONTREMARQUE, dbo.WS_Codage_EAN13(ART_LST.ARTCODEBARRE) AS ARTCODEBARRE_IMP, ART_LST.ARTDEEE, ART_LST.ARTPCB,  ART_LST.ARTPCBDESIGNATION, ART_LST.ARTLASTPR, ART_LST.ARTPRMP, ART_LST.ARTCRUMP, ART_LST.ARTISPERISSABLE,  dbo.ARTTARIFLIGNE.ATFPRIX - dbo.FRAIS.FRAFRAISTOTAL - (CASE WHEN ART_LST.ARTVALOMARGE = 'M' THEN ART_LST.ARTPMP WHEN ART_LST.ARTVALOMARGE = 'C' THEN ART_LST.ARTCUMP WHEN ART_LST.ARTVALOMARGE = 'PR' THEN ART_LST.ARTLASTPR WHEN ART_LST.ARTVALOMARGE = 'MR' THEN ART_LST.ARTPRMP WHEN ART_LST.ARTVALOMARGE = 'CR' THEN ART_LST.ARTCRUMP ELSE ART_LST.ARTLASTPA END) AS MargeTheorique, ART_LST.ARTTYPENOMENCLATURE,  dbo.TIERS.TIRCODE, dbo.TIERS.TIRSOCIETE, dbo.WS_UserName(ART_LST.USRCREATE) as USRCREATE, ART_LST.ARTISUSEINGP, ART_LST.ARTGARANTIE,  dbo.V_STOCK_ARTICLES.STOCKFAB, ART_LST.ARTISECOM, ART_LST.ARTMARQUE, ART_LST.ARTCLASSE, ART_LST.ARTLARGEUR, ART_LST.ARTLONGUEUR,  ART_LST.ARTHAUTEUR, dbo.ARTFAMILLES_CPT.ARFCLASS, dbo.ARTFAMILLES_CPT.TVACODE_FR, dbo.ARTFAMILLES_CPT.TVACODE_EX,  dbo.ARTFAMILLES_CPT.TVACODE_CE, dbo.ARTFAMILLES_CPT.TVACODE_CT, dbo.ARTFAMILLES_CPT.TVACODE_DV,  dbo.ARTDECLINAISONVALUES.ARGVCODE AS AXE1CODE, dbo.ARTDECLINAISONVALUES.ARGVINTITULE AS AXE1INTITULE,  ARTDECLINAISONVALUES_AXE2.ARGVCODE AS AXE2CODE, ARTDECLINAISONVALUES_AXE2.ARGVINTITULE AS AXE2INTITULE, ARTDECLINAISONVALUES_AXE3.ARGVCODE AS AXE3CODE, ARTDECLINAISONVALUES_AXE3.ARGVINTITULE AS AXE3INTITULE, ARTUNITE_K_VOL.UNINTITULE,  ARTUNITE_K_DIM.UNINTITULE AS unitedimension, ARTUNITE_STK.ARUCODE AS US, ARTUNITE_STK.ARUINTITULE AS ARTUNITESTK,  V_STOCK_ARTICLES.STOCKLIVRABLE, V_STOCK_ARTICLES.STOCKBLOQUE, ART_LST.ARTCEEUNITESUPP ,ARTICLES_P.COLISAGE,ARTICLES_P.POIDSNET,ARTICLES_P.DIMENSION,ARTICLES_P.DETAILCOLIS,ARTICLES_P.INCLINAISON,ARTICLES_P.TXA,ARTICLES_P.TXB,ARTICLES_P.TXC,ARTICLES_P.TXD,ARTICLES_P.TXE,ARTICLES_P.DFE,ARTICLES_P.DFD,ARTICLES_P.DFC,ARTICLES_P.DFB,ARTICLES_P.DDE,ARTICLES_P.DDD,ARTICLES_P.DDC,ARTICLES_P.DDB,ARTICLES_P.DFA,ARTICLES_P.DDA,ARTICLES_P.LIBA,ARTICLES_P.LIBB,ARTICLES_P.LIBC,ARTICLES_P.LIBD,ARTICLES_P.LIBE,ARTICLES_P.LIBF,ARTICLES_P.LIBG,ARTICLES_P.LIBH,ARTICLES_P.LIBI,ARTICLES_P.LIBJ,ARTICLES_P.DDF,ARTICLES_P.DDG,ARTICLES_P.DDH,ARTICLES_P.DDI,ARTICLES_P.DDJ,ARTICLES_P.DFF,ARTICLES_P.DFG,ARTICLES_P.DFH,ARTICLES_P.DFI,ARTICLES_P.DFJ,ARTICLES_P.TXF,ARTICLES_P.TXG,ARTICLES_P.TXH,ARTICLES_P.TXI,ARTICLES_P.TXJ,ARTICLES_P.MATIERE,ARTICLES_P.FONCTION,ARTICLES_P.COULEUR,ARTICLES_P.PIED,ARTICLES_P.SMINI,ARTICLES_P.SMAXI, (SELECT convert(date,Min(PAL.PLADATE))
    FROM OPERATIONSTOCK AS OPE, PIECEACHATLIGNES AS PAL
    WHERE OPE.artID = ART_lst.artid  AND  OPE.depID=1 AND  OPE.PLID = PAL.PLAID and OPENATURESTOCK='C'
    group by OPE.ARTID ) AS DATEPROCENTREE, (SELECT sum(OPEQUANTITE)
    FROM OPERATIONSTOCK AS OPE, PIECEACHATLIGNES AS PAL
    WHERE OPE.artid = ART_lst.artid  AND  OPE.depID=1 AND OPE.PLID = PAL.PLAID and PAL.PLADATE = 
     
    	(SELECT convert(date,Min(PAL.PLADATE))
    FROM OPERATIONSTOCK AS OPE, PIECEACHATLIGNES AS PAL
    WHERE OPE.artID = ART_lst.artid  AND  OPE.depID=1 AND  OPE.PLID = PAL.PLAID and OPENATURESTOCK='C'
    group by OPE.ARTID )
     
    group by OPE.ARTID) AS QTEPROCENTREE FROM V_STOCK_ARTICLES RIGHT OUTER JOIN  FRAIS RIGHT OUTER JOIN COMPTES AS COMPTES_4 RIGHT OUTER JOIN COMPTES AS COMPTES_2 RIGHT OUTER JOIN (SELECT ARUID, ARUCODE, ARUINTITULE FROM ARTUNITE AS ARTUNITE_2 WHERE AUTCODE = 'S') AS ARTUNITE_STK RIGHT OUTER JOIN ARTFAMILLES_CPT INNER JOIN ARTICLES AS ART_LST INNER JOIN ARTTYPE ON ART_LST.ARTTYPE = ARTTYPE.ATYCODE INNER JOIN ARTFAMILLES ON ART_LST.AFMID = ARTFAMILLES.AFMID INNER JOIN ARTTARIFLIGNE ON ART_LST.ARTID = ARTTARIFLIGNE.ARTID INNER JOIN TARIFS ON ARTTARIFLIGNE.TRFID = TARIFS.TRFID INNER JOIN ARTMODESTOCK ON ART_LST.ARTMODESTOCK = ARTMODESTOCK.AMSCODE INNER JOIN V_LST_ETABLISSEMENTS ON ART_LST.SOCID = V_LST_ETABLISSEMENTS.SOCID ON ARTFAMILLES_CPT.ARFID = ART_LST.ARTID ON  ARTUNITE_STK.ARUID = ART_LST.ARUIDSTOCK LEFT OUTER JOIN (SELECT UNICOEFF, UNINTITULE FROM ARTUNITE_K AS ARTUNITE_K_1 WHERE UNICLASS = 'DIM') AS ARTUNITE_K_DIM ON ART_LST.ARTUNITEDIM = ARTUNITE_K_DIM.UNICOEFF LEFT OUTER JOIN (SELECT UNICOEFF, UNINTITULE FROM ARTUNITE_K WHERE UNICLASS = 'VOL') AS ARTUNITE_K_VOL ON ART_LST.ARTUNITEVOLUME = ARTUNITE_K_VOL.UNICOEFF LEFT OUTER JOIN ARTDECLINAISONVALUES AS ARTDECLINAISONVALUES_AXE3 ON ART_LST.ARGVID_3 = ARTDECLINAISONVALUES_AXE3.ARGVID LEFT OUTER JOIN ARTDECLINAISONVALUES AS ARTDECLINAISONVALUES_AXE2 ON ART_LST.ARGVID_2 = ARTDECLINAISONVALUES_AXE2.ARGVID LEFT OUTER JOIN ARTDECLINAISONVALUES ON ART_LST.ARGVID_1 = ARTDECLINAISONVALUES.ARGVID ON  COMPTES_2.CPTID = ARTFAMILLES_CPT.CPTID_EX LEFT OUTER JOIN COMPTES AS COMPTES_3 ON ARTFAMILLES_CPT.CPTID_CE = COMPTES_3.CPTID ON  COMPTES_4.CPTID = ARTFAMILLES_CPT.CPTID_CT LEFT OUTER JOIN ANASECTIONS AS ANASECTIONS_DV ON ARTFAMILLES_CPT.ANSID_DV = ANASECTIONS_DV.ANSID LEFT OUTER JOIN ANASECTIONS AS ANASECTIONS_3 ON ARTFAMILLES_CPT.ANSID_CT = ANASECTIONS_3.ANSID LEFT OUTER JOIN ANASECTIONS AS ANASECTIONS_2 ON ARTFAMILLES_CPT.ANSID_CE = ANASECTIONS_2.ANSID LEFT OUTER JOIN ANASECTIONS AS ANASECTIONS_1 ON ARTFAMILLES_CPT.ANSID_EX = ANASECTIONS_1.ANSID LEFT OUTER JOIN ANASECTIONS AS ANASECTIONS_4 ON ARTFAMILLES_CPT.ANSID_FR = ANASECTIONS_4.ANSID LEFT OUTER JOIN TIERS RIGHT OUTER JOIN PRODUITS ON TIERS.TIRID = PRODUITS.TIRID ON ART_LST.ARTID = PRODUITS.ARTID AND PRODUITS.PROISPRINCIPAL = 'O' LEFT OUTER JOIN ARTUNITE AS ARTUNITE_1 ON ART_LST.ARUIDVENTE = ARTUNITE_1.ARUID LEFT OUTER JOIN ARTICLES AS ARTICLES_2 ON ART_LST.ARTIDSUIVANT = ARTICLES_2.ARTID ON FRAIS.FRAID = ART_LST.FRAID LEFT OUTER JOIN ARTTYPENOMENCLATURE ON ART_LST.ARTTYPENOMENCLATURE = ARTTYPENOMENCLATURE.ATNCODE ON  V_STOCK_ARTICLES.ARTID = ART_LST.ARTID LEFT OUTER JOIN ARTICLES_P ON ART_LST.ARTID = ARTICLES_P.ARTID LEFT OUTER JOIN COMPTES AS COMPTES_DV ON ARTFAMILLES_CPT.CPTID_DV = COMPTES_DV.CPTID LEFT OUTER JOIN COMPTES AS COMPTES_1 ON ARTFAMILLES_CPT.CPTID_FR = COMPTES_1.CPTID WHERE (ARTTARIFLIGNE.ATFQTE = 1) AND (ARTFAMILLES_CPT.ARFCLASS = 'ART') 
    GO

  6. #6
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Juin 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Juin 2004
    Messages : 19
    Par défaut
    OPERATIONSTOCK

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    CREATE TABLE [dbo].[OPERATIONSTOCK](
    	[OPEID] [dbo].[ID] NOT NULL,
    	[DATECREATE] [datetime] NULL,
    	[DATEUPDATE] [datetime] NULL,
    	[USRMODIF] [varchar](30) NULL,
    	[OPEDATE] [datetime] NOT NULL,
    	[PCID] [dbo].[ID] NOT NULL,
    	[PLID] [dbo].[ID] NOT NULL,
    	[OPEREFPIECE] [varchar](50) NULL,
    	[PICCODE] [char](1) NOT NULL,
    	[PINID] [dbo].[ID] NOT NULL,
    	[ARTID] [dbo].[ID] NOT NULL,
    	[DEPID] [dbo].[ID] NOT NULL,
    	[PROID] [dbo].[ID] NULL,
    	[OPENATURESTOCK] [char](1) NOT NULL,
    	[ARDEMPLACEMENT] [varchar](50) NULL,
    	[OPENUMLOT] [varchar](50) NULL,
    	[OPENUMSERIE] [varchar](50) NULL,
    	[OPEQUANTITE] [dbo].[ARTQTE] NOT NULL,
    	[OPESENS] [smallint] NOT NULL,
    	[OPELASTPA] [dbo].[ARTMNT] NOT NULL,
    	[OPEPMP] [dbo].[ARTMNT] NOT NULL,
    	[OPECUMP] [dbo].[ARTMNT] NOT NULL,
    	[OPEQTERESTANTE] [dbo].[ARTQTE] NOT NULL,
    	[OPEISCLOS] [dbo].[BOOL] NOT NULL,
    	[OPEIDORG] [dbo].[ID] NULL,
    	[TIRID] [dbo].[ID] NULL,
    	[OPESTOCKAVANT] [dbo].[ARTQTE] NULL,
    	[OPEPUNET] [dbo].[ARTMNT] NULL,
    	[OPEINTITULE] [varchar](100) NULL,
    	[SOCID] [dbo].[ID] NOT NULL,
    	[OPEFEFOFABRICATION] [datetime] NULL,
    	[OPEFEFOPEREMPTION] [datetime] NULL,
    	[OPEFEFODIVERS] [varchar](20) NULL,
    	[OPECOMPUTER] [varchar](100) NULL,
    	[OPETYPE] [char](1) NULL CONSTRAINT [DF_OPERATIONSTOCK_OPETYPE]  DEFAULT ('N'),
    	[OPEISMAJPA] [dbo].[BOOL] NULL,
    	[CTMID] [dbo].[ID] NOT NULL CONSTRAINT [DF_OPERATIONSTOCK_OREID]  DEFAULT ((0)),
    	[OPEFRAIS] [dbo].[ARTMNT] NOT NULL,
    	[OPEPRMP] [dbo].[ARTMNT] NOT NULL,
    	[OPECRUMP] [dbo].[ARTMNT] NOT NULL,
    	[OPEREFEXTPIECE] [varchar](50) NULL,
    	[OPEFEFODIVERS1] [varchar](20) NULL,
    	[OPEFEFODIVERS2] [varchar](20) NULL,
    	[OPEFEFODIVERS3] [varchar](20) NULL,
    	[OPEISBLOQUE] [dbo].[BOOL] NOT NULL,
     CONSTRAINT [PK_OPERATIONSTOCK] PRIMARY KEY CLUSTERED 
    (
    	[OPEID] 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 ANSI_PADDING OFF
    GO
     
    ALTER TABLE [dbo].[OPERATIONSTOCK]  WITH CHECK ADD  CONSTRAINT [FK_OPERATIONSTOCK_STOCK_TYPE] FOREIGN KEY([OPENATURESTOCK])
    REFERENCES [dbo].[STOCK_TYPE] ([STKCODE])
    GO
     
    ALTER TABLE [dbo].[OPERATIONSTOCK] CHECK CONSTRAINT [FK_OPERATIONSTOCK_STOCK_TYPE]
    GO

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Il semble qu'il y ait un défaut de modélisation, et qu'il manque un héritage pour les tables PIECExxxLIGNES et PIECExxx. Avec cet héritage (et donc la colonne PLVDATE dans la table mère), vous n'auriez pas besoin de tous ces UNION (que vous pourriez d'ailleurs probablement remplacer par des UNION ALL)

    Par ailleurs, le manque d'indentation et les jointures non normalisée n'aident pas à la lecture de la requête.

    La solution proposée est donc plus pour le principe, sans toucher à la requête elle même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    WITH tmp AS (
       [Votre requete ici]
    )
    select *
        ,   CASE WHEN	    LAG(StockReel) OVER(ORDER BY DateLivraison) < 0
    			AND	    MIN(StockReel) OVER(ORDER BY DateLivraison ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) > 0 
    			 THEN 1 
    			ELSE 0 
    	   END AS DateDispo
    FROM tmp

  8. #8
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Juin 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Juin 2004
    Messages : 19
    Par défaut
    Au vu de vos réponses j'ai modifié/simplifié ma requête de base.
    En intégrant la première solution proposée cela donne :
    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
     
     
    WITH 
    T0  AS
    (
     
    SELECT    opeid,T.TIRCODE, T.TIRSOCIETE,'VENTE' as vente, PV.PCVNUM, OP.ARTID, A.ARTCODE as article,A.ARTDESIGNATION, B.STOCKREEL,  PLVDATE as DateLivraison,  OP.OPEQUANTITE * OP.OPESENS AS stkOut, 0 AS stkIn , OP.PICCODE, OP.OPENATURESTOCK 
    FROM      V_LST_ArTICLES AS A,   OPERATIONSTOCK AS OP, PIECEVENTELIGNES AS PVL, PIECEVENTES AS PV, TIERS AS T,  V_EXT_STOCK_ART_DEP_GENERAL AS B
    WHERE     OP.ARTID = a.ARTID AND OP.PCID = PV.PCVID  AND OP.PLID = PVL.PLVID AND OP.PICCODE = 'V' AND OP.OPENATURESTOCK = 'V' AND PV.TIRID = T.TIRID AND A.ARTISSTOCK ='O' AND OP.DEPID=1 AND OP.ARTID = B.ARTID AND a.artcode ='2017.07.21.3.06.26'
     
    UNION
     
    SELECT     opeid,T.TIRCODE, T.TIRSOCIETE,'ACHAT', PA.PCANUM, OP.ARTID, A.ARTCODE, A.ARTDESIGNATION, B.STOCKREEL, PAL.PLADATE, 0 AS stkOut, OP.OPEQUANTITE * OP.OPESENS AS stkIn, OP.PICCODE, OP.OPENATURESTOCK 
    FROM       V_LST_ArTICLES AS A,  OPERATIONSTOCK AS OP, PIECEACHATLIGNES AS PAL, PIECEACHATS AS PA, TIERS AS T, V_EXT_STOCK_ART_DEP_GENERAL AS B
    WHERE     OP.ARTID = a.ARTID AND OP.PCID = PA.PCAID  AND (OP.PLID = PAL.PLAID AND OP.PICCODE = 'A') AND  OP.OPENATURESTOCK = 'C' AND Pa.TIRID = T.TIRID AND A.ARTISSTOCK ='O' AND OP.DEPID=1 AND OP.ARTID = B.ARTID AND a.artcode ='2017.07.21.3.06.26'
     
    )
    SELECT DateLivraison As DateLiv, Sum (stkin -  stkout   )  OVER(ORDER BY  DateLivraison ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +  stockreel  As Solde
    From T0
     
    group by DateLivraison , Stkin, Stkout, stockreel
    Cela me donne le résultat escompté.

    Nom : PrevStock.PNG
Affichages : 225
Taille : 8,8 Ko

    Par contre je n'arrive pas à intégrer mon solde cumulé dans la clause Where

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    WHERE  DateLivraison > (SELECT MAX(DateLivraison)
                            FROM   T0 AS T11
                            WHERE  T11.Article = T0.Article
                              AND  T11.Solde  <= 0 )
    Provoque une erreur :
    Nom : Erreur.PNG
Affichages : 174
Taille : 10,1 Ko

Discussions similaires

  1. [VB.NET] Lire les dates d'une bd access dans un form Vb.net
    Par Herlece dans le forum Accès aux données
    Réponses: 6
    Dernier message: 03/01/2006, 09h38
  2. [Sécurité] suppression d'article dans un panier
    Par oceane751 dans le forum Langage
    Réponses: 3
    Dernier message: 03/12/2005, 15h50
  3. Réponses: 18
    Dernier message: 30/09/2005, 09h30
  4. inserer la date et l'heure systeme dans une table
    Par argon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/07/2005, 08h32
  5. Réponses: 3
    Dernier message: 23/09/2003, 09h12

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