1. 程式人生 > >Oracle EBS Interface/API(7)--建立WIP任務單

Oracle EBS Interface/API(7)--建立WIP任務單

系統版本:
          RDBMS : 9.2.0.6.0

1.根據裝配件自動建立任務

Declare
  l_iface_rec wip.wip_job_schedule_interface%ROWTYPE;
  --任務單--元件
  l_GroupId   Number := 123456;
  l_OrganizationId Number :=122;
  l_UserId   Number:=0;
Begin
  --*****Start任務單裝配件*****----
  l_iface_rec.last_update_date  := SYSDATE;
  l_iface_rec.last_updated_by   := l_UserId;
  l_iface_rec.creation_date     := SYSDATE;
  l_iface_rec.created_by        := l_UserId;
  l_iface_rec.last_update_login := fnd_profile.value('LOGIN_ID');
  l_iface_rec.group_id          := l_GroupId;
  l_iface_rec.load_type         := 1;
  l_iface_rec.process_phase     := 2;
  l_iface_rec.process_status    := 1;
  --1為未發放(UnReleased),3為建立任務單以後狀態自動已發放(Released)
  l_iface_rec.status_type           := 3; --1 UnReleased/3 Released 需要開會計期
  --預設為Y,若為Y時,則無須把元件、工序和資源等等資料插入介面表WIP.WIP_JOB_SCHEDULE_INTERFACE。
  --若為N時,則需要往介面表表WIP.WIP_JOB_SCHEDULE_INTERFACE插入元件、工序和資源等等資料
  l_iface_rec.allow_explosion       := 'Y';
  --任務單名稱
  l_iface_rec.job_name              := 'TEST131112_001';  
  --組織標識
  l_iface_rec.organization_id       := l_OrganizationId;
  --裝配件標識
  l_iface_rec.primary_item_id       := 463235;
  --開始數量
  l_iface_rec.start_quantity        := 435;
  --開始日期
  l_iface_rec.first_unit_start_date := SYSDATE;
  --任務單來源 自定義
  l_iface_rec.source_code           := 'WIPPLAN';  
  --來源標識 自定義
  l_iface_rec.source_line_id        := 0;   
  --題頭標識 自定義
  l_iface_rec.Header_Id                  := 3452; 
  l_iface_rec.first_unit_start_date      := Sysdate;
  l_iface_rec.First_Unit_Completion_Date := Null;
  l_iface_rec.last_unit_start_date       := Null;
  l_iface_rec.last_unit_completion_date  := Sysdate;
  INSERT INTO WIP.WIP_JOB_SCHEDULE_INTERFACE VALUES l_iface_rec;
  --*****End 任務單裝配件*****----
End;

2.手工建立任務單(元件、工序和資源)如下:

Declare
  --任務單
  l_iface_rec wip.wip_job_schedule_interface%ROWTYPE;
  --任務單-元件
  l_CompRec wip.wip_job_dtls_interface%ROWTYPE;
  --任務單-工序
  l_OpRec wip.wip_job_dtls_interface%ROWTYPE;
  --任務單-資源
  l_ResRec WIP.WIP_JOB_DTLS_INTERFACE%ROWTYPE;

  l_GroupId        Number := 123456;
  l_OrganizationId Number := 122;
  l_UserId         Number := 0;
Begin
  --*****Start任務單裝配件*****----
  l_iface_rec.last_update_date  := SYSDATE;
  l_iface_rec.last_updated_by   := l_UserId;
  l_iface_rec.creation_date     := SYSDATE;
  l_iface_rec.created_by        := l_UserId;
  l_iface_rec.last_update_login := fnd_profile.value('LOGIN_ID');
  l_iface_rec.group_id          := l_GroupId;
  l_iface_rec.load_type         := 1;
  l_iface_rec.process_phase     := 2;
  l_iface_rec.process_status    := 1;
  --1為未發放(UnReleased),3為建立任務單以後狀態自動已發放(Released)
  l_iface_rec.status_type := 3; --1 UnReleased/3 Released 需要開會計期
  --預設為Y,若為Y時,則無須把元件、工序和資源等等資料插入介面表WIP.WIP_JOB_SCHEDULE_INTERFACE。
  --若為N時,則需要往介面表表WIP.WIP_JOB_SCHEDULE_INTERFACE插入元件、工序和資源等等資料
  l_iface_rec.allow_explosion := 'N';
  --任務單名稱
  l_iface_rec.job_name := 'TEST131112_001';
  --組織標識
  l_iface_rec.organization_id := l_OrganizationId;
  --裝配件標識
  l_iface_rec.primary_item_id := 463235;
  --開始數量
  l_iface_rec.start_quantity := 435;
  --開始日期
  l_iface_rec.first_unit_start_date := SYSDATE;
  --任務單來源 自定義
  l_iface_rec.source_code := 'WIPPLAN';
  --來源標識 自定義
  l_iface_rec.source_line_id := 0;
  --題頭標識 自定義
  l_iface_rec.Header_Id                  := 3452;
  l_iface_rec.first_unit_start_date      := Sysdate;
  l_iface_rec.First_Unit_Completion_Date := Null;
  l_iface_rec.last_unit_start_date       := Null;
  l_iface_rec.last_unit_completion_date  := Sysdate;
  INSERT INTO WIP.WIP_JOB_SCHEDULE_INTERFACE VALUES l_iface_rec;
  --*****End 任務單裝配件*****----
  --*****Start 任務單元件*****---
  --可以新增、刪除或修改多個元件
  --工序 WIP_REQUIREMENT_OPERATIONS.OPERATION_SEQ_NUM
  l_CompRec.OPERATION_SEQ_NUM := 10;
  --舊元件
  l_CompRec.INVENTORY_ITEM_ID_OLD := Rs.Inventory_Item_Id_Old;
  --新元件 新增時必輸項
  l_CompRec.INVENTORY_ITEM_ID_NEW := Rs.Inventory_Item_Id_New;
  --主要 每個裝配件 WIP_REQUIREMENT_OPERATIONS.QUANTITY_PER_ASSEMBLY
  l_CompRec.QUANTITY_PER_ASSEMBLY := Rs.Quantity_Per_Assembly;
  --主要 部門 WIP_REQUIREMENT_OPERATIONS.DEPARTMENT_ID
  l_CompRec.DEPARTMENT_ID := Rs.Department_Id;
  --供應 型別 WIP_REQUIREMENT_OPERATIONS.WIP_SUPPLY_TYPE
  l_CompRec.WIP_SUPPLY_TYPE := Rs.Wip_Supply_Type;
  --主要 需求日期 WIP_REQUIREMENT_OPERATIONS.DATE_REQUIRED
  l_CompRec.DATE_REQUIRED := Sysdate;
  --供應 子庫存 WIP_REQUIREMENT_OPERATIONS.SUPPLY_SUBINVENTORY
  l_CompRec.SUPPLY_SUBINVENTORY := Rs.Supply_Subinventory;
  --供應 貨位標識 WIP_REQUIREMENT_OPERATIONS.SUPPLY_LOCATOR_ID
  l_CompRec.SUPPLY_LOCATOR_ID := Rs.Supply_Locator_Id;
  --是否MRP淨需求,預設值為1 WIP_REQUIREMENT_OPERATIONS.MRP_NET_FLAG
  l_CompRec.MRP_NET_FLAG := Rs.Mrp_Net_Flag;
  --主需求計劃數量  WIP_REQUIREMENT_OPERATIONS.Mps_Required_Quantity
  l_CompRec.MPS_REQUIRED_QUANTITY := Rs.Mps_Required_Quantity;
  --主需求計劃日期 WIP_REQUIREMENT_OPERATIONS.MPS_DATE_REQUIRED 
  l_CompRec.MPS_DATE_REQUIRED := Rs.Mps_Date_Required;
  --當是元件介面資料時,其值必須為2
  l_CompRec.LOAD_TYPE := 2;
  --與建立任務單題頭的相同:WIP.WIP_JOB_SCHEDULE_INTERFACE.HEADER_ID
  l_CompRec.PARENT_HEADER_ID := 3452;
  --元件-備註 WIP_REQUIREMENT_OPERATIONS.COMMENTS
  l_CompRec.DESCRIPTION       := '測試元件';
  l_CompRec.LAST_UPDATE_DATE  := Sysdate;
  l_CompRec.LAST_UPDATED_BY   := l_UserId;
  l_CompRec.CREATION_DATE     := Sysdate;
  l_CompRec.CREATED_BY        := l_UserId;
  l_CompRec.LAST_UPDATE_LOGIN := fnd_profile.value('LOGIN_ID');
  l_CompRec.Process_Phase     := 2; --預設值
  l_CompRec.Process_Status    := 1; --預設值
  l_CompRec.Group_Id          := l_GroupId;
  /*
  刪除:wip_job_details.WIP_DELETE預設為1
  新增:wip_job_details.wip_add預設值為2
  修改:wip_job_details.WIP_CHANGEl預設值為3*/
  l_CompRec.Substitution_Type := wip_job_details.wip_add;
  Insert Into WIP.WIP_JOB_DTLS_INTERFACE Values l_CompRec;
  --*****End 任務單元件*****---

  --*****Start 任務單工序****--
  --工序 WIP_OPERATIONS.Operation_Seq_Num
  l_OpRec.Operation_Seq_Num := l_CompRec.OPERATION_SEQ_NUM;
  --部門 WIP_OPERATIONS.Department_Id
  l_OpRec.Department_Id := l_CompRec.Department_Id;
  l_OpRec.Load_Type     := 3;
  --供應商型別
  l_OpRec.Wip_Supply_Type  := l_CompRec.Wip_Supply_Type;
  l_OpRec.Parent_Header_Id := l_iface_rec.Header_Id;
  l_OpRec.Description      := '測試工序';
  --準標工序標識 WIP_OPERATIONS.Standard_Operation_Id
  l_OpRec.Standard_Operation_Id := 6;
  --日期 第一個裝配件起始日期 WIP_OPERATIONS.FIRST_UNIT_START_DATE
  l_OpRec.First_Unit_Start_Date := Sysdate;
  --日期 第一個裝配件完成日期 WIP_OPERATIONS.First_Unit_Completion_Date
  l_OpRec.First_Unit_Completion_Date := Sysdate;
  --日期 最後一個裝配件起始日期 WIP_OPERATIONS.Last_Unit_Start_Date
  l_OpRec.Last_Unit_Start_Date := Sysdate;
  --日期 最後一個裝配件起始日期 WIP_OPERATIONS.Last_Unit_Completion_Date
  l_OpRec.Last_Unit_Completion_Date := Sysdate;
  --主要 最小傳送量 WIP_OPERATIONS.MINIMUM_TRANSFER_QUANTITY
  l_OpRec.Minimum_Transfer_Quantity := 0;
  --主要 倒衝 WIP_OPERATIONS.Backflush_Flag
  l_OpRec.Backflush_Flag := 1;
  --主要 計數點 WIP_OPERATIONS.Count_Point_Type
  l_OpRec.Count_Point_Type  := 1;
  l_OpRec.Last_Update_Date  := Sysdate;
  l_OpRec.Last_Updated_By   := l_UserId;
  l_OpRec.Creation_Date     := Sysdate;
  l_OpRec.Created_By        := l_UserId;
  l_OpRec.Last_Update_Login := fnd_profile.value('LOGIN_ID');
  l_OpRec.Process_Phase     := 2; --預設值
  l_OpRec.Process_Status    := 1; --預設值
  l_OpRec.Group_Id          := l_GroupId;
  /*
  刪除:wip_job_details.WIP_DELETE預設為1
  新增:wip_job_details.wip_add預設值為2
  修改:wip_job_details.WIP_CHANGEl預設值為3*/
  l_OpRec.Substitution_Type := wip_job_details.wip_add;
  Insert Into WIP.WIP_JOB_DTLS_INTERFACE Values l_OpRec;
  --*****End 任務單工序****--

  --*****Start 任務單資源***---
  --可以新增、刪除或修改多個資源
  --工序  WIP_OPERATION_RESOURCES.Operation_Seq_Num
  l_ResRec.OPERATION_SEQ_NUM := l_CompRec.OPERATION_SEQ_NUM;
  --資源序號 WIP_OPERATION_RESOURCES.RESOURCE_SEQ_NUM
  l_ResRec.RESOURCE_SEQ_NUM := 10;
  --新資源標識 新增時必輸項
  l_ResRec.RESOURCE_ID_NEW := 501899;
  --主要 單位用量或數量值 WIP_OPERATION_RESOURCES.Usage_Rate_Or_Amount
  l_ResRec.USAGE_RATE_OR_AMOUNT := .86;
  --計劃 已計劃 預設值為2(否) WIP_OPERATION_RESOURCES.Scheduled_Flag
  l_ResRec.SCHEDULED_FLAG := 2;
  --計劃 分配數量 預設值為1 WIP_OPERATION_RESOURCES.Assigned_Units
  l_ResRec.ASSIGNED_UNITS := 1;

  l_ResRec.APPLIED_RESOURCE_UNITS := Null;
  l_ResRec.APPLIED_RESOURCE_VALUE := Null;
  --主要 單位 WIP_OPERATION_RESOURCES.UOM_CODE
  l_ResRec.UOM_CODE := 'CNY';
  --主要 基準 預設值1(物料) WIP_OPERATION_RESOURCES.BASIS_TYPE
  l_ResRec.BASIS_TYPE := 1;
  --成本計算 活動標識 WIP_OPERATION_RESOURCES.ACTIVITY_ID
  l_ResRec.ACTIVITY_ID := Null;
  --成本計算 計費型別 WIP_OPERATION_RESOURCES.AUTOCHARGE_TYPE
  l_ResRec.AUTOCHARGE_TYPE := 1;
  --成本計算 標準費率 預設值為2
  l_ResRec.STANDARD_RATE_FLAG := 2;
  --計劃 起始日期 WIP_OPERATION_RESOURCES.START_DATE
  l_ResRec.START_DATE := Sysdate;
  --計劃 完成日期 WIP_OPERATION_RESOURCES.COMPLETION_DATE
  l_ResRec.COMPLETION_DATE := Sysdate;
  --計劃 替代組 WIP_OPERATION_RESOURCES.SUBSTITUTE_GROUP_NUM
  l_ResRec.SUBSTITUTE_GROUP_NUM := Null;
  --計劃 替換組 WIP_JOB_DTLS_INTERFACE.REPLACEMENT_GROUP_NUM
  l_ResRec.REPLACEMENT_GROUP_NUM := Null;
  --計劃 批WIP_JOB_DTLS_INTERFACE.BATCH_ID 
  --計劃 計劃序號 WIP_JOB_DTLS_INTERFACE.SCHEDULE_SEQ_NUM
  l_ResRec.SCHEDULE_SEQ_NUM  := Null;
  l_ResRec.BATCH_ID          := Null;
  l_ResRec.LOAD_TYPE         := 1; --預設值
  l_ResRec.PARENT_HEADER_ID  := l_iface_rec.Header_Id;
  l_ResRec.DESCRIPTION       := Null;
  l_ResRec.LAST_UPDATE_DATE  := Sysdate;
  l_ResRec.LAST_UPDATED_BY   := l_UserId;
  l_ResRec.CREATION_DATE     := Sysdate;
  l_ResRec.CREATED_BY        := l_UserId;
  l_ResRec.LAST_UPDATE_LOGIN := fnd_profile.value('LOGIN_ID');
  l_ResRec.Process_Phase     := 2; --預設值
  l_ResRec.Process_Status    := 1; --預設值
  l_ResRec.Group_Id          := l_GroupId;
  /*
  刪除:wip_job_details.WIP_DELETE預設為1
  新增:wip_job_details.wip_add預設值為2
  修改:wip_job_details.WIP_CHANGEl預設值為3*/
  l_ResRec.Substitution_Type := wip_job_details.wip_add;
  Insert Into WIP.WIP_JOB_DTLS_INTERFACE. Values l_ResRec;
  --*****End 任務單工序***---
  --API介面
  wip_massload_pub.massloadjobs(p_groupid         => l_iface_rec.group_id, -- Group ID
                                p_validationlevel => 2, -- Validation Level
                                p_commitflag      => 0, -- Commit 1 =Yes , 0 ='No'
                                x_returnstatus    => x_error_status,
                                x_errormsg        => x_error_message);
End;

3.或者用SQL提交“WIP 成批裝入”請求建立任務單
Declare
  l_GroupId        Number := 123456;
  v_ReqID          Number;
  l_phase          Varchar(200);
  l_status         Varchar(200);
  l_dev_phase      Varchar(200);
  l_dev_status     Varchar(200);
  l_message        Varchar(2000);
  l_request_status boolean;
  l_UserId         Number := 0;
Begin
  fnd_global.apps_initialize(user_id           => l_UserId,
                             resp_id           => 50276,
                             resp_appl_id      => 706,
                             security_group_id => 0);
                             
  v_ReqID := fnd_request.submit_request(application => 'WIP',
                                        program     => 'WICMLP',
                                        description => '',
                                        start_time  => '',
                                        sub_request => FALSE,
                                        argument1   => to_char(l_GroupId), --組標識
                                        argument2   => '0', --驗證型別
                                        argument3   => '1', --報表是否列印,1:YES,2.NO
                                        argument4   => CHR(0));

  If (v_ReqID > 0) Then
    l_request_status := Fnd_Concurrent.Wait_For_Request(v_ReqID,
                                                        5,
                                                        0,
                                                        l_phase,
                                                        l_status,
                                                        l_dev_phase,
                                                        l_dev_status,
                                                        l_message);
    IF l_request_status THEN
      IF l_dev_status = 'NORMAL' Or l_dev_status = 'WARNING' THEN
        dbms_output.put_line('[WIP 成批裝入]執行成功');
      ELSE
        dbms_output.put_line('[WIP 成批裝入]執行失敗:' || l_dev_status);
      END IF;
    ELSE
      dbms_output.put_line('請求未完成,無法檢視報表內容!');
    END IF;
  End If;
End;