2011年6月23日 星期四

@CASE 1 <物料需求計算> ver-110701

資料庫 table 關聯 說明
===================================================
APEX
庫存基本檔 tblStock - 舊料號找新料號
( PartCode 新料號 )
( 可以在 PartRule 作字串處理,切出舊料號, 一個舊料號可能有兩個新料號(+判斷?) )


訂貨單 tblOrder - 找 訂單號的 最新訂單版本中 定了哪些 料號
( OderNo 訂貨單號 )
( table 裡面有切割出幾個欄位可以跟 FoxPro 的資料作關聯 )

( FormVersion 單據版本 )
( 可以與 OderNo 結合,)

訂貨單細項 tblOrderDet - 從訂單號去找說 定哪些料號的版本, 數量, 客戶規格是什麼
( 與 訂貨單 作關聯 OrderNo)
( 去撈說該筆訂單 有定哪些 料號 PartCode (成品 PdtCode )
   與 (tblOrderDet, tblBOMPdt ) PdtVersion ,
   該料號定了多少的 數量 Qty )


選配基本 tblComb - 可以從 選配編號( CombCode ) 去找說
                                 產品編號( PdtCode ) 與 客戶ID( CustID)
(可以直接從選配細項找選配料號,是否這邊可以不作?)
(選配編號如何編碼?)
()

選配細項 tblCombDet - 從 製程編號( ProcCode ) 去找說 有哪些選配料號( CombPartCode )
================================================================
FoxPro
mmac.dbf   - 使用者輸入 製造日期, 客戶名稱 作為篩選條件
( 製造日期 : Trndate )
( 舊料號 : part ) <tblStock.PartRule>
(訂貨單號 : Mark + Ordno + Trndate) <tblOrder.OderNo: CustOrderNo + OrderDate >
               廠商商標+訂單號+訂單日期                          廠商商標訂單號+訂單日期

訂貨單號可以查找資料,舊料號有意義?


======================================================
1.以"日期範圍"查詢 各物料總需求量 ( 訂單日期 )
2.以"客戶範圍"(AAA~ZZZ之類)查詢 各物料總需求量 ( Mark )

3.顯示各表單關心的資訊 ( 分開 or join )
    目標 : 統計各材料 使用數 基數 去計算 用量
               [tblBOMPart 材料] :  使用數 PartNum  /  基數 CardNum = 用量

4.必須包含各細項物料的詳細資訊表單
   與各物料統計資訊的表單
5.報表能夠列印,能夠轉 Excel

6.訂單 要抓最新版本的 (是說 FoxPro檔案 並不會隨著 tblOrder 改單版本有所變更?)
     Status = 2 訂單已被核對
     FormVersion = MAX 訂單為最新版本
   去撈 該客戶在定單中所訂購的 產品量 ( 成品量 )

   物料不一定是最新版本

[tblBOMPart 材料]  "PdtKey" "PdtVersion"  "ProcKey" "ProcCode" "PartCode"
[tblBOMPdt 成品]   "PdtKey" "PdtVersion"
[tblBOMProc 製程]  "PdtKey" "PdtVersion" "ProcKey" "ProcCode"
[tblOrder 訂單]         "OrderNo"

一個 [訂單] -> 多個 [訂單細項], 一個 [訂單細項] -> 一個 [成品]
一個 [成品] -> 多個 [製程], 一個 [製程] -> 多個 [材料]

7.[tblOrderDet 訂單細項] [tblBOMPdt 成品]
   以 "PdtCode"與"PdtVersion" 作關聯

   * tblBOMPdt.PdtCode = tblOrderDet.PartCode

'1.訂單 + 訂單Det + Pdt
SELECT Odet.OrderNo,Ord.OrderDate,
       Ord.CustID, Odet.PartCode,
       Odet.PdtVersion , Odet.Qty
FROM tblOrder Ord, tblOrderDet Odet, tblBOMPdt Pdt
WHERE Ord.OrderNo = Odet.OrderNo
AND Odet.PartCode = Pdt.PdtCode
AND Odet.PdtVersion = Pdt.PdtVersion


8.[tblBOMPdt 成品] [tblBOMProc 製程]
   以 "pdt.PdtCode"=  "proc.ProcCode" 與"PdtKey"與"PdtVersion" 作關聯
   撈出"ProcKey"
   透過"製程型號"去找材料 ( 原料,半成品 )

   * PdtCode = ProcCode ( 有例外 要問 )

'2.Pdt + Proc
'撈出不同產品的 製程型號 ProcCode

SELECT  Proce.ProcCode, Proce.ProcKey, Proce.PdtKey,
       Proce.PdtVersion, Proce.ProcNum
FROM tblBOMPdt Pdt, tblBOMProc Proce
WHERE Pdt.PdtCode = Proce.ProcCode
AND Pdt.PdtKey = Proce.PdtKey
AND Pdt.PdtVersion = Proce.PdtVersion





9.[tblBOMProc 製程] [tblBOMPart 材料]
   以 "PdtKey"與"PdtVersion"與"ProcCode"與"ProcKey"與 作關聯
   撈出 "PartCode" 主鍵

'3.Proc + Part
'以各材料分類 , 去統計  總使用量

SELECT Part.PartCode, Part.PdtVersion, Part.PdtKey,
       Proce.ProcCode, Part.ProcKey,
       SUM( Proce.ProcNum * ( Part.PartNum / Part.CardNum * 1000 ) )AS PartCost
FROM tblBOMProc Proce, tblBOMPart Part
WHERE Proce.PdtKey = Part.PdtKey
AND Proce.PdtVersion = Part.PdtVersion
AND Proce.ProcCode = Part.ProcCode
AND Proce.ProcKey = Part.ProcKey
GROUP BY Part.PartCode, Part.PdtVersion,
         Part.PdtKey, Proce.ProcCode, Part.ProcKey



10. [tblComb 選配]  [tblOrderDet 訂貨單細項] + [FoxPro 檔案]
     以"CustSpec 客戶規格"與"Mark" 作關聯
     去撈 tblComb.CombCode

11.需要呈現的資料
    訂單號
    訂單日期
    客戶規格
    客戶
    成品內容  "PartCode"
    材料耗用數量 "使用量 = CardNum / PartNum "
 
    以原物料的 PartCode 去排序
    所有原物料細項
    所有原物料統計
    ( 使用數 基數 之間的計算 )


   *成品 Pdt ( 成品 ), 製程 Proc ( 半成品 ), 材料 Part ( 原料 )
   *單位換算 製程 : 公克  (每個成品所需耗用 製程 中的半成品多少公克 )
                      材料 :   ( 在每個製程中 所佔的百分比 ( PartNum(公斤) / CardNum(公克) ) )
   *好像 使用數 = 製程的使用數 X 材料在製程中 所佔的百分比
           ( 製程 .ProcNum X 材料.PartNum(公斤) / 材料.CardNum(公克) )
        ( tblBOMProc.ProcNum * ( tblBOMPart.PartNum / tblBOMPart.CardNum * 1000 )) AS ProcCost
   *統計 每個材料的使用量總合
       SUM( ProcCost )  SELF JOIN


-----------------------------------------------------------
分成幾個 Table
用 JOIN ON 交集條件
來結合
1.訂單 + 訂單Det + Pdt
2.Pdt + Proc
3.Proc + Part (SUM)

=========================================================
'Stock 與 mmac 以舊料號(Stock.PartRule = mmac.part)去找 新料號 ( Stock.PartCode )

'mmac 與 訂單 與 訂單Det, Pdt 以

         Mark + Ordno + Trndate
        'tblOrder.OderNo : CustOrderNo + OrderDate
        '取訂單 已核對過 的 Status = 2
        '以核對訂單 取 版本最新 FormVersion = MAX
 去找 訂單號, 撈 訂單料號

'mmac,訂單Det 以 mark = Det.CustID,


'各材料在該 製程 的 使用量
SELECT ( tblBOMProc.ProcNum * ( A1.PartNum / A1.CardNum * 1000 ) )AS ProcCost
FROM  tblBOMPart As A1, tblBOMProc
WHERE A1.ProcCode=tblBOMProc.ProcCode
AND A1.ProcKey=tblBOMProc.ProcKey
AND A1.PdtKey=tblBOMProc.PdtKey
AND A1.PdtVersion=tblBOMProc.PdtVersion

'以各材料分類 , 去統計  總使用量
SELECT A1.PartCode,
SUM( tblBOMProc.ProcNum * ( A1.PartNum / A1.CardNum * 1000 ) )AS PartCost
FROM  tblBOMPart As A1, tblBOMProc
WHERE A1.ProcCode=tblBOMProc.ProcCode
AND A1.ProcKey=tblBOMProc.ProcKey
AND A1.PdtKey=tblBOMProc.PdtKey
AND A1.PdtVersion=tblBOMProc.PdtVersion
GROUP BY A1.PartCode

'撈訂單中有哪些成品( PartCode )被訂購,訂購多少數量( Qty )
'結合 tblBOMPdt

SELECT Odet.OrderNo,Ord.OrderDate,
       Ord.CustID, Odet.PartCode,
       Odet.PdtVersion , Odet.Qty
FROM tblOrder Ord, tblOrderDet Odet, tblBOMPdt Pdt
WHERE Ord.OrderNo = Odet.OrderNo
AND Odet.PartCode = Pdt.PdtCode
AND Odet.PdtVersion = Pdt.PdtVersion




再來可能就要找地點相關資料

======================================================
邏輯架構

'textbox 條件輸入 ( 123:date, 456:cust)
if ( box1 not null )
 do box1SQL
  else if ( box2 not null ) && ( box3 not null )
      do box2SQL & box3SQL
         else if ( box3 not null )
             do box3SQL
   else
      do
else
 msg( box1 null )

======================================================
介面設計

方案一
1. 登入介面 ( 需不需要作 權限程度 )
2. 選單介面 ( 需不需要作 有哪些項目 )
3. 篩選介面 ( 各條件篩選 資料檢查 )
4. 報表介面 ( 呈現Table 轉Excel 列印 )
     要有物料細項 Table ( 物料編號, 品名, 預估用量, 單位)
     要有物料各項相關統計 Table ( 物料編號, 品名, 總預估用量, 單位)
     可以選擇 要轉的 或 要列印的 Table

方案二
1. 登入介面
2. 選單介面 ( 需不需要作 有哪些項目 )
3. 篩選 與 報表 再同一畫面
     如果這樣 Table 應該要怎麼切
     應該如何呈現

沒有留言:

張貼留言