其實不用另外編程來分析﹐在ORACLE的工具PL/SQL DEVELOPER中有這樣的功能﹐你測試某個procedure時先按F9再按ctrl+n中可以看到這個procedure是怎么執行的了。下面給你一個procedure看一看﹕CREATE OR REPLACE Procedure Pro_Import_Odr_Part (Vi_Fact_No In Odrsfc.Fact_No%Type, Vi_Odr_No In Odrsfc.Odr_No%Type, Vi_Dept_Mk In Char, Vo_Msg Out Varchar2) Is /***************************************************************************************** 程式類別 : Procedure 程式功能 : 轉入訂單所有的部位資料到odrsfc表中﹐准備開鎖 1.從bomd中轉入所有部位﹐含追加部位 2.從預計用量中轉入直接輸入用量的部位(內盒﹑外箱等) 程式名稱 : Pro_Import_Odr_Part 傳入參數 : Vi_Fact_No:廠別 Vi_Odr_No:訂單號碼 Vi_Dept_Mk:部門注記 1.若vi_Dept_Mk = 'D'則轉底部部位 2.若vi_Dept_Mk = 'M'則轉面部部位﹐含加工﹑裁斷﹑針車﹑成型 傳出參數 : Vo_Msg 原設計者 : 撰寫日期 : 2003/06/26 ----------------------------------------異動記錄明細------------------------------------- 異 動 日 期 異 動 者 異 動 原 因 ******************************************************************************************/ V_Dept_No Odrsfc.Dept_No%Type; V_Error_Dept_No Odrsfc.Dept_No%Type;--Add By 李燕青 At 2003/12/11 V_Error_Unlock_Mk Odrsfc.Unlock_Mk%Type;--Add By 李燕青 At 2003/12/11 V_Old_Dept_No Odrsfc.Dept_No%Type; V_Unlock_Mk Odrsfc.Unlock_Mk%Type; V_Style_No Odrm.Style_No%Type; V_Model_Name Stylem.Model_Name%Type; V_Odr_Yymm Odrm.Odr_Yymm%Type; V_Odr_Type Odrm.Odr_Type%Type; V_Count Integer; V_Odr_Qty Odrsfcms.Odr_No%Type; V_Ret Char; ----------------------------------------------------------------------------- Procedure Process_Del_All (Vi_Fact_No_F In Odrsfcms.Fact_No%Type, Vi_Odr_No_F In Odrsfcms.Odr_No%Type , Vi_Dept_No_F In Odrsfcms.Dept_No%Type, Vi_Part_No_F In Odrsfcms.Part_No%Type, Vo_Msg_F Out Char) Is V_Sfced_Qty Odrsfcms.Sfced_Qty%Type; V_Sfcreq_Qty Odrneeds.Sfcreq_Qty%Type; V_Count_F Integer; Begin Begin Select Nvl(Sum(Nvl(Sfced_Qty,0)),0) Into V_Sfced_Qty From Odrsfcms Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F; Exception When Others Then V_Sfced_Qty:=0; End; Begin Select Nvl(Sum(Nvl(Sfcreq_Qty,0)),0) Into V_Sfcreq_Qty From Odrneeds Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F; Exception When Others Then V_Sfcreq_Qty:=0; End; Select Count(*) Into V_Count_F From Odrsfcd Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F And Sfcuse_Qty>0; If V_Sfced_Qty+V_Sfcreq_Qty=0 Then
Delete From Odrsfcms Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F ; Delete From Odrsfcm Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F ; Delete From Odrneeds Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F ; Delete From Odrneed Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F ; Delete From Odrsfc Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F ; Vo_Msg_F:='0'; Elsif V_Count_F>0 Then Vo_Msg_F:='2';--原投入部門已有派工回饋資料 Else Vo_Msg_F:='1'; End If; End; -----------------------------------------------------------------------------
接上面 Begin --按odrbomd部位轉入﹐若已轉入則不重復轉入,不轉入子部位(主料註記) --半成品歸屬類別semi_Mk為先期加工註記 --投入部份 --0加工,A裁斷b準備c針車d底加e成型f電繡 --1==》裁斷 2==》准備 3==》針車 4==》底加 5==》成型 --面: --製程投入別為加工input_Id = '0' Then -- 半成品類別semi_Id加工后到裁斷,針車,成型('A','C','E'),其餘不需要 --Else 非加工部位處理 -- 製程投入別為input_Id裁斷,針車,成型('A','C','E'),其餘不需要 --底: --製程投入別為底加input_Id = '4',其餘不需要 Begin Select Odrm.Style_No,Odrm.Odr_Type,Stylem.Model_Name,Odrm.Odr_Yymm Into V_Style_No,V_Odr_Type,V_Model_Name,V_Odr_Yymm From Odrm,Stylem Where Stylem.Fact_No = Odrm.Fact_No And Stylem.Style_No = Odrm.Style_No And Odrm.Fact_No = Vi_Fact_No And Odrm.Fact_Odr_No = Vi_Odr_No; Exception When Others Then Raise_Application_Error(-20002,'請檢查訂單檔中型號資料!'); End; --整理部位,因bom變更刪除廢棄不用的部位 For Rec_Odrsfc In ( Select Odrsfc.Fact_No,Odrsfc.Odr_No,Odrsfc.Part_No,Odrsfc.Dept_No From Odrsfc,Odrbomd Where Odrsfc.Fact_No = Vi_Fact_No And Odrsfc.Odr_No = Vi_Odr_No And Odrsfc.Fact_No = Odrbomd.Fact_No(+) And Odrsfc.Odr_No = Odrbomd.Odr_No(+) -- And Odrbomd.Artic_No(+)=V_Artic_No ==>因為odrbomd中有些部位對應的artic_No存放的是目的地資料 And Odrsfc.Part_No = Odrbomd.Part_No(+) And Rtrim(Odrbomd.Mat_No) Is Null ) Loop Process_Del_All(Rec_Odrsfc.Fact_No,Rec_Odrsfc.Odr_No, Rec_Odrsfc.Dept_No,Rec_Odrsfc.Part_No,V_Ret); End Loop;
For Rec_Part In ( Select Odrbomd.Artic_No,Odrbomd.Part_No, Odrbomd.Input_Id,Odrbomd.Semi_Id, Nvl(Odrbomd.Semi_Mk,'0') Semi_Mk,Odrbomd.Bom_Seq, Decode(Odrbomd.Input_Id,'1','1','2','2','3','3', '4','4','5','5','Z') Input_Dept, Decode(Odrbomd.Semi_Id,'1','1','2','2','3','3', '4','4','5','5','Z') Semi_Dept, --Decode(Odrbomd.Input_Id,'A','1','B','2','C','3', -- 'D','4','E','5','Z') Input_Dept, --Decode(Odrbomd.Semi_Id,'A','1','B','2','C','3', -- 'D','4','E','5','Z') Semi_Dept, Partm.Part_Class From Odrbomd,Partm Where Odrbomd.Fact_No = Vi_Fact_No And Odrbomd.Odr_No = Vi_Odr_No And Odrbomd.Same_Mk Is Null And Odrbomd.Part_No = Partm.Part_No Order By Odrbomd.Bom_Seq ) Loop
-- Rec_Part.Semi_Mk 寶一二廠抓型體先期部位注記 If Trim(Vi_Fact_No) In ('131','132','13A') And V_Odr_Yymm>='200406' Then Begin Select Nvl(Modelm_Partm.Advance,'0') Into Rec_Part.Semi_Mk From Modelm_Partm Where Modelm_Partm.Fact_No = Vi_Fact_No And Modelm_Partm.Model_Name = V_Model_Name And Modelm_Partm.Part_No = Rec_Part.Part_No; Exception When Others Then Rec_Part.Semi_Mk:='0'; End; End If;
V_Dept_No:=Null; If Vi_Dept_Mk = 'M' Then --If (Rec_Part.Input_Id = '0' And Rec_Part.Semi_Id In ('A','C','E')) Then If (Rec_Part.Input_Id = '0' And Rec_Part.Semi_Id In ('1','3','5')) Then V_Dept_No:=Substr(Rec_Part.Semi_Dept,1,1); --Elsif (Rec_Part.Input_Id <> '0' And Rec_Part.Input_Id In ('A','C','E')) Then Elsif (Rec_Part.Input_Id <> '0' And Rec_Part.Input_Id In ('1','3','5')) Then V_Dept_No:=Substr(Rec_Part.Input_Dept,1,1); End If; End If; If Vi_Dept_Mk = 'D' Then --If (Rec_Part.Input_Id = '0' And Rec_Part.Semi_Id ='D') Then If (Rec_Part.Input_Id = '0' And Rec_Part.Semi_Id ='4') Then V_Dept_No:=Substr(Rec_Part.Semi_Dept,1,1); --Elsif (Rec_Part.Input_Id ='D') Then Elsif (Rec_Part.Input_Id ='4') Then V_Dept_No:=Substr(Rec_Part.Input_Dept,1,1); End If; End If ;
接上面 --B品訂單,只能轉入包裝材料 --If V_Odr_Type='11' And Rec_Part.Part_Class<>'B' Then If V_Odr_Type='B' And Rec_Part.Part_Class<>'B' Then V_Dept_No:=Null; End If; --取得合法的部門,說明:如果不符所需的制程投入 --V_Dept_No為null --更新制程投入別(適用于制程投入別投錯的部位) --先期加工:底部部位設為'1'﹐全部設為先期加工 If Rtrim(V_Dept_No) Is Not Null Then Select Count(*) Into V_Count From Odrsfc Where Fact_No = Vi_Fact_No And Odr_No = Vi_Odr_No And Part_No = Rec_Part.Part_No ; -- 處理舊資料問題(同一部位因制程變更,已先后在兩個部門都有訂單轉入資料) Begin 李燕青 2003/12/11 /* If V_Count > 1 Then Select Unlock_Mk,Dept_No Into V_Error_Unlock_Mk,V_Error_Dept_No From Odrsfc Where Fact_No = Vi_Fact_No And Odr_No = Vi_Odr_No And Part_No = Rec_Part.Part_No And Dept_No <> V_Dept_No;
If V_Error_Unlock_Mk In ('0','1') Then --未開,需開鎖 Delete From Odrsfc Where Fact_No = Vi_Fact_No And Odr_No = Vi_Odr_No And Part_No = Rec_Part.Part_No And Dept_No = V_Error_Dept_No; Elsif V_Error_Unlock_Mk='2' Then Process_Del_All(Vi_Fact_No,Vi_Odr_No,V_Error_Dept_No,Rec_Part.Part_No,V_Ret); If V_Ret= '1' Then Raise_Application_Error(-20002,'制程變更:訂單號碼:'||Vi_Odr_No|| '原投入部門:'||V_Error_Dept_No|| ' 新投入部門:'||V_Dept_No|| ' 部位:'||Rec_Part.Part_No|| ' 請先刪除原有的派工資料!'); Elsif V_Ret= '2' Then Vo_Msg:='制程變更:訂單號碼:'||Vi_Odr_No|| '原投入部門:'||V_Error_Dept_No|| ' 新投入部門:'||V_Dept_No|| ' 部位:'||Rec_Part.Part_No|| ' 原投入部門已有派工回饋資料,無需再按新部門來派!'; End If; End If; End If; */ -- 處理舊資料問題(同一部位因制程變更,已先后在兩個部門都有訂單轉入資料) End 李燕青 2003/12/11 If V_Count <= 1 Then Begin Select Unlock_Mk,Dept_No Into V_Unlock_Mk,V_Old_Dept_No From Odrsfc Where Fact_No = Vi_Fact_No And Odr_No = Vi_Odr_No And Part_No = Rec_Part.Part_No ; Exception When Others Then V_Unlock_Mk:=Null; End; End If; --未有此部位 If V_Unlock_Mk Is Null Then Insert Into Odrsfc(Fact_No,Odr_No,Dept_No, Part_No,Unlock_Mk,Adv_Mk) Values(Vi_Fact_No,Vi_Odr_No,V_Dept_No, Rec_Part.Part_No,'0',Rec_Part.Semi_Mk);
Elsif V_Unlock_Mk In ('0','1') Then --未開,需開鎖 Update Odrsfc Set Dept_No = V_Dept_No Where Fact_No = Vi_Fact_No And Odr_No = Vi_Odr_No And Part_No = Rec_Part.Part_No ; Elsif (V_Unlock_Mk='2') And (V_Old_Dept_No<>V_Dept_No) Then --已派改部門,(已派不改部門,不處理) Process_Del_All(Vi_Fact_No,Vi_Odr_No,V_Old_Dept_No,Rec_Part.Part_No,V_Ret); If V_Ret= '0' Then Insert Into Odrsfc(Fact_No,Odr_No,Dept_No, Part_No,Unlock_Mk,Adv_Mk) Values(Vi_Fact_No,Vi_Odr_No,V_Dept_No, Rec_Part.Part_No,'0',Rec_Part.Semi_Mk);
Elsif V_Ret= '1' Then Raise_Application_Error(-20002,'制程變更:訂單號碼:'||Vi_Odr_No|| '原投入部門:'||V_Old_Dept_No|| ' 新投入部門:'||V_Dept_No|| ' 部位:'||Rec_Part.Part_No|| ' 請先刪除原有的派工資料!'); Else Vo_Msg:='制程變更:訂單號碼:'||Vi_Odr_No|| '原投入部門:'||V_Old_Dept_No|| ' 新投入部門:'||V_Dept_No|| ' 部位:'||Rec_Part.Part_No|| ' 原投入部門已有派工回饋資料,無需再按新部門來派!'; End If; End If; End If; End Loop; Vo_Msg :=Vo_Msg||'訂單部位轉入成功!!' ; --整理因訂單size變更; --個別size指令數增加時,修改開鎖注記為'需開鎖' --把已開鎖且寫入到訂單派工總檔的資料時行更新注記; V_Count := 0; Select Count(*) Into V_Count From Odrsfcms Where Fact_No =Vi_Fact_No And Odr_No = Vi_Odr_No; If V_Count>0 Then Begin Select Nvl(Sum(Nvl(Odrd.Qty,0)-Nvl(Odrsfcms.Odr_Qty,0)),0) Qty Into V_Odr_Qty From Odrd,(Select Odr_No,Sizerun,Odr_Qty From Odrsfcms Where Fact_No =Vi_Fact_No And Odr_No = Vi_Odr_No Group By Odr_No,Sizerun,Odr_Qty ) Odrsfcms Where Odrd.Fact_No =Vi_Fact_No And Odrd.Fact_Odr_No = Vi_Odr_No And Odrd.Fact_Odr_No=Odrsfcms.Odr_No(+) And Odrd.Sizerun=Odrsfcms.Sizerun(+); Exception When Others Then V_Odr_Qty:=0; End; If V_Odr_Qty> 0 Then Update Odrsfc Set Unlock_Mk = '1' Where Fact_No = Vi_Fact_No And Odr_No = Vi_Odr_No ; Vo_Msg := '訂單部位轉入成功!!個別size指令數有增加﹐請重新開鎖!'; End If; End If; Commit;
(Vi_Fact_No In Odrsfc.Fact_No%Type,
Vi_Odr_No In Odrsfc.Odr_No%Type,
Vi_Dept_Mk In Char,
Vo_Msg Out Varchar2)
Is
/*****************************************************************************************
程式類別 : Procedure
程式功能 : 轉入訂單所有的部位資料到odrsfc表中﹐准備開鎖
1.從bomd中轉入所有部位﹐含追加部位
2.從預計用量中轉入直接輸入用量的部位(內盒﹑外箱等)
程式名稱 : Pro_Import_Odr_Part
傳入參數 : Vi_Fact_No:廠別
Vi_Odr_No:訂單號碼
Vi_Dept_Mk:部門注記
1.若vi_Dept_Mk = 'D'則轉底部部位
2.若vi_Dept_Mk = 'M'則轉面部部位﹐含加工﹑裁斷﹑針車﹑成型
傳出參數 : Vo_Msg
原設計者 :
撰寫日期 : 2003/06/26
----------------------------------------異動記錄明細-------------------------------------
異 動 日 期 異 動 者 異 動 原 因
******************************************************************************************/
V_Dept_No Odrsfc.Dept_No%Type;
V_Error_Dept_No Odrsfc.Dept_No%Type;--Add By 李燕青 At 2003/12/11
V_Error_Unlock_Mk Odrsfc.Unlock_Mk%Type;--Add By 李燕青 At 2003/12/11
V_Old_Dept_No Odrsfc.Dept_No%Type;
V_Unlock_Mk Odrsfc.Unlock_Mk%Type;
V_Style_No Odrm.Style_No%Type;
V_Model_Name Stylem.Model_Name%Type;
V_Odr_Yymm Odrm.Odr_Yymm%Type;
V_Odr_Type Odrm.Odr_Type%Type;
V_Count Integer;
V_Odr_Qty Odrsfcms.Odr_No%Type;
V_Ret Char;
-----------------------------------------------------------------------------
Procedure Process_Del_All
(Vi_Fact_No_F In Odrsfcms.Fact_No%Type,
Vi_Odr_No_F In Odrsfcms.Odr_No%Type ,
Vi_Dept_No_F In Odrsfcms.Dept_No%Type,
Vi_Part_No_F In Odrsfcms.Part_No%Type,
Vo_Msg_F Out Char)
Is
V_Sfced_Qty Odrsfcms.Sfced_Qty%Type;
V_Sfcreq_Qty Odrneeds.Sfcreq_Qty%Type;
V_Count_F Integer;
Begin
Begin
Select Nvl(Sum(Nvl(Sfced_Qty,0)),0)
Into V_Sfced_Qty
From Odrsfcms
Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F
And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F;
Exception
When Others Then
V_Sfced_Qty:=0;
End;
Begin
Select Nvl(Sum(Nvl(Sfcreq_Qty,0)),0)
Into V_Sfcreq_Qty
From Odrneeds
Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F
And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F;
Exception
When Others Then
V_Sfcreq_Qty:=0;
End;
Select Count(*)
Into V_Count_F
From Odrsfcd
Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F
And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F
And Sfcuse_Qty>0; If V_Sfced_Qty+V_Sfcreq_Qty=0 Then
Delete From Odrsfcms
Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F
And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F ;
Delete From Odrsfcm
Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F
And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F ;
Delete From Odrneeds
Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F
And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F ;
Delete From Odrneed
Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F
And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F ;
Delete From Odrsfc
Where Fact_No = Vi_Fact_No_F And Odr_No = Vi_Odr_No_F
And Dept_No = Vi_Dept_No_F And Part_No = Vi_Part_No_F ;
Vo_Msg_F:='0';
Elsif V_Count_F>0 Then
Vo_Msg_F:='2';--原投入部門已有派工回饋資料
Else
Vo_Msg_F:='1';
End If;
End;
-----------------------------------------------------------------------------
Begin
--按odrbomd部位轉入﹐若已轉入則不重復轉入,不轉入子部位(主料註記)
--半成品歸屬類別semi_Mk為先期加工註記
--投入部份
--0加工,A裁斷b準備c針車d底加e成型f電繡
--1==》裁斷 2==》准備 3==》針車 4==》底加 5==》成型
--面:
--製程投入別為加工input_Id = '0' Then
-- 半成品類別semi_Id加工后到裁斷,針車,成型('A','C','E'),其餘不需要
--Else 非加工部位處理
-- 製程投入別為input_Id裁斷,針車,成型('A','C','E'),其餘不需要
--底:
--製程投入別為底加input_Id = '4',其餘不需要
Begin
Select Odrm.Style_No,Odrm.Odr_Type,Stylem.Model_Name,Odrm.Odr_Yymm
Into V_Style_No,V_Odr_Type,V_Model_Name,V_Odr_Yymm
From Odrm,Stylem
Where Stylem.Fact_No = Odrm.Fact_No
And Stylem.Style_No = Odrm.Style_No
And Odrm.Fact_No = Vi_Fact_No
And Odrm.Fact_Odr_No = Vi_Odr_No;
Exception
When Others Then
Raise_Application_Error(-20002,'請檢查訂單檔中型號資料!');
End;
--整理部位,因bom變更刪除廢棄不用的部位
For Rec_Odrsfc In ( Select Odrsfc.Fact_No,Odrsfc.Odr_No,Odrsfc.Part_No,Odrsfc.Dept_No
From Odrsfc,Odrbomd
Where Odrsfc.Fact_No = Vi_Fact_No
And Odrsfc.Odr_No = Vi_Odr_No
And Odrsfc.Fact_No = Odrbomd.Fact_No(+)
And Odrsfc.Odr_No = Odrbomd.Odr_No(+)
-- And Odrbomd.Artic_No(+)=V_Artic_No ==>因為odrbomd中有些部位對應的artic_No存放的是目的地資料
And Odrsfc.Part_No = Odrbomd.Part_No(+)
And Rtrim(Odrbomd.Mat_No) Is Null )
Loop
Process_Del_All(Rec_Odrsfc.Fact_No,Rec_Odrsfc.Odr_No,
Rec_Odrsfc.Dept_No,Rec_Odrsfc.Part_No,V_Ret);
End Loop;
For Rec_Part In ( Select Odrbomd.Artic_No,Odrbomd.Part_No,
Odrbomd.Input_Id,Odrbomd.Semi_Id,
Nvl(Odrbomd.Semi_Mk,'0') Semi_Mk,Odrbomd.Bom_Seq,
Decode(Odrbomd.Input_Id,'1','1','2','2','3','3',
'4','4','5','5','Z') Input_Dept,
Decode(Odrbomd.Semi_Id,'1','1','2','2','3','3',
'4','4','5','5','Z') Semi_Dept,
--Decode(Odrbomd.Input_Id,'A','1','B','2','C','3',
-- 'D','4','E','5','Z') Input_Dept,
--Decode(Odrbomd.Semi_Id,'A','1','B','2','C','3',
-- 'D','4','E','5','Z') Semi_Dept,
Partm.Part_Class
From Odrbomd,Partm
Where Odrbomd.Fact_No = Vi_Fact_No
And Odrbomd.Odr_No = Vi_Odr_No
And Odrbomd.Same_Mk Is Null
And Odrbomd.Part_No = Partm.Part_No
Order By Odrbomd.Bom_Seq )
Loop
-- Rec_Part.Semi_Mk 寶一二廠抓型體先期部位注記
If Trim(Vi_Fact_No) In ('131','132','13A') And V_Odr_Yymm>='200406' Then
Begin
Select Nvl(Modelm_Partm.Advance,'0')
Into Rec_Part.Semi_Mk
From Modelm_Partm
Where Modelm_Partm.Fact_No = Vi_Fact_No
And Modelm_Partm.Model_Name = V_Model_Name
And Modelm_Partm.Part_No = Rec_Part.Part_No;
Exception
When Others Then
Rec_Part.Semi_Mk:='0';
End;
End If;
V_Dept_No:=Null;
If Vi_Dept_Mk = 'M' Then
--If (Rec_Part.Input_Id = '0' And Rec_Part.Semi_Id In ('A','C','E')) Then
If (Rec_Part.Input_Id = '0' And Rec_Part.Semi_Id In ('1','3','5')) Then
V_Dept_No:=Substr(Rec_Part.Semi_Dept,1,1);
--Elsif (Rec_Part.Input_Id <> '0' And Rec_Part.Input_Id In ('A','C','E')) Then
Elsif (Rec_Part.Input_Id <> '0' And Rec_Part.Input_Id In ('1','3','5')) Then
V_Dept_No:=Substr(Rec_Part.Input_Dept,1,1);
End If;
End If;
If Vi_Dept_Mk = 'D' Then
--If (Rec_Part.Input_Id = '0' And Rec_Part.Semi_Id ='D') Then
If (Rec_Part.Input_Id = '0' And Rec_Part.Semi_Id ='4') Then
V_Dept_No:=Substr(Rec_Part.Semi_Dept,1,1);
--Elsif (Rec_Part.Input_Id ='D') Then
Elsif (Rec_Part.Input_Id ='4') Then
V_Dept_No:=Substr(Rec_Part.Input_Dept,1,1);
End If;
End If ;
--B品訂單,只能轉入包裝材料
--If V_Odr_Type='11' And Rec_Part.Part_Class<>'B' Then
If V_Odr_Type='B' And Rec_Part.Part_Class<>'B' Then
V_Dept_No:=Null;
End If;
--取得合法的部門,說明:如果不符所需的制程投入
--V_Dept_No為null
--更新制程投入別(適用于制程投入別投錯的部位)
--先期加工:底部部位設為'1'﹐全部設為先期加工
If Rtrim(V_Dept_No) Is Not Null Then
Select Count(*)
Into V_Count
From Odrsfc
Where Fact_No = Vi_Fact_No
And Odr_No = Vi_Odr_No
And Part_No = Rec_Part.Part_No ;
-- 處理舊資料問題(同一部位因制程變更,已先后在兩個部門都有訂單轉入資料) Begin 李燕青 2003/12/11
/* If V_Count > 1 Then
Select Unlock_Mk,Dept_No
Into V_Error_Unlock_Mk,V_Error_Dept_No
From Odrsfc
Where Fact_No = Vi_Fact_No
And Odr_No = Vi_Odr_No
And Part_No = Rec_Part.Part_No
And Dept_No <> V_Dept_No;
If V_Error_Unlock_Mk In ('0','1') Then --未開,需開鎖
Delete From Odrsfc
Where Fact_No = Vi_Fact_No
And Odr_No = Vi_Odr_No
And Part_No = Rec_Part.Part_No
And Dept_No = V_Error_Dept_No;
Elsif V_Error_Unlock_Mk='2' Then
Process_Del_All(Vi_Fact_No,Vi_Odr_No,V_Error_Dept_No,Rec_Part.Part_No,V_Ret);
If V_Ret= '1' Then
Raise_Application_Error(-20002,'制程變更:訂單號碼:'||Vi_Odr_No||
'原投入部門:'||V_Error_Dept_No||
' 新投入部門:'||V_Dept_No||
' 部位:'||Rec_Part.Part_No||
' 請先刪除原有的派工資料!');
Elsif V_Ret= '2' Then
Vo_Msg:='制程變更:訂單號碼:'||Vi_Odr_No||
'原投入部門:'||V_Error_Dept_No||
' 新投入部門:'||V_Dept_No||
' 部位:'||Rec_Part.Part_No||
' 原投入部門已有派工回饋資料,無需再按新部門來派!';
End If;
End If;
End If; */
-- 處理舊資料問題(同一部位因制程變更,已先后在兩個部門都有訂單轉入資料) End 李燕青 2003/12/11
If V_Count <= 1 Then
Begin
Select Unlock_Mk,Dept_No
Into V_Unlock_Mk,V_Old_Dept_No
From Odrsfc
Where Fact_No = Vi_Fact_No
And Odr_No = Vi_Odr_No
And Part_No = Rec_Part.Part_No ;
Exception
When Others Then
V_Unlock_Mk:=Null;
End;
End If;
--未有此部位
If V_Unlock_Mk Is Null Then
Insert Into Odrsfc(Fact_No,Odr_No,Dept_No,
Part_No,Unlock_Mk,Adv_Mk)
Values(Vi_Fact_No,Vi_Odr_No,V_Dept_No,
Rec_Part.Part_No,'0',Rec_Part.Semi_Mk);
Elsif V_Unlock_Mk In ('0','1') Then --未開,需開鎖
Update Odrsfc
Set Dept_No = V_Dept_No
Where Fact_No = Vi_Fact_No
And Odr_No = Vi_Odr_No
And Part_No = Rec_Part.Part_No ;
Elsif (V_Unlock_Mk='2') And (V_Old_Dept_No<>V_Dept_No) Then --已派改部門,(已派不改部門,不處理)
Process_Del_All(Vi_Fact_No,Vi_Odr_No,V_Old_Dept_No,Rec_Part.Part_No,V_Ret);
If V_Ret= '0' Then
Insert Into Odrsfc(Fact_No,Odr_No,Dept_No,
Part_No,Unlock_Mk,Adv_Mk)
Values(Vi_Fact_No,Vi_Odr_No,V_Dept_No,
Rec_Part.Part_No,'0',Rec_Part.Semi_Mk);
Elsif V_Ret= '1' Then
Raise_Application_Error(-20002,'制程變更:訂單號碼:'||Vi_Odr_No||
'原投入部門:'||V_Old_Dept_No||
' 新投入部門:'||V_Dept_No||
' 部位:'||Rec_Part.Part_No||
' 請先刪除原有的派工資料!');
Else
Vo_Msg:='制程變更:訂單號碼:'||Vi_Odr_No||
'原投入部門:'||V_Old_Dept_No||
' 新投入部門:'||V_Dept_No||
' 部位:'||Rec_Part.Part_No||
' 原投入部門已有派工回饋資料,無需再按新部門來派!';
End If;
End If;
End If;
End Loop;
Vo_Msg :=Vo_Msg||'訂單部位轉入成功!!' ; --整理因訂單size變更;
--個別size指令數增加時,修改開鎖注記為'需開鎖'
--把已開鎖且寫入到訂單派工總檔的資料時行更新注記;
V_Count := 0;
Select Count(*)
Into V_Count
From Odrsfcms
Where Fact_No =Vi_Fact_No
And Odr_No = Vi_Odr_No;
If V_Count>0 Then
Begin
Select Nvl(Sum(Nvl(Odrd.Qty,0)-Nvl(Odrsfcms.Odr_Qty,0)),0) Qty
Into V_Odr_Qty
From Odrd,(Select Odr_No,Sizerun,Odr_Qty
From Odrsfcms
Where Fact_No =Vi_Fact_No
And Odr_No = Vi_Odr_No
Group By Odr_No,Sizerun,Odr_Qty ) Odrsfcms
Where Odrd.Fact_No =Vi_Fact_No
And Odrd.Fact_Odr_No = Vi_Odr_No
And Odrd.Fact_Odr_No=Odrsfcms.Odr_No(+)
And Odrd.Sizerun=Odrsfcms.Sizerun(+);
Exception
When Others Then
V_Odr_Qty:=0;
End;
If V_Odr_Qty> 0 Then
Update Odrsfc
Set Unlock_Mk = '1'
Where Fact_No = Vi_Fact_No
And Odr_No = Vi_Odr_No ;
Vo_Msg := '訂單部位轉入成功!!個別size指令數有增加﹐請重新開鎖!';
End If;
End If; Commit;
End;