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
|
SET TERM ^ ;
create or alter procedure STOCK_SORTIR (
PDEPOT type of column STOCKDETAIL.STD_DEPOT,
PARTICLE type of column STOCKDETAIL.STD_ARTICLE,
PQTE type of column STOCKDETAIL.STD_QTE)
as
declare variable VSTD_HEURE time;
declare variable VSTD_DATE date;
declare variable QTE_LIGNE numeric(15,4);
declare variable QTE_ASORTIR numeric(15,4);
BEGIN
QTE_ASORTIR = :PQTE;
FOR SELECT
STD_QTE,
STD_DATE,
STD_HEURE
FROM STOCKDETAIL
WHERE
(STD_DEPOT = :PDEPOT) AND
(STD_ARTICLE = :PARTICLE)
ORDER BY
STD_DATE ASC,
STD_HEURE ASC
INTO
:QTE_LIGNE,
:VSTD_DATE,
:VSTD_HEURE
DO
BEGIN
/*Si la qté de la ligne stock détail est inférieur ou égale à la qté à sortir*/
if (:QTE_LIGNE <= :QTE_ASORTIR) then
BEGIN
/*On sauvegarde la qté restant*/
QTE_ASORTIR = :QTE_LIGNE - :QTE_ASORTIR;
/*On vire la ligne correspondant*/
DELETE FROM STOCKDETAIL
WHERE
(STD_DEPOT = :PDEPOT) AND
(STD_ARTICLE = :PARTICLE) AND
(STD_DATE = :VSTD_DATE) AND
(STD_HEURE = :VSTD_HEURE);
END
ELSE
BEGIN
/*On met à jour la ligne*/
UPDATE STOCKDETAIL
SET
STD_QTE = STD_QTE - :QTE_ASORTIR
WHERE
(STD_DEPOT = :PDEPOT) AND
(STD_ARTICLE = :PARTICLE) AND
(STD_DATE = :VSTD_DATE) AND
(STD_HEURE = :VSTD_HEURE);
QTE_ASORTIR = 0;
END
QTE_ASORTIR = Abs(:QTE_ASORTIR);
IF (:QTE_ASORTIR = 0) THEN
EXIT;
END
END^
SET TERM ; ^ |
Partager