Oracle EBS OM Back To Back Orders(背靠背业务)技术 - API和核心表关联关系介绍

Create Sales Order API
Back To Back Order API 实例如下:

DECLARE
  Ln_Org_Id NUMBER := 81;

  Lt_Header_Rec     Oe_Order_Pub.Header_Rec_Type;
  Ln_User_Id        NUMBER := 1230;
  Lt_Line_Tbl       Oe_Order_Pub.Line_Tbl_Type;
  i                 NUMBER := 0;
  Lt_Ret_Header_Rec Oe_Order_Pub.Header_Rec_Type;
  Xt_Ret_Line_Tbl   Oe_Order_Pub.Line_Tbl_Type;
  Xv_Ret_Status     VARCHAR2(1);
  Lv_Ret_Message    VARCHAR2(2000);

  Lt_Action_Qeq_Tbl Oe_Order_Pub.Request_Tbl_Type;

  Lt_Header_Val_Rec         Oe_Order_Pub.Header_Val_Rec_Type;
  Lt_Header_Adj_Tbl         Oe_Order_Pub.Header_Adj_Tbl_Type;
  Lt_Header_Adj_Val_Tbl     Oe_Order_Pub.Header_Adj_Val_Tbl_Type;
  Lt_Header_Price_Att_Tbl   Oe_Order_Pub.Header_Price_Att_Tbl_Type;
  Lt_Header_Adj_Att_Tbl     Oe_Order_Pub.Header_Adj_Att_Tbl_Type;
  Lt_Header_Adj_Assoc_Tbl   Oe_Order_Pub.Header_Adj_Assoc_Tbl_Type;
  Lt_Header_Scredit_Tbl     Oe_Order_Pub.Header_Scredit_Tbl_Type;
  Lt_Header_Scredit_Val_Tbl Oe_Order_Pub.Header_Scredit_Val_Tbl_Type;

  Lt_Line_Adj_Tbl         Oe_Order_Pub.Line_Adj_Tbl_Type;
  Lt_Line_Price_Att_Tbl   Oe_Order_Pub.Line_Price_Att_Tbl_Type;
  Lt_Line_Adj_Att_Tbl     Oe_Order_Pub.Line_Adj_Att_Tbl_Type;
  Lt_Line_Adj_Assoc_Tbl   Oe_Order_Pub.Line_Adj_Assoc_Tbl_Type;
  Lt_Line_Scredit_Tbl     Oe_Order_Pub.Line_Scredit_Tbl_Type;
  Lt_Lot_Serial_Tbl       Oe_Order_Pub.Lot_Serial_Tbl_Type;
  Lt_Line_Val_Tbl         Oe_Order_Pub.Line_Val_Tbl_Type;
  Lt_Line_Adj_Val_Tbl     Oe_Order_Pub.Line_Adj_Val_Tbl_Type;
  Lt_Line_Scredit_Val_Tbl Oe_Order_Pub.Line_Scredit_Val_Tbl_Type;

  Lt_Lot_Serial_Val_Tbl Oe_Order_Pub.Lot_Serial_Val_Tbl_Type;
  Xt_Action_Qeq_Tbl     Oe_Order_Pub.Request_Tbl_Type;

  Ln_Api_Version_Number NUMBER := 1;
  Ln_Msg_Count          NUMBER;
  Lv_Msg_Data           VARCHAR2(8000);
  Lv_Msg_Index_Out      VARCHAR2(2000);
BEGIN
  Mo_Global.Init('ONT');
  Mo_Global.Set_Policy_Context('S', Ln_Org_Id);
  Fnd_Global.Apps_Initialize(User_Id      => Ln_User_Id
                            ,Resp_Id      => 50747 -- Order Management Super User
                            ,Resp_Appl_Id => 50201 -- Oracle Order Management
                             );
  Oe_Msg_Pub.Initialize;
  Oe_Debug_Pub.Initialize;

  Lt_Header_Rec                         := Oe_Order_Pub.g_Miss_Header_Rec;
  Lt_Header_Rec.Operation               := Oe_Globals.g_Opr_Create;
  Lt_Header_Rec.Sold_To_Org_Id          := 1593; --
  Lt_Header_Rec.Org_Id                  := Ln_Org_Id;
  Lt_Header_Rec.Ship_From_Org_Id        := 84;
  Lt_Header_Rec.Orig_Sys_Document_Ref   := '测试201907300821';
  Lt_Header_Rec.Source_Document_Id      := 20190603;
  Lt_Header_Rec.Order_Type_Id           := 1019;
  Lt_Header_Rec.Order_Source_Id         := 0;
  Lt_Header_Rec.Transactional_Curr_Code := 'CNY';
  Lt_Header_Rec.Attribute1              := '10'; --安状类型
  Lt_Header_Rec.Attribute2              := '12000'; --合同号
  Lt_Header_Rec.Attribute3              := 'NO'; --是否WMS处理
  Lt_Header_Rec.Payment_Term_Id         := 5;
  Lt_Header_Rec.Price_List_Id           := 6015;
  Lt_Header_Rec.Conversion_Type_Code    := 'Corporate';
  Lt_Header_Rec.Salesrep_Id             := -3;
  Lt_Header_Rec.Ordered_Date            := SYSDATE;
  Lt_Header_Rec.Order_Category_Code     := 'ORDER';
  Lt_Header_Rec.Flow_Status_Code        := 'BOOKED';
  --Who Column
  Lt_Header_Rec.Creation_Date     := SYSDATE;
  Lt_Header_Rec.Created_By        := Ln_User_Id;
  Lt_Header_Rec.Last_Updated_By   := Ln_User_Id;
  Lt_Header_Rec.Last_Update_Date  := SYSDATE;
  Lt_Header_Rec.Last_Update_Login := Fnd_Global.Login_Id;

  i := i + 1;
  Lt_Line_Tbl(i) := Oe_Order_Pub.g_Miss_Line_Rec;
  Lt_Line_Tbl(i).Operation := Oe_Globals.g_Opr_Create;
  --与header相同的字段
  Lt_Line_Tbl(i).Order_Source_Id := Lt_Header_Rec.Order_Source_Id;
  Lt_Line_Tbl(i).Org_Id := Lt_Header_Rec.Org_Id;
  Lt_Line_Tbl(i).Sold_To_Org_Id := Lt_Header_Rec.Sold_To_Org_Id;
  Lt_Line_Tbl(i).Ship_From_Org_Id := Lt_Header_Rec.Ship_From_Org_Id;
  Lt_Line_Tbl(i).Price_List_Id := Lt_Header_Rec.Price_List_Id;
  Lt_Line_Tbl(i).Salesrep_Id := Lt_Header_Rec.Salesrep_Id;
  Lt_Line_Tbl(i).Invoice_To_Org_Id := Lt_Header_Rec.Invoice_To_Org_Id;
  Lt_Line_Tbl(i).Ship_To_Org_Id := Lt_Header_Rec.Ship_To_Org_Id;
  --Who Column
  Lt_Line_Tbl(i).Created_By := Lt_Header_Rec.Created_By;
  Lt_Line_Tbl(i).Creation_Date := Lt_Header_Rec.Creation_Date;
  Lt_Line_Tbl(i).Last_Updated_By := Lt_Header_Rec.Last_Updated_By;
  Lt_Line_Tbl(i).Last_Update_Date := Lt_Header_Rec.Last_Update_Date;
  Lt_Line_Tbl(i).Last_Update_Login := Lt_Header_Rec.Last_Update_Login;
  --Om Line
  Lt_Line_Tbl(i).Orig_Sys_Line_Ref := '测试201907300821';
  Lt_Line_Tbl(i).Item_Type_Code := 'STANDARD';
  Lt_Line_Tbl(i).Inventory_Item_Id := 33316;
  Lt_Line_Tbl(i).Schedule_Ship_Date := SYSDATE + 10;
  Lt_Line_Tbl(i).Schedule_Arrival_Date := SYSDATE + 10;
  Lt_Line_Tbl(i).Promise_Date := Trunc(SYSDATE);
  Lt_Line_Tbl(i).Ordered_Quantity := 1000;
  Lt_Line_Tbl(i).Order_Quantity_Uom := 'SET';
  Lt_Line_Tbl(i).Unit_List_Price := 10;
  Lt_Line_Tbl(i).Unit_Selling_Price := 3000;
  Lt_Line_Tbl(i).Tax_Code := NULL;
  Lt_Line_Tbl(i).Tax_Date := SYSDATE;
  Lt_Line_Tbl(i).Calculate_Price_Flag := 'N';
  Lt_Line_Tbl(i).Orig_Sys_Document_Ref := '测试201907300821';
  Lt_Line_Tbl(i).Orig_Sys_Line_Ref := '1';
  Lt_Line_Tbl(i).Orig_Sys_Document_Ref := 'fasf';
  Lt_Line_Tbl(i).Orig_Sys_Line_Ref := '1';
  Lt_Line_Tbl(i).Source_Document_Id := 1;
  Lt_Line_Tbl(i).Source_Document_Line_Id := 2;
  Lt_Line_Tbl(i).Link_To_Line_Index := 1;  --ATO指定行数组下标

  Lt_Action_Qeq_Tbl(1).Request_Type := Oe_Globals.g_Book_Order;
  Lt_Action_Qeq_Tbl(1).Entity_Code := Oe_Globals.g_Entity_Header;
  Lt_Action_Qeq_Tbl(1).Entity_Id := Lt_Header_Rec.Header_Id; -- SO's Header_Id

  Oe_Order_Pub.Process_Order(p_Org_Id                 => Lt_Header_Rec.Org_Id
                            ,p_Api_Version_Number     => Ln_Api_Version_Number
                            ,p_Init_Msg_List          => Fnd_Api.g_False
                            ,p_Return_Values          => Fnd_Api.g_False
                            ,p_Action_Commit          => Fnd_Api.g_False
                            ,x_Return_Status          => Xv_Ret_Status
                            ,x_Msg_Count              => Ln_Msg_Count
                            ,x_Msg_Data               => Lv_Msg_Data
                            ,p_Header_Rec             => Lt_Header_Rec
                            ,p_Line_Tbl               => Lt_Line_Tbl
                            ,p_Line_Adj_Tbl           => Lt_Line_Adj_Tbl
                            ,p_Action_Request_Tbl     => Lt_Action_Qeq_Tbl
                            ,p_Header_Scredit_Tbl     => Lt_Header_Scredit_Tbl
                            ,x_Header_Rec             => Lt_Ret_Header_Rec
                            ,x_Header_Val_Rec         => Lt_Header_Val_Rec
                            ,x_Header_Adj_Tbl         => Lt_Header_Adj_Tbl
                            ,x_Header_Adj_Val_Tbl     => Lt_Header_Adj_Val_Tbl
                            ,x_Header_Price_Att_Tbl   => Lt_Header_Price_Att_Tbl
                            ,x_Header_Adj_Att_Tbl     => Lt_Header_Adj_Att_Tbl
                            ,x_Header_Adj_Assoc_Tbl   => Lt_Header_Adj_Assoc_Tbl
                            ,x_Header_Scredit_Tbl     => Lt_Header_Scredit_Tbl
                            ,x_Header_Scredit_Val_Tbl => Lt_Header_Scredit_Val_Tbl
                            ,x_Line_Tbl               => Xt_Ret_Line_Tbl
                            ,x_Line_Val_Tbl           => Lt_Line_Val_Tbl
                            ,x_Line_Adj_Tbl           => Lt_Line_Adj_Tbl
                            ,x_Line_Adj_Val_Tbl       => Lt_Line_Adj_Val_Tbl
                            ,x_Line_Price_Att_Tbl     => Lt_Line_Price_Att_Tbl
                            ,x_Line_Adj_Att_Tbl       => Lt_Line_Adj_Att_Tbl
                            ,x_Line_Adj_Assoc_Tbl     => Lt_Line_Adj_Assoc_Tbl
                            ,x_Line_Scredit_Tbl       => Lt_Line_Scredit_Tbl
                            ,x_Line_Scredit_Val_Tbl   => Lt_Line_Scredit_Val_Tbl
                            ,x_Lot_Serial_Tbl         => Lt_Lot_Serial_Tbl
                            ,x_Lot_Serial_Val_Tbl     => Lt_Lot_Serial_Val_Tbl
                            ,x_Action_Request_Tbl     => Xt_Action_Qeq_Tbl);

  IF (Xv_Ret_Status = Fnd_Api.g_Ret_Sts_Success) THEN
    Dbms_Output.Put_Line('创建销售订单:' || Lt_Ret_Header_Rec.Order_Number);
    Dbms_Output.Put_Line('销售订单创建成功:' || Lt_Ret_Header_Rec.Order_Number);
    Dbms_Output.Put_Line('销售订单题头标识:' || Lt_Ret_Header_Rec.Header_Id);
    FOR i IN 1 .. Xt_Ret_Line_Tbl.Count LOOP
      Dbms_Output.Put_Line('销售订单行:' || Xt_Ret_Line_Tbl(i).Line_Number);
      Dbms_Output.Put_Line('销售订单行标识:' || Xt_Ret_Line_Tbl(i).Line_Id);
    END LOOP;
    COMMIT;
  ELSE
    FOR i IN 1 .. Ln_Msg_Count LOOP
      Oe_Msg_Pub.Get(p_Msg_Index     => i
                    ,p_Encoded       => Fnd_Api.g_False
                    ,p_Data          => Lv_Msg_Data
                    ,p_Msg_Index_Out => Lv_Msg_Index_Out);
    
      Lv_Ret_Message := Lv_Ret_Message || ';' ||
                        Substr(Lv_Msg_Data, 1, 1500);
    END LOOP;
    Dbms_Output.Put_Line('销售订单创建失败! 状态:' || Xv_Ret_Status || ',信息:' ||
                         Lv_Ret_Message);
    ROLLBACK;
  END IF;
END;

关注重点代码如下:
Lt_Line_Tbl(i).Link_To_Line_Index := 1--ATO指定行数组下标

Progress Order API
         由于客户产品需要项目所在地的施工队安装设备周期长,并且安装费用占比重较大,可能涉及的销售订单数量比较多。客户不想手一行一行去手工处理,根据报价单创建销售订单以后,程序自动处理“订单进展”销售订单行。调用API 如下:

DECLARE
  Ln_User_Id      NUMBER := 1230;
  Ln_Resp_Id      NUMBER := 50757;
  Ln_Resp_Appl_Id NUMBER := 660;
  Ln_Org_Id       NUMBER := 81;
BEGIN
  --初始化
  Mo_Global.Init('ONT');
  Mo_Global.Set_Policy_Context('S', Ln_Org_Id);
  Fnd_Global.Apps_Initialize(User_Id      => Ln_User_Id
                            ,Resp_Id      => Ln_Resp_Id -- Order Management Super User
                            ,Resp_Appl_Id => Ln_Resp_Appl_Id -- Oracle Order Management
                             );
  Oe_Msg_Pub.Initialize;
  Oe_Debug_Pub.Initialize;
  --Call API
  Apps.Wf_Engine.Completeactivity(Itemtype               => 'OEOL' --流程类型标识
                                 ,Itemkey                => To_Char('4064') ---流程代码标识:销售订单行标识
                                 ,Activity               => 'CREATE_SUPPLY_ORDER_ELIGIBLE' --活动名称: 创建供应单 -  合格
                                 ,RESULT                 => NULL --活动结果
                                 ,Raise_Engine_Exception => NULL);
  COMMIT;
EXCEPTION
  WHEN No_Data_Found THEN
    ROLLBACK;
END;



核心业务表关联关系

背靠背销售订单、采购申请和采购订单等等三者之间核心业务表之前关联关系。
1.每张背靠背销售订单只有一行ATO行,参考如下:

SELECT Oh.Order_Number
      ,Oh.Header_Id
      ,Ol.Line_Id
      ,Prh.Requisition_Header_Id
      ,Prh.Segment1              Req_Number
      ,Prl.Requisition_Line_Id
      ,Pl.Po_Line_Id
      ,Poh.Po_Header_Id
      ,Poh.Segment1              Po_Number
  FROM Oe_Order_Headers_All       Oh
      ,Oe_Order_Lines_All         Ol
      ,Po_Requisition_Headers_All Prh
      ,Po_Requisition_Lines_All   Prl
      ,Po_Line_Locations_All      Pol
      ,Po_Headers_All             Poh
      ,Po_Lines_All               Pl
 WHERE Ol.Header_Id = Oh.Header_Id
   AND Prh.Interface_Source_Line_Id = Ol.Line_Id
   AND Prh.Interface_Source_Code = 'CTO'
   AND Prh.Requisition_Header_Id = Prl.Requisition_Header_Id
   AND Prl.Line_Location_Id = Pol.Line_Location_Id
   AND Pol.Po_Header_Id = Poh.Po_Header_Id
   AND Pol.Po_Line_Id = Pl.Po_Line_Id
   AND Oh.Order_Number = '10017000008';



2.背靠背销售订单有多行 ATO 行时,并且采购订单接收入库之前,参考如下:

SELECT UNIQUE To_Char(Res.Demand_Source_Line_Id) Line
      ,To_Char(Rcv.Transaction_Date, 'DD-MON-RR_HH24:MI:SS') Trans_Date
      ,Rcv.Location_Id Loc_Id
      ,Rcv.Organization_Id Org_Id
      ,Rcv.Oe_Order_Header_Id Oe_Head_Id
      ,Rcv.Oe_Order_Line_Id Oe_Line_Id
      ,Poh.Segment1 Po_Number
      ,Poh.Po_Header_Id Po_Head_Id
      ,Rcv.Po_Line_Id Po_Line_Id
      ,Rcv.Po_Line_Location_Id Line_Loc_Id
      ,Rcv.Po_Unit_Price Unit_Price
      ,Rcv.Primary_Unit_Of_Measure Uom
      ,Rcv.Quantity Qty
  FROM Rcv_Transactions Rcv
      ,Mtl_Reservations Res
      ,Po_Headers_All   Poh
 WHERE Res.Demand_Source_Type_Id = 2
   AND Res.Supply_Source_Type_Id IN (1, 13)
   AND Res.Supply_Source_Header_Id = Poh.Po_Header_Id
   AND Poh.Po_Header_Id = Rcv.Po_Header_Id(+)
   AND Rcv.Oe_Order_Header_Id = 4065;



注意: 对应保留的采购订单一旦接收入库,保留数据自动被系统清除,随之三者之间的关联关系也不复存在。因此,要想采购订单接收入库之后,还能保留三者之间关系。建议在“导入采购申请”成功之后,将对应保留表的记录保存至客制化表中,方便以后数据追溯及与供应商和客户对账。
 

猜你喜欢

转载自blog.csdn.net/chenxianping/article/details/98676577