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 : 331
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.