PR自动创建一揽子发放实例:
DECLARE
Lv_Return_Status VARCHAR2(30);
Ln_Msg_Count NUMBER;
Lv_Msg_Data VARCHAR2(20000);
Ln_Batch_Id NUMBER;
Ln_Req_Org_Id NUMBER; --PR业务实体
Ln_Org_Id NUMBER; --创建采购订单的业务实体
Lv_Document_Number VARCHAR2(80); --标准采购订单/一揽子发放
Ln_Document_Id NUMBER; --标准采购订单/一揽子发放标识
Ln_Number_Lines NUMBER; --返回处理的接口记录的数量
--Blanket Purchase Agreement
Ln_Pba_Header_Id NUMBER := 3421;
Ln_Pba_Line_Id NUMBER := 13352;
Lv_Pba_Po_Number VARCHAR2(80) := '30912358424';
Ln_Release_Num NUMBER; --发放号
--采购员
Ln_Agent_Id NUMBER;
Lt_Ihdr_Rec Po.Po_Headers_Interface%ROWTYPE;
Lt_Ilines_Rec Po.Po_Lines_Interface%ROWTYPE;
--Vendor
Ln_Vendor_Id NUMBER := 1435;
Ln_Vendor_Site_Id NUMBER := 3462;
--货币汇率
Lv_Currency_Code VARCHAR2(30) := 'USD';
--自动创建订单类型:STANDARD(标准PO)、PLANNED(计划PO)、RELEASE(一揽发放)、RFQ(询价)
Lv_Document_Subtype VARCHAR2(30) := 'RELEASE';
--本位币
Lv_Loc_Currency_Code VARCHAR2;
Ln_Ledger_Id NUMBER;
Ln_Ledger_Name VARCHAR2(240);
Ln_Coa_Id NUMBER;
Lv_Errbuf VARCHAR2(2000);
Ln_Item_Id NUMBER; --物料
Ln_Organization_Id NUMBER; --库存组织
Ln_Consigned_Flag VARCHAR2(10); --寄售标志
BEGIN
--to set org context in a R12 env
Mo_Global.Init('PO');
Mo_Global.Set_Policy_Context('S', Ln_Org_Id);
Fnd_Global.Apps_Initialize(User_Id => 110, Resp_Id => 20707, Resp_Appl_Id => 201);
--Header
Lt_Ihdr_Rec := NULL;
SELECT Po_Headers_Interface_s.Nextval
INTO Lt_Ihdr_Rec.Interface_Header_Id
FROM Dual;
Ln_Batch_Id := Lt_Ihdr_Rec.Interface_Header_Id;
SELECT MAX(Prl.Release_Num)
INTO Ln_Release_Num
FROM Po_Releases_All Pra
WHERE Pra.Po_Header_Id = Ln_Pba_Header_Id;
Ln_Release_Num := Nvl(Ln_Release_Num, 0) + 1;
Lt_Ihdr_Rec.Interface_Source_Code := 'PO';
Lt_Ihdr_Rec.Batch_Id := Ln_Batch_Id;
Lt_Ihdr_Rec.Process_Code := 'NEW';
Lt_Ihdr_Rec.Action := 'NEW';
Lt_Ihdr_Rec.Document_Type_Code := 'PO';
Lt_Ihdr_Rec.Document_Subtype := Lv_Document_Subtype;
Lt_Ihdr_Rec.Document_Num := Lv_Pba_Po_Number;
Lt_Ihdr_Rec.Group_Code := 'DEFAULT'; --'REQUISITION';
Lt_Ihdr_Rec.Vendor_Id := Ln_Vendor_Id;
Lt_Ihdr_Rec.Vendor_Site_Id := Ln_Vendor_Site_Id;
Lt_Ihdr_Rec.Release_Num := r_h.Release_Num;
Lt_Ihdr_Rec.Release_Date := SYSDATE; --Trunc(Sysdate)
Lt_Ihdr_Rec.Agent_Id := Ln_Agent_Id;
Lt_Ihdr_Rec.Currency_Code := Lv_Currency_Code;
Lt_Ihdr_Rec.Org_Id := Ln_Org_Id;
Lt_Ihdr_Rec.Style_Id := Po_Doc_Style_Grp.Get_Standard_Doc_Style;
Lt_Ihdr_Rec.Approval_Status := 'INCOMPLETE';
--获得账薄标识
SELECT Hou.Set_Of_Books_Id
INTO Ln_Ledger_Id
FROM Hr_Operating_Units Hou
WHERE Hou.Organization_Id = Ln_Org_Id;
--获得本位币
Gl_Info.Gl_Get_Ledger_Info(Ledid => Ln_Ledger_Id
,Coaid => Ln_Coa_Id
,Ledname => Ln_Ledger_Name
,Func_Curr => Lv_Loc_Currency_Code
,Errbuf => Lv_Errbuf);
IF Lv_Errbuf IS NOT NULL THEN
Dbms_Output.Put_Line('获取组织币种错误: ' || Lv_Errbuf);
RETURN;
END IF;
IF (Lv_Document_Subtype = 'STANDARD' AND Lv_Loc_Currency_Code <> Lv_Currency_Code) THEN
--标准采购订单的汇率
BEGIN
Lt_Ihdr_Rec.Rate_Type_Code := 'Corporate';
Lt_Ihdr_Rec.Rate_Date := Trunc(SYSDATE);
Lt_Ihdr_Rec.Rate := Gl_Currency_Api.Get_Rate(x_From_Currency => Lv_Currency_Code
,x_To_Currency => Lv_Loc_Currency_Code
,x_Conversion_Date => Lt_Ihdr_Rec.Rate_Date
,x_Conversion_Type => Lt_Ihdr_Rec.Rate_Type_Code);
EXCEPTION
WHEN OTHERS THEN
Dbms_Output.Put_Line('汇率未维护');
RETURN;
END;
ELSIF (Lv_Document_Subtype = 'RELEASE' AND Lv_Loc_Currency_Code <> Lv_Currency_Code) THEN
--一揽子发放汇率
BEGIN
SELECT Pha.Rate_Type
,Pha.Rate_Date
,Pha.Rate
INTO Lt_Ihdr_Rec.Rate_Type_Code
,Lt_Ihdr_Rec.Rate_Date
,Lt_Ihdr_Rec.Rate
FROM Po_Headers_All Pha
WHERE Pha.Po_Header_Id = r_h.Release_Po_Header_Id;
EXCEPTION
WHEN OTHERS THEN
Lt_Ihdr_Rec.Rate_Type_Code := NULL;
Lt_Ihdr_Rec.Rate := NULL;
SELECT Nvl(Pha.Rate_Date, Trunc(Pha.Creation_Date))
INTO Lt_Ihdr_Rec.Rate_Date
FROM Po_Headers_All Pha
WHERE Pha.Po_Header_Id = Ln_Pba_Header_Id;
END;
END IF;
Lt_Ihdr_Rec.Last_Update_Date := SYSDATE;
Lt_Ihdr_Rec.Last_Updated_By := Fnd_Global.User_Id;
Lt_Ihdr_Rec.Creation_Date := SYSDATE;
Lt_Ihdr_Rec.Created_By := Fnd_Global.User_Id;
Lt_Ihdr_Rec.Last_Update_Login := Fnd_Global.Login_Id;
INSERT INTO Po.Po_Headers_Interface
VALUES Lt_Ihdr_Rec;
--Line /Shipment
Lt_Ilines_Rec := NULL;
Lt_Ilines_Rec.Interface_Header_Id := Lt_Ihdr_Rec.Interface_Header_Id;
SELECT Po_Lines_Interface_s.Nextval
INTO Lt_Ilines_Rec.Interface_Line_Id
FROM Dual;
Lt_Ilines_Rec.Action := NULL;
Lt_Ilines_Rec.Shipment_Num := NULL;
Lt_Ilines_Rec.Requisition_Line_Id := 23324123;
Lt_Ilines_Rec.From_Header_Id := Ln_Pba_Header_Id;
Lt_Ilines_Rec.From_Line_Id := Ln_Pba_Line_Id;
Lt_Ilines_Rec.Last_Update_Date := SYSDATE;
Lt_Ilines_Rec.Last_Updated_By := Fnd_Global.User_Id;
Lt_Ilines_Rec.Creation_Date := SYSDATE;
Lt_Ilines_Rec.Created_By := Fnd_Global.User_Id;
Lt_Ilines_Rec.Last_Update_Login := Fnd_Global.Login_Id;
IF Ln_Pba_Header_Id IS NULL AND Lv_Document_Subtypee = 'STANDARD' THEN
Lt_Ilines_Rec.Unit_Price := 0;
ELSE
Lt_Ilines_Rec.Unit_Price := 2.13;
END IF;
IF (Lv_Document_Subtypee = 'STANDARD' AND Ln_Pba_Header_Id IS NULL AND Ln_Pba_Line_Id IS NULL) THEN
BEGIN
SELECT Prl.Item_Id
,Prl.Destination_Organization_Id
INTO Ln_Item_Id
,Ln_Organization_Id
FROM Po.Po_Requisition_Lines_All Prl
WHERE Prl.Requisition_Line_Id = r_l.Requisition_Line_Id;
EXCEPTION
WHEN OTHERS THEN
Ln_Item_Id := -1;
Ln_Organization_Id := -1;
END;
--考虑寄售业务
IF (Ln_Item_Id <> -1 AND Ln_Organization_Id <> -1) THEN
Ln_Consigned_Flag := Po_Third_Party_Stock_Grp.Get_Consigned_Flag(p_Org_Id => Ln_Org_Id
,p_Item_Id => Ln_Item_Id
,p_Supplier_Id => Ln_Vendor_Id
,p_Site_Id => Ln_Vendor_Site_Id
,p_Inv_Org_Id => Ln_Organization_Id);
ELSE
Ln_Consigned_Flag := 'N';
END IF;
IF Ln_Consigned_Flag = 'Y' THEN
Lt_Ilines_Rec.Consigned_Flag := 'Y';
END IF;
END IF;
--新增行/发运行接口
INSERT INTO Po_Lines_Interface
VALUES l_Iface_Lines_Rec;
--Call Api
Po_Interface_s.Create_Documents(p_Api_Version => 1.0
,x_Return_Status => Lv_Return_Status
,x_Msg_Count => Ln_Msg_Count
,x_Msg_Data => Lv_Msg_Data
,p_Batch_Id => Ln_Batch_Id
,p_Req_Operating_Unit_Id => Ln_Req_Org_Id
,p_Purch_Operating_Unit_Id => Ln_Org_Id
,x_Document_Id => Ln_Document_Id
,x_Number_Lines => Ln_Number_Lines
,x_Document_Number => Lv_Document_Number
,p_Sourcing_k_Doc_Type => NULL
,p_Conterms_Exist_Flag => NULL
,p_Document_Creation_Method => 'AUTOCREATE'
,p_Orig_Org_Id => Lt_Ihdr_Rec.Org_Id -- <R12 MOAC>
,p_Group_Shipments => 'N');
Dbms_Output.Put_Line('Lv_Return_Status:' || Lv_Return_Status);
Dbms_Output.Put_Line('Ln_Msg_Count:' || Ln_Msg_Count);
Dbms_Output.Put_Line('Lv_Msg_Data:' || Lv_Msg_Data);
IF Lv_Return_Status = Fnd_Api.g_Ret_Sts_Success THEN
IF Ln_Msg_Count > 1 THEN
FOR i IN 1 .. Ln_Msg_Count LOOP
Lv_Msg_Data := Lv_Msg_Data || ',' ||
Fnd_Msg_Pub.Get(p_Msg_Index => i, p_Encoded => Fnd_Api.g_False);
END LOOP;
END IF;
END IF;
Dbms_Output.Put_Line('Lv_Msg_Data:' || Lv_Msg_Data);
Dbms_Output.Put_Line('Ln_Document_Id:' || Ln_Document_Id);
Dbms_Output.Put_Line('Ln_Number_Lines:' || Ln_Number_Lines);
Dbms_Output.Put_Line('Lv_Document_Number:' || Lv_Document_Number);
END;