Oracle EBS Interface/API(20)-PR自动创建一揽子发放实例

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;







 

猜你喜欢

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