歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> [易飛]包材Forcast四周滾動需求

[易飛]包材Forcast四周滾動需求

日期:2017/3/1 12:19:30   编辑:關於Linux

【背景】整理整頓, 倉庫最大的庫容占用在於包裝材料, 特別是紙箱,托盤,泡沫片,包裝管等,價值不高, 但占用面積比較大。
【解決方案】
1. 此類材料, 不走LRP請購即不在合同評審時下請購單。
2. 補貨將按庫存補貨點補貨,補貨點庫存, 初步將設定為3天平均用 量。物控一,三,五定期跑補貨報表。
3. 采購按補貨請購單的數量通知進貨。即我們的采購訂單就是供應商的進貨通知單。
因我們包材種類比較多,需求波動也比較大, 為方便供應商提前備他們的原材料, 及供應商建一定的安全庫存, 這邊會和IT小龔溝通一下, 專門這對此類材料開發滾動1個月的需求報表給采購, 由采購轉供應商備料和備成品。
要壓縮此類材料庫存, 關鍵在於供應商要有一定的備料庫存, 我們的補貨點是基於平均用量來算, 不排除個別時間段, 實際用量會超過平均用量比較多造成緊急進料, 請采購提前和供應商探討備料的可行性。


-- =============================================   
-- Author: <David Gong>   
-- Create date: <2015-12-22>  
-- Modify by: 
-- Description: <forcast for purchase>   
-- ============================================= 

ALTER PROC [dbo].[UP_ForcastForPur]
as
declare @NEEDAFTER BIT              --需求日期後的需求是否納入計算:1->是;0->否
declare @now as char(8), @wkdate1 as char(8), @wkdate2 as char(8), @wkdate3 as char(8), @wkdate4 as char(8)

set @NEEDAFTER=1
set @now=convert(char(8),getdate(),112)
set @wkdate1=convert(char(8),dateadd(week,1,getdate()),112)
set @wkdate2=convert(char(8),dateadd(week,2,getdate()),112)
set @wkdate3=convert(char(8),dateadd(week,3,getdate()),112) 
set @wkdate4=convert(char(8),dateadd(week,4,getdate()),112)
;
with A --計算預計領用需求
as(
select TB003 品號,ISNULL(SUM(TB004-TB005)*ISNULL(MD004,1)/ISNULL(MD003,1),0) as 預計領用,TA009 as 領用日期   
from MOCTA INNER JOIN MOCTB ON TA001=TB001 AND TA002=TB002 
     LEFT JOIN INVMD ON MD001=TB003 AND MD002=TB007 AND MD007='Y'
WHERE  UPPER(TA011)<>'Y'  AND TB018='Y'
      AND LEFT(TB003,3)='312' 
      AND TB015 >=@now AND TB015 <@wkdate4  --TB015<=(CASE @NEEDAFTER WHEN 1 THEN '99991231' ELSE @NEEDDATE END)
      --AND TA009 >=@now AND TA009 <@wkdate4   
group by TB003,TA009,MD004,MD003
),
B   --計算安全庫存量與現有庫存量
as(
select MC001 品號,MC004 安全庫存,MC007 現有庫存 from INVMC WHERE MC002='01' and  left(MC001,3)='312'
)
, C --計算4周預計領用分布
as(
SELECT A.品號,預計領用,
    case when A.領用日期 >=@now AND A.領用日期 <@wkdate1 then '第一周'
         when A.領用日期 >=@wkdate1 AND A.領用日期 <@wkdate2 then '第二周'
         when A.領用日期 >=@wkdate2 AND A.領用日期 <@wkdate3 then '第三周'
         when A.領用日期 >=@wkdate3 AND A.領用日期 <@wkdate4 then '第四周'
    else '其他' END 所屬周

FROM A 

)
--計算結果
select pvt.品號,MB002 AS 品名,MB003 AS 規格,MA002 AS 主供應商,
isnull(pvt.第一周,0) as 第一周,
isnull(pvt.第二周,0) as 第二周,
isnull(pvt.第三周,0) as 第三周,
isnull(pvt.第四周,0) as 第四周,
isnull(pvt.第一周,0)+isnull(pvt.第二周,0)+isnull(pvt.第三周,0)+isnull(pvt.第四周,0) 總需求,
case when (isnull(pvt.第一周,0)+isnull(pvt.第二周,0)+isnull(pvt.第三周,0)+isnull(pvt.第四周,0)-現有庫存)<=0  then 0 else (isnull(pvt.第一周,0)+isnull(pvt.第二周,0)+isnull(pvt.第三周,0)+isnull(pvt.第四周,0)-現有庫存) END as 缺料情況,現有庫存,
    CASE WHEN MB034='R' then '按補貨點' 
         WHEN MB034='M' then '按MRP需求' 
         WHEN MB034='L' then '按LRP需求' 
         WHEN MB034='N' then '不需'
    else '按歷史銷售' END as 補貨政策,
    @now+'~'+@wkdate4 as 日期
from ( select 品號,預計領用,所屬周 from C) p PIVOT(SUM(預計領用)  FOR 所屬周 in([第一周],[第二周],[第三周],[第四周])) as pvt
      INNER JOIN INVMB ON pvt.品號=MB001
      LEFT JOIN PURMA ON MB032=MA001
      INNER JOIN B ON pvt.品號=B.品號

order by pvt.品號

這裡寫圖片描述

Copyright © Linux教程網 All Rights Reserved