EBS物料、bom、工艺导入程序

CREATE OR REPLACE Package Body Cux_Pdm_Erp_Sync_Pkg Is

  Procedure Debug_Show(d_Message In Varchar2) Is
  Begin
    If Cux_Tool_Pkg.Err_Show('CAPP_SYNC') Then
      Dbms_Output.Put_Line(d_Message);
    End If;
  End Debug_Show;

  Procedure Insert_Log(p_Transaction_Id   In Number,
                       p_Entity_Type      In Varchar2,
                       p_Entity_Name      In Varchar2,
                       p_Transaction_Type In Varchar2,
                       p_Transaction_Date In Date,
                       p_Return_Status    In Varchar2,
                       p_Return_Message   In Varchar2) Is
  Begin
    Null;
  End;

  /*  Procedure Insert_Log(p_Transaction_Id   In Number,
                       p_Entity_Type      In Varchar2,
                       p_Entity_Name      In Varchar2,
                       p_Transaction_Type In Varchar2,
                       p_Transaction_Date In Date,
                       p_Return_Status    In Varchar2,
                       p_Return_Message   In Varchar2) Is
    Pragma Autonomous_Transaction;
  Begin
    Insert Into Cux.Cux_Pdm_Erp_Sync_Log
      (Transaction_Id,
       Entity_Type,
       Entity_Name,
       Transaction_Type,
       Transaction_Date,
       Return_Status,
       Return_Message)
    Values
      (p_Transaction_Id,
       p_Entity_Type,
       p_Entity_Name,
       p_Transaction_Type,
       p_Transaction_Date,
       p_Return_Status,
       Substr(p_Return_Message, 1, 2000));
    Commit;
  End Insert_Log;*/
  ---------------------------------------------------------------------------------
  -- p_delete_type : 1 bom ; 4 component ; 3 rtg ; 5 operation
  Procedure Delete_Group_Api(p_Organization_Code In Varchar2,
                             p_Delete_Group_Name In Varchar2,
                             p_Delete_Type       In Number) Is
    Lx_Errbuf  Varchar2(100);
    Lx_Retcode Varchar2(100);
  
    l_Delete_Group_Id Number;
    v_Req_Id          Number;
  Begin
    Select Dg.Delete_Group_Sequence_Id
      Into l_Delete_Group_Id
      From Bom_Delete_Groups Dg, Mtl_Parameters Mp
     Where Dg.Delete_Group_Name = p_Delete_Group_Name
       And Mp.Organization_Id = Dg.Organization_Id
       And Mp.Organization_Code = p_Organization_Code;
    Debug_Show('-->' || p_Organization_Code || ',' || p_Delete_Group_Name || ',' ||
               l_Delete_Group_Id || ',' || p_Delete_Type);
    /*Bom_Delete_Groups_Api.Delete_Groups(Errbuf          => Lx_Errbuf,
                                        Retcode         => Lx_Retcode,
                                        Delete_Group_Id => l_Delete_Group_Id,
                                        Action_Type     => 1,
                                        Delete_Type     => p_Delete_Type, ---BOM_COMPONENT_DELETED
                                        Archive         => 2);
    Dbms_Output.Put_Line('Retcode:' || Lx_Retcode);*/
  
    Bom_Delete_Groups_Api.Delete_Groups(Errbuf          => Lx_Errbuf,
                                        Retcode         => Lx_Retcode,
                                        Delete_Group_Id => l_Delete_Group_Id,
                                        Action_Type     => 2,
                                        Delete_Type     => p_Delete_Type, ---BOM_COMPONENT_DELETED
                                        Archive         => 2);
    Debug_Show('Retcode:' || Lx_Retcode);
  
    /*    v_Req_Id := Fnd_Request.Submit_Request('BOM',
                                           'BMCDEL',
                                           '',
                                           To_Char(Sysdate,
                                                   'yyyy/mm/dd hh24:mi:ss'),
                                           False,
                                           Chr(0));
    Debug_Show('v_Req_Id:' || v_Req_Id);*/
  End Delete_Group_Api;
  ---------------------------------------------------------------------------------
  Procedure Item_Sync_Category_Proc(d_Category_Rec In Category_Type,
                                    d_Item_Rec     In Inv_Item_Grp.Item_Rec_Type,
                                    x_Status       Out Varchar2,
                                    x_Status_Code  Out Varchar2) Is
  
    x_Return_Status   Varchar2(1);
    x_Msg_Count       Number;
    x_Msg_Data        Varchar2(2000);
    x_Errorcode       Varchar2(30);
    p_Old_Category_Id Number;
  Begin
    Begin
      Select Micv.Category_Id
        Into p_Old_Category_Id
        From Mtl_Item_Categories_v Micv
       Where Micv.Inventory_Item_Id = d_Item_Rec.Inventory_Item_Id
         And Micv.Organization_Id = d_Item_Rec.Organization_Id
         And Micv.Category_Set_Id = d_Category_Rec.Category_Set_Id;
    End;
    Debug_Show('-->>cate_set_id:' || d_Category_Rec.Category_Set_Id);
    Debug_Show('-->>p_Old_Category_Id:' || p_Old_Category_Id);
    Debug_Show('-->>cate_id:' || d_Category_Rec.Category_Id);
    Debug_Show('-->>Inventory_Item_Id:' || d_Item_Rec.Inventory_Item_Id);
    Debug_Show('-->>Organization_Id:' || d_Item_Rec.Organization_Id);
    Inv_Item_Category_Pub.Update_Category_Assignment(p_Api_Version       => '1.0',
                                                     p_Init_Msg_List     => Fnd_Api.g_True,
                                                     p_Commit            => Fnd_Api.g_False,
                                                     x_Return_Status     => x_Return_Status,
                                                     x_Errorcode         => x_Errorcode,
                                                     x_Msg_Count         => x_Msg_Count,
                                                     x_Msg_Data          => x_Msg_Data,
                                                     p_Old_Category_Id   => p_Old_Category_Id,
                                                     p_Category_Id       => d_Category_Rec.Category_Id, --913,
                                                     p_Category_Set_Id   => d_Category_Rec.Category_Set_Id, --1 Inventory
                                                     p_Inventory_Item_Id => d_Item_Rec.Inventory_Item_Id, --5159,
                                                     p_Organization_Id   => d_Item_Rec.Organization_Id);
  
    If x_Return_Status <> Fnd_Api.g_Ret_Sts_Success Then
      x_Status      := 'E';
      x_Status_Code := '创建物料分类,出现异常:';
      --ROLLBACK;
      Debug_Show('error code  : ' || x_Errorcode);
      Fnd_Msg_Pub.Count_And_Get(p_Count => x_Msg_Count,
                                p_Data  => x_Msg_Data);
      Debug_Show('error count  : ' || To_Char(x_Msg_Count));
      Debug_Show(Replace(x_Msg_Data, Chr(0), ' '));
      For i In 2 .. x_Msg_Count Loop
        x_Msg_Data := Fnd_Msg_Pub.Get;
        Debug_Show(Replace(x_Msg_Data, Chr(0), ' '));
        x_Status_Code := x_Status_Code || x_Msg_Data;
      End Loop;
    
      If (x_Return_Status = Fnd_Api.g_Ret_Sts_Unexp_Error) Then
        Raise Fnd_Api.g_Exc_Unexpected_Error;
      Elsif (x_Return_Status = Fnd_Api.g_Ret_Sts_Error) Then
        Raise Fnd_Api.g_Exc_Error;
      End If;
    Else
      --COMMIT;
      Debug_Show('Successfully.');
      x_Status := 'S';
    End If;
  End Item_Sync_Category_Proc;

  --*******************************************************************************
  --         哈机电
  --    程序名称  : Catalog_Item_Maintain
  --    中文名称  : 维护物料的目录组名称
  --    功能概要  : 维护物料的目录组名称(全组织)
  --    版本      : V 1.1
  --    CUX_STMT_UPLOAD
  --    程序员&创建日期  :  lwz   & 2011/11/11
  --********************************************************************************
  Procedure Catalog_Item_Maintain(d_Inventory_Item_Id In Number,
                                  d_Segment1          In Varchar2,
                                  d_Catalog_Group_Id  In Number,
                                  --d_Transaction_Type  In Varchar2,
                                  x_Inventory_Item_Id Out Number,
                                  x_Status            Out Varchar2,
                                  x_Status_Code       Out Varchar2) Is
    p_Item_Rec      Inv_Item_Grp.Item_Rec_Type;
    x_Return_Status Varchar2(200);
    x_Msg_Data      Varchar2(1000);
    x_Error_Tbl     Inv_Item_Grp.Error_Tbl_Type;
    x_Item_Rec      Inv_Item_Grp.Item_Rec_Type;
    Cursor Cur_Items Is
      Select Decode(Msib.Organization_Id,
                    Cux_Tool_Pkg.Get_Main_Organization_Id,
                    1,
                    2),
             Msib.Segment1,
             Msib.Inventory_Item_Id,
             Msib.Organization_Id
        From Mtl_System_Items_b Msib
       Where Msib.Inventory_Item_Id =
             Nvl(d_Inventory_Item_Id, Msib.Inventory_Item_Id)
         And Msib.Segment1 = Nvl(d_Segment1, Msib.Segment1)
       Order By Decode(Msib.Organization_Id,
                       Cux_Tool_Pkg.Get_Main_Organization_Id,
                       1,
                       2),
                Msib.Organization_Id;
  Begin
    For c_Item In Cur_Items Loop
      p_Item_Rec.Inventory_Item_Id     := c_Item.Inventory_Item_Id;
      p_Item_Rec.Organization_Id       := c_Item.Organization_Id;
      p_Item_Rec.Item_Catalog_Group_Id := d_Catalog_Group_Id; ---999999;--;--INV_ITEM_GRP.g_MISS_NUM;--8;--
      Inv_Item_Grp.Update_Item(p_Template_Name => Null, --p_Template_Name,
                               p_Item_Rec      => p_Item_Rec,
                               x_Item_Rec      => x_Item_Rec,
                               x_Return_Status => x_Return_Status,
                               x_Error_Tbl     => x_Error_Tbl);
      --  COMMIT;
      x_Status            := x_Return_Status;
      x_Inventory_Item_Id := c_Item.Inventory_Item_Id;
      If x_Return_Status <> 'S' Then
        x_Status_Code := '物料编码:' || '''' || c_Item.Segment1 || '''' ||
                         '在组织:' || c_Item.Organization_Id ||
                         '中,更新物料目录组名称时出现异常,异常代码为';
        For i In 1 .. x_Error_Tbl.Count Loop
          x_Msg_Data := x_Msg_Data || To_Char(i) || '):' || x_Error_Tbl(i)
                       .Message_Text;
          --Debug_Show(x_Msg_Data);
        End Loop;
        x_Status_Code := x_Status_Code || x_Msg_Data;
        Return;
      End If;
    End Loop;
  Exception
    When Others Then
      x_Status      := 'E';
      x_Status_Code := '维护物料的目录组名称,出现异常:' || Sqlerrm;
  End Catalog_Item_Maintain;

  --*******************************************************************************
  --         哈机电
  --    程序名称  : Catalog_descr_Maintain
  --    中文名称  : 目录组内容维护
  --    功能概要  : 目录组内容维护
  --    版本      : V 1.1
  --    CUX_STMT_UPLOAD
  --    程序员&创建日期  :  lwz   & 2011/11/11
  --********************************************************************************
  Procedure Catalog_Descr_Maintain(d_Inventory_Item_Id       In Number,
                                   d_Segment1                In Varchar2,
                                   d_Item_Desc_Element_Table In Inv_Item_Catalog_Elem_Pub.Item_Desc_Element_Table,
                                   x_Status                  Out Varchar2,
                                   x_Status_Code             Out Varchar2) Is
  
    p_Api_Version             Number;
    p_Init_Msg_List           Varchar2(200) Default Fnd_Api.g_False;
    p_Commit_Flag             Varchar2(200) Default Fnd_Api.g_False;
    p_Validation_Level        Number Default Inv_Item_Catalog_Elem_Pub.g_Validate_All;
    p_Inventory_Item_Id       Number Default - 999;
    p_Item_Number             Varchar2(200) Default Null;
    p_Item_Desc_Element_Table Inv_Item_Catalog_Elem_Pub.Item_Desc_Element_Table;
    x_Generated_Descr         Varchar2(200);
    x_Return_Status           Varchar2(200);
    x_Msg_Count               Number;
    x_Msg_Data                Varchar2(200);
  Begin
    If d_Inventory_Item_Id Is Not Null Then
      p_Inventory_Item_Id := d_Inventory_Item_Id;
    End If;
    If d_Segment1 Is Not Null Then
      p_Item_Number := d_Segment1;
    End If;
    p_Api_Version             := 1.0;
    p_Init_Msg_List           := Fnd_Api.g_True;
    p_Validation_Level        := Inv_Item_Catalog_Elem_Pub.g_Validate_None;
    p_Item_Desc_Element_Table := d_Item_Desc_Element_Table;
    Inv_Item_Catalog_Elem_Pub.Process_Item_Descr_Elements(p_Api_Version             => p_Api_Version,
                                                          p_Init_Msg_List           => p_Init_Msg_List,
                                                          p_Commit_Flag             => p_Commit_Flag,
                                                          p_Validation_Level        => p_Validation_Level,
                                                          p_Inventory_Item_Id       => p_Inventory_Item_Id,
                                                          p_Item_Number             => p_Item_Number,
                                                          p_Item_Desc_Element_Table => p_Item_Desc_Element_Table,
                                                          x_Generated_Descr         => x_Generated_Descr,
                                                          x_Return_Status           => x_Return_Status,
                                                          x_Msg_Count               => x_Msg_Count,
                                                          x_Msg_Data                => x_Msg_Data);
    x_Status := x_Return_Status;
    If x_Return_Status <> 'S' Then
      x_Status_Code := '更新目录组信息时出现异常,错误数量为:' || x_Msg_Count || ',异常代码为:' ||
                       x_Msg_Data;
      Return;
    End If;
  Exception
    When Others Then
      x_Status      := 'E';
      x_Status_Code := '目录组内容维护,出现异常:' || Sqlerrm;
  End Catalog_Descr_Maintain;

  --*******************************************************************************
  --         哈机电
  --    程序名称  : Catalog_Maintain
  --    中文名称  : 目录组维护
  --    功能概要  : 目录组维护,新建和更改
  --    版本      : V 1.1
  --    CUX_STMT_UPLOAD
  --    程序员&创建日期  :  lwz   & 2011/11/11
  --********************************************************************************
  Procedure Catalog_Maintain(d_Group_Name  In Varchar2,
                             d_Header_Id   In Varchar2,
                             x_Status      Out Varchar2,
                             x_Status_Code Out Varchar2) Is
    p_Inventory_Item_Id       Number Default - 999;
    p_Item_Desc_Element_Table Inv_Item_Catalog_Elem_Pub.Item_Desc_Element_Table;
    p_Item_Desc_Element       Inv_Item_Catalog_Elem_Pub.Item_Desc_Element;
    p_Item_Desc_Element_New   Inv_Item_Catalog_Elem_Pub.Item_Desc_Element;
  
    p_Count Number;
  
    p_Item_Rec Inv_Item_Grp.Item_Rec_Type;
    --x_Return_Status Varchar2(200);
    --x_Msg_Data      Varchar2(1000);
    x_Error_Tbl Inv_Item_Grp.Error_Tbl_Type;
    x_Item_Rec  Inv_Item_Grp.Item_Rec_Type;
    --p_inventory_item_id Number;
    Cursor Cur_Catalog Is
      Select Ccht.Header_Id,
             Ccht.Item_Catalog_Group_Id,
             Ccht.Inventory_Item_Id,
             Ccht.Segment1
        From Cux_Catalog_Headers_Temp Ccht
       Where Ccht.Group_Name = d_Group_Name
         And Ccht.Header_Id = d_Header_Id
         And Nvl(Ccht.Status, 'C') != 'S' --C = CREATE
       Order By Header_Id;
  
    Cursor Cur_Elements(c_Header_Id In Number) Is
      Select Cclt.Element_Name, Cclt.Element_Value
        From Cux_Catalog_Lines_Temp Cclt
       Where Cclt.Group_Name = d_Group_Name
         And Cclt.Header_Id = c_Header_Id
       Order By Line_Id;
  Begin
    For c_Catalog In Cur_Catalog Loop
      --更新物料数据
      Catalog_Item_Maintain(d_Inventory_Item_Id => c_Catalog.Inventory_Item_Id,
                            d_Segment1          => c_Catalog.Segment1,
                            d_Catalog_Group_Id  => c_Catalog.Item_Catalog_Group_Id,
                            --d_Transaction_Type  In Varchar2,
                            x_Inventory_Item_Id => p_Inventory_Item_Id,
                            x_Status            => x_Status,
                            x_Status_Code       => x_Status_Code);
      --  COMMIT;
      If x_Status <> 'S' Then
        --Return; --一般只有一个物料,只做一次循环,所以写不写return都可以,此处是 为了防止出现多个重复行
        Null;
      Else
        --添加目录组信息
        p_Count := 0;
        For c_Element In Cur_Elements(c_Catalog.Header_Id) Loop
          p_Count := p_Count + 1;
          p_Item_Desc_Element := p_Item_Desc_Element_New;
          p_Item_Desc_Element.Element_Name := c_Element.Element_Name;
          p_Item_Desc_Element.Element_Value := c_Element.Element_Value;
          p_Item_Desc_Element_Table(p_Count) := p_Item_Desc_Element;
        End Loop;
        Catalog_Descr_Maintain(d_Inventory_Item_Id       => p_Inventory_Item_Id, --c_Catalog.Inventory_Item_Id,
                               d_Segment1                => c_Catalog.Segment1,
                               d_Item_Desc_Element_Table => p_Item_Desc_Element_Table,
                               x_Status                  => x_Status,
                               x_Status_Code             => x_Status_Code);
        If x_Status <> 'S' Then
          --Return; --一般只有一个物料,只做一次循环,所以写不写return都可以,此处是 为了防止出现多个重复行
          Null;
        End If;
      End If;
      Update Cux_Catalog_Headers_Temp Ccht
         Set Ccht.Status = x_Status, Ccht.Status_Code = x_Status_Code
       Where Ccht.Header_Id = c_Catalog.Header_Id
         And Ccht.Group_Name = d_Group_Name;
    End Loop;
  Exception
    When Others Then
      x_Status      := 'E';
      x_Status_Code := '目录组维护,出现异常:' || Sqlerrm;
  End Catalog_Maintain;

  Procedure Item_Sync_Proc(p_Transaction_Type In Varchar2,
                           p_Template_Name    In Varchar2,
                           p_Category_Rec     In Category_Type,
                           p_Item_Rec         In Inv_Item_Grp.Item_Rec_Type,
                           x_Item_Id          Out Number,
                           p_Return_Status    Out Varchar2,
                           p_Return_Msg       Out Varchar2) Is
  
    x_Return_Status Varchar2(200);
    x_Msg_Data      Varchar2(1000);
    x_Error_Tbl     Inv_Item_Grp.Error_Tbl_Type;
    x_Item_Rec      Inv_Item_Grp.Item_Rec_Type;
  
    --  p_master_exists_count NUMBER; -- ????????????
    --  p_exists_count        NUMBER; -- ?????????????
    --  p_org_id              NUMBER;
    --  p_temp_count          NUMBER;
    --  i                     NUMBER;
  
  Begin
    --p_org_id := p_item_rec.organization_id;
    If p_Transaction_Type = 'CREATE' Then
      Inv_Item_Grp.Create_Item(p_Template_Name => p_Template_Name,
                               p_Item_Rec      => p_Item_Rec,
                               x_Item_Rec      => x_Item_Rec,
                               x_Return_Status => x_Return_Status,
                               x_Error_Tbl     => x_Error_Tbl);
      x_Item_Id := x_Item_Rec.Inventory_Item_Id;
      -- COMMIT;
      If x_Return_Status <> 'S' Then
        For i In 1 .. x_Error_Tbl.Count Loop
          x_Msg_Data := x_Msg_Data || To_Char(i) || '):' || x_Error_Tbl(i)
                       .Message_Text;
        End Loop;
      Else
        Debug_Show('-->>test:' || p_Category_Rec.Category_Id);
        If p_Category_Rec.Category_Id Is Not Null Then
          Item_Sync_Category_Proc(d_Category_Rec => p_Category_Rec,
                                  d_Item_Rec     => x_Item_Rec,
                                  x_Status       => x_Return_Status,
                                  x_Status_Code  => x_Msg_Data);
        End If;
      End If;
    
    Elsif p_Transaction_Type = 'UPDATE' Then
    
      Inv_Item_Grp.Update_Item(p_Template_Name => p_Template_Name,
                               p_Item_Rec      => p_Item_Rec,
                               x_Item_Rec      => x_Item_Rec,
                               x_Return_Status => x_Return_Status,
                               x_Error_Tbl     => x_Error_Tbl);
      --  COMMIT;
      If x_Return_Status <> 'S' Then
        For i In 1 .. x_Error_Tbl.Count Loop
          x_Msg_Data := x_Msg_Data || To_Char(i) || '):' || x_Error_Tbl(i)
                       .Message_Text;
        End Loop;
      End If;
    
    End If;
    p_Return_Status := x_Return_Status;
    p_Return_Msg    := x_Msg_Data;
  
    Insert_Log(p_Transaction_Id   => 1,
               p_Entity_Type      => 'ITEM',
               p_Entity_Name      => p_Item_Rec.Segment1,
               p_Transaction_Type => p_Transaction_Type,
               p_Transaction_Date => Sysdate,
               p_Return_Status    => p_Return_Status,
               p_Return_Message   => p_Return_Msg);
  End Item_Sync_Proc;
  -----------------------------------------------------------------------------------------

  Procedure Bom_Sync_Proc --
  (p_Transaction_Id         In Number,
   p_Bom_Header_Rec         In Bom_Bo_Pub.Bom_Head_Rec_Type := Bom_Bo_Pub.g_Miss_Bom_Header_Rec,
   p_Bom_Revision_Tbl       In Bom_Bo_Pub.Bom_Revision_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Revision_Tbl,
   p_Bom_Component_Tbl      In Bom_Bo_Pub.Bom_Comps_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Component_Tbl,
   p_Bom_Ref_Designator_Tbl In Bom_Bo_Pub.Bom_Ref_Designator_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Ref_Designator_Tbl,
   p_Bom_Sub_Component_Tbl  In Bom_Bo_Pub.Bom_Sub_Component_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Sub_Component_Tbl,
   x_Return_Status          Out Varchar2,
   x_Return_Message         Out Varchar2) Is
    --Pragma Autonomous_Transaction;
    --?? delete_group_api?????????commit ???????? ??????pdm??????
  
    l_Bom_Header_Rec         Bom_Bo_Pub.Bom_Head_Rec_Type := Bom_Bo_Pub.g_Miss_Bom_Header_Rec;
    l_Bom_Revision_Tbl       Bom_Bo_Pub.Bom_Revision_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Revision_Tbl;
    l_Bom_Component_Tbl      Bom_Bo_Pub.Bom_Comps_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Component_Tbl;
    l_Bom_Ref_Designator_Tbl Bom_Bo_Pub.Bom_Ref_Designator_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Ref_Designator_Tbl;
    l_Bom_Sub_Component_Tbl  Bom_Bo_Pub.Bom_Sub_Component_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Sub_Component_Tbl;
  
    l_Bom_Comp_Ops_Tbl  Bom_Bo_Pub.Bom_Comp_Ops_Tbl_Type;
    l_Return_Status     Varchar2(1);
    l_Msg_Count         Number;
    l_Mesg_List         Error_Handler.Error_Tbl_Type;
    t                   Varchar2(32000);
    Msg_Start           Varchar2(20);
    p_Organization_Code Varchar2(20);
  
    l_Error_Message_List Error_Handler.Error_Tbl_Type;
  
    Lx_Bom_Header_Rec         Bom_Bo_Pub.Bom_Head_Rec_Type;
    Lx_Bom_Revision_Tbl       Bom_Bo_Pub.Bom_Revision_Tbl_Type;
    Lx_Bom_Component_Tbl      Bom_Bo_Pub.Bom_Comps_Tbl_Type;
    Lx_Bom_Ref_Designator_Tbl Bom_Bo_Pub.Bom_Ref_Designator_Tbl_Type;
    Lx_Bom_Sub_Component_Tbl  Bom_Bo_Pub.Bom_Sub_Component_Tbl_Type;
  
    Lx_Return_Status Varchar2(1);
    Lx_Msg_Count     Number;
  
    l_Delete_Type       Number;
    l_Delete_Group_Name Varchar2(100);
  Begin
    l_Bom_Header_Rec.Assembly_Item_Name := p_Bom_Header_Rec.Assembly_Item_Name;
    l_Bom_Header_Rec.Organization_Code  := p_Bom_Header_Rec.Organization_Code;
    l_Bom_Header_Rec.Alternate_Bom_Code := p_Bom_Header_Rec.Alternate_Bom_Code;
    l_Bom_Header_Rec.Assembly_Type      := p_Bom_Header_Rec.Assembly_Type;
    l_Bom_Header_Rec.Transaction_Type   := p_Bom_Header_Rec.Transaction_Type; --'CREATE'
    l_Bom_Header_Rec.Delete_Group_Name  := p_Bom_Header_Rec.Delete_Group_Name;
    l_Bom_Header_Rec.Return_Status      := Null;
    p_Organization_Code                 := p_Bom_Header_Rec.Organization_Code;
  
    If l_Bom_Header_Rec.Transaction_Type = 'DELETE' Then
      l_Delete_Type       := 1;
      l_Delete_Group_Name := l_Bom_Header_Rec.Delete_Group_Name;
    End If;
  
    For i In 1 .. p_Bom_Component_Tbl.Count Loop
      l_Bom_Component_Tbl(i).Organization_Code := l_Bom_Header_Rec.Organization_Code;
      l_Bom_Component_Tbl(i).Assembly_Item_Name := l_Bom_Header_Rec.Assembly_Item_Name;
      l_Bom_Component_Tbl(i).Alternate_Bom_Code := l_Bom_Header_Rec.Alternate_Bom_Code;
    
      l_Bom_Component_Tbl(i).Delete_Group_Name := p_Bom_Component_Tbl(i)
                                                 .Delete_Group_Name;
      l_Bom_Component_Tbl(i).Item_Sequence_Number := p_Bom_Component_Tbl(i)
                                                    .Item_Sequence_Number; --i * 10;
      l_Bom_Component_Tbl(i).Operation_Sequence_Number := p_Bom_Component_Tbl(i)
                                                         .Operation_Sequence_Number;
      l_Bom_Component_Tbl(i).Transaction_Type := p_Bom_Component_Tbl(i)
                                                .Transaction_Type; -- 'CREATE';
    
      l_Bom_Component_Tbl(i).Quantity_Per_Assembly := p_Bom_Component_Tbl(i)
                                                     .Quantity_Per_Assembly;
      l_Bom_Component_Tbl(i).Start_Effective_Date := p_Bom_Component_Tbl(i)
                                                    .Start_Effective_Date; --to_date(TO_CHAR(p_Bom_Component_Tbl(i).Start_Effective_Date,'YYYY-MM-DD hh24:mi:ss'),'DD-MM-YYYY hh24:mi:ss');
      l_Bom_Component_Tbl(i).Disable_Date := p_Bom_Component_Tbl(i)
                                            .Disable_Date;
      l_Bom_Component_Tbl(i).Component_Item_Name := p_Bom_Component_Tbl(i)
                                                   .Component_Item_Name;
    
      l_Bom_Component_Tbl(i).Alternate_Bom_Code := p_Bom_Component_Tbl(i)
                                                  .Alternate_Bom_Code;
      l_Bom_Component_Tbl(i).Projected_Yield := p_Bom_Component_Tbl(i)
                                               .Projected_Yield;
      l_Bom_Component_Tbl(i).Planning_Percent := p_Bom_Component_Tbl(i)
                                                .Planning_Percent;
      l_Bom_Component_Tbl(i).Quantity_Related := p_Bom_Component_Tbl(i)
                                                .Quantity_Related;
      l_Bom_Component_Tbl(i).Check_Atp := p_Bom_Component_Tbl(i).Check_Atp;
      l_Bom_Component_Tbl(i).Include_In_Cost_Rollup := p_Bom_Component_Tbl(i)
                                                      .Include_In_Cost_Rollup;
      l_Bom_Component_Tbl(i).Wip_Supply_Type := p_Bom_Component_Tbl(i)
                                               .Wip_Supply_Type;
      l_Bom_Component_Tbl(i).So_Basis := p_Bom_Component_Tbl(i).So_Basis;
      l_Bom_Component_Tbl(i).Optional := p_Bom_Component_Tbl(i).Optional;
      l_Bom_Component_Tbl(i).Mutually_Exclusive := p_Bom_Component_Tbl(i)
                                                  .Mutually_Exclusive;
      l_Bom_Component_Tbl(i).Shipping_Allowed := p_Bom_Component_Tbl(i)
                                                .Shipping_Allowed;
      l_Bom_Component_Tbl(i).Required_To_Ship := p_Bom_Component_Tbl(i)
                                                .Required_To_Ship;
      l_Bom_Component_Tbl(i).Required_For_Revenue := p_Bom_Component_Tbl(i)
                                                    .Required_For_Revenue;
      l_Bom_Component_Tbl(i).Include_On_Ship_Docs := p_Bom_Component_Tbl(i)
                                                    .Include_On_Ship_Docs;
      l_Bom_Component_Tbl(i).Supply_Subinventory := p_Bom_Component_Tbl(i)
                                                   .Supply_Subinventory;
      l_Bom_Component_Tbl(i).Location_Name := p_Bom_Component_Tbl(i)
                                             .Location_Name;
      l_Bom_Component_Tbl(i).Minimum_Allowed_Quantity := p_Bom_Component_Tbl(i)
                                                        .Minimum_Allowed_Quantity;
      l_Bom_Component_Tbl(i).Maximum_Allowed_Quantity := p_Bom_Component_Tbl(i)
                                                        .Maximum_Allowed_Quantity;
      l_Bom_Component_Tbl(i).Comments := p_Bom_Component_Tbl(i).Comments;
      l_Bom_Component_Tbl(i).From_End_Item_Unit_Number := p_Bom_Component_Tbl(i)
                                                         .From_End_Item_Unit_Number;
      l_Bom_Component_Tbl(i).To_End_Item_Unit_Number := p_Bom_Component_Tbl(i)
                                                       .To_End_Item_Unit_Number;
    
      l_Bom_Component_Tbl(i).Return_Status := Null;
    
      If l_Bom_Component_Tbl(i)
      .Transaction_Type = 'DELETE' And l_Delete_Type Is Null Then
        l_Delete_Type       := 4;
        l_Delete_Group_Name := l_Bom_Component_Tbl(i).Delete_Group_Name;
      End If;
    
    End Loop;
  
    If l_Bom_Header_Rec.Transaction_Type = 'MAINTAIN_LINE' Then
      l_Bom_Header_Rec := Bom_Bo_Pub.g_Miss_Bom_Header_Rec;
      Bom_Bo_Pub.Process_Bom(p_Bo_Identifier          => 'BOM',
                             p_Api_Version_Number     => 1.0,
                             p_Init_Msg_List          => True,
                             p_Bom_Header_Rec         => l_Bom_Header_Rec,
                             p_Bom_Revision_Tbl       => l_Bom_Revision_Tbl,
                             p_Bom_Component_Tbl      => l_Bom_Component_Tbl,
                             p_Bom_Ref_Designator_Tbl => l_Bom_Ref_Designator_Tbl,
                             p_Bom_Sub_Component_Tbl  => l_Bom_Sub_Component_Tbl,
                             p_Bom_Comp_Ops_Tbl       => l_Bom_Comp_Ops_Tbl,
                             x_Bom_Header_Rec         => l_Bom_Header_Rec,
                             x_Bom_Revision_Tbl       => l_Bom_Revision_Tbl,
                             x_Bom_Component_Tbl      => l_Bom_Component_Tbl,
                             x_Bom_Ref_Designator_Tbl => l_Bom_Ref_Designator_Tbl,
                             x_Bom_Sub_Component_Tbl  => l_Bom_Sub_Component_Tbl,
                             x_Bom_Comp_Ops_Tbl       => l_Bom_Comp_Ops_Tbl,
                             x_Return_Status          => l_Return_Status,
                             x_Msg_Count              => l_Msg_Count,
                             p_Debug                  => 'N', --'&DEBUG',
                             p_Output_Dir             => Null, --'&DEBUG_DIR',
                             p_Debug_Filename         => Null --'&USER_NAME' ||'.debug'
                             );
      If (l_Return_Status = 'S') Then
        Debug_Show('Return Status : ' || l_Return_Status || ' - Success!');
        x_Return_Status := 'S';
        If l_Delete_Type > 0 Then
          Delete_Group_Api(p_Organization_Code,
                           l_Delete_Group_Name,
                           l_Delete_Type);
        End If;
      
        x_Return_Status := 'S';
      Else
        Debug_Show('Return Status : ' || l_Return_Status || ' - Failure!');
        x_Return_Status := l_Return_Status;
        Error_Handler.Get_Message_List(l_Mesg_List);
        Debug_Show('-------------------------------------------------------------------');
        For i In 1 .. l_Msg_Count Loop
          Debug_Show('Entity Id     : ' || l_Mesg_List(i).Entity_Id);
          Debug_Show('Index         : ' || l_Mesg_List(i).Entity_Index);
          Debug_Show('Message Type  : ' || l_Mesg_List(i).Message_Type);
          t                := l_Mesg_List(i).Message_Text;
          x_Return_Message := x_Return_Message || l_Mesg_List(i)
                             .Message_Text;
          Msg_Start        := 'Message       : ';
          While Length(t) > 0 Loop
            Debug_Show(Msg_Start || Substr(t, 1, 80));
            t         := Substr(t, 81);
            Msg_Start := '    ';
          End Loop;
          Debug_Show('-------------------------------------------------------------------');
        End Loop;
      End If;
    Else
      Error_Handler.Initialize;
      Bom_Bo_Pub.Process_Bom(p_Bo_Identifier          => 'BOM',
                             p_Api_Version_Number     => 1.0,
                             p_Init_Msg_List          => True,
                             p_Bom_Header_Rec         => l_Bom_Header_Rec,
                             p_Bom_Revision_Tbl       => l_Bom_Revision_Tbl,
                             p_Bom_Component_Tbl      => l_Bom_Component_Tbl,
                             p_Bom_Ref_Designator_Tbl => l_Bom_Ref_Designator_Tbl,
                             p_Bom_Sub_Component_Tbl  => l_Bom_Sub_Component_Tbl,
                             x_Bom_Header_Rec         => Lx_Bom_Header_Rec,
                             x_Bom_Revision_Tbl       => Lx_Bom_Revision_Tbl,
                             x_Bom_Component_Tbl      => Lx_Bom_Component_Tbl,
                             x_Bom_Ref_Designator_Tbl => Lx_Bom_Ref_Designator_Tbl,
                             x_Bom_Sub_Component_Tbl  => Lx_Bom_Sub_Component_Tbl,
                             x_Return_Status          => Lx_Return_Status,
                             x_Msg_Count              => Lx_Msg_Count,
                             p_Debug                  => g_Debug,
                             p_Output_Dir             => g_Debug_Output_Dir,
                             p_Debug_Filename         => g_Debug_Filename);
    
      --    Debug_Show('Return Status = ' || lx_return_status);
      --   Debug_Show('Message Count = ' || lx_msg_count);
    
      Error_Handler.Get_Message_List(l_Error_Message_List);
      For i In 1 .. Lx_Msg_Count Loop
        --  Debug_Show(to_char(i) || ' MESSAGE TEXT  ' ||
        --           substr(l_error_message_list(i).message_text, 1, 250));
        --  Debug_Show(to_char(i) || ' MESSAGE TYPE  ' || l_error_message_list(i).message_type);
      
        If l_Error_Message_List(i).Message_Type <> 'W' Then
          x_Return_Message := x_Return_Message || l_Error_Message_List(i)
                             .Message_Text || ' ';
        End If;
      End Loop;
      --  'S' - Success
      --  'E' - Error
      --  'F' - Fatal Error
      --  'U' - Unexpected Error
      If Lx_Return_Status <> 'S' Then
        x_Return_Status := 'E';
        Rollback;
      Else
        If l_Delete_Type > 0 Then
          Delete_Group_Api(l_Bom_Header_Rec.Organization_Code,
                           l_Delete_Group_Name,
                           l_Delete_Type);
        End If;
      
        x_Return_Status := 'S';
        Commit;
      End If;
    End If;
  
    Insert_Log(p_Transaction_Id   => p_Transaction_Id,
               p_Entity_Type      => 'BOM',
               p_Entity_Name      => p_Bom_Header_Rec.Assembly_Item_Name,
               p_Transaction_Type => p_Bom_Header_Rec.Transaction_Type,
               p_Transaction_Date => Sysdate,
               p_Return_Status    => x_Return_Status,
               p_Return_Message   => x_Return_Message);
  End Bom_Sync_Proc;
  --------------------------------------------------------------------------------

  Procedure Rtg_Sync_Proc --
  (p_Transaction_Id   In Number,
   p_Rtg_Header_Rec   Bom_Rtg_Pub.Rtg_Header_Rec_Type := Bom_Rtg_Pub.g_Miss_Rtg_Header_Rec,
   p_Rtg_Revision_Tbl Bom_Rtg_Pub.Rtg_Revision_Tbl_Type := Bom_Rtg_Pub.g_Miss_Rtg_Revision_Tbl,
   p_Operation_Tbl    Bom_Rtg_Pub.Operation_Tbl_Type := Bom_Rtg_Pub.g_Miss_Operation_Tbl,
   p_Op_Resource_Tbl  Bom_Rtg_Pub.Op_Resource_Tbl_Type := Bom_Rtg_Pub.g_Miss_Op_Resource_Tbl,
   p_Sub_Resource_Tbl Bom_Rtg_Pub.Sub_Resource_Tbl_Type := Bom_Rtg_Pub.g_Miss_Sub_Resource_Tbl,
   p_Op_Network_Tbl   Bom_Rtg_Pub.Op_Network_Tbl_Type := Bom_Rtg_Pub.g_Miss_Op_Network_Tbl,
   x_Return_Status    Out Varchar2,
   x_Return_Message   Out Varchar2) Is
    --Pragma Autonomous_Transaction;
    --?? delete_group_api?????????commit ???????? ??????pdm??????
  
    l_Rtg_Header_Rec   Bom_Rtg_Pub.Rtg_Header_Rec_Type := Bom_Rtg_Pub.g_Miss_Rtg_Header_Rec;
    l_Rtg_Revision_Tbl Bom_Rtg_Pub.Rtg_Revision_Tbl_Type := Bom_Rtg_Pub.g_Miss_Rtg_Revision_Tbl;
    l_Operation_Tbl    Bom_Rtg_Pub.Operation_Tbl_Type := Bom_Rtg_Pub.g_Miss_Operation_Tbl;
    l_Op_Resource_Tbl  Bom_Rtg_Pub.Op_Resource_Tbl_Type := Bom_Rtg_Pub.g_Miss_Op_Resource_Tbl;
    l_Sub_Resource_Tbl Bom_Rtg_Pub.Sub_Resource_Tbl_Type := Bom_Rtg_Pub.g_Miss_Sub_Resource_Tbl;
    l_Op_Network_Tbl   Bom_Rtg_Pub.Op_Network_Tbl_Type := Bom_Rtg_Pub.g_Miss_Op_Network_Tbl;
  
    l_Error_Message_List Error_Handler.Error_Tbl_Type;
  
    Lx_Rtg_Header_Rec   Bom_Rtg_Pub.Rtg_Header_Rec_Type := Bom_Rtg_Pub.g_Miss_Rtg_Header_Rec;
    Lx_Rtg_Revision_Tbl Bom_Rtg_Pub.Rtg_Revision_Tbl_Type := Bom_Rtg_Pub.g_Miss_Rtg_Revision_Tbl;
    Lx_Operation_Tbl    Bom_Rtg_Pub.Operation_Tbl_Type := Bom_Rtg_Pub.g_Miss_Operation_Tbl;
    Lx_Op_Resource_Tbl  Bom_Rtg_Pub.Op_Resource_Tbl_Type := Bom_Rtg_Pub.g_Miss_Op_Resource_Tbl;
    Lx_Sub_Resource_Tbl Bom_Rtg_Pub.Sub_Resource_Tbl_Type := Bom_Rtg_Pub.g_Miss_Sub_Resource_Tbl;
    Lx_Op_Network_Tbl   Bom_Rtg_Pub.Op_Network_Tbl_Type := Bom_Rtg_Pub.g_Miss_Op_Network_Tbl;
  
    Lx_Return_Status Varchar2(1);
    Lx_Msg_Count     Number;
  
    l_Delete_Type       Number;
    l_Delete_Group_Name Varchar2(100);
    p_Organization_Code Varchar2(20);
  
  Begin
    Debug_Show('-->>装配件:' || p_Rtg_Header_Rec.Assembly_Item_Name);
    Debug_Show('-->>组织:' || p_Rtg_Header_Rec.Organization_Code);
    Debug_Show('-->>事物处理类型:' || p_Rtg_Header_Rec.Transaction_Type);
    p_Organization_Code                 := p_Rtg_Header_Rec.Organization_Code;
    l_Rtg_Header_Rec.Assembly_Item_Name := p_Rtg_Header_Rec.Assembly_Item_Name;
    l_Rtg_Header_Rec.Organization_Code  := p_Organization_Code;
    l_Rtg_Header_Rec.Eng_Routing_Flag   := 2;
    l_Rtg_Header_Rec.Transaction_Type   := p_Rtg_Header_Rec.Transaction_Type;
    l_Rtg_Header_Rec.Delete_Group_Name  := p_Rtg_Header_Rec.Delete_Group_Name;
    l_Rtg_Header_Rec.Return_Status      := Null;
    l_Rtg_Header_Rec.Attribute2         := p_Rtg_Header_Rec.Attribute2;
  
    If l_Rtg_Header_Rec.Transaction_Type = 'DELETE' Then
      l_Delete_Type       := 3;
      l_Delete_Group_Name := l_Rtg_Header_Rec.Delete_Group_Name;
    End If;
  
    For i In 1 .. p_Operation_Tbl.Count Loop
      /*If (Nvl(p_Operation_Tbl(i).Transaction_Type, '~') != '~' And
      l_Rtg_Header_Rec.Transaction_Type = 'MAINTAIN_LINE') Or l_Rtg_Header_Rec.Transaction_Type != 'MAINTAIN_LINE' Then*/
      l_Operation_Tbl(i).Assembly_Item_Name := p_Rtg_Header_Rec.Assembly_Item_Name;
      l_Operation_Tbl(i).Organization_Code := p_Rtg_Header_Rec.Organization_Code;
    
      l_Operation_Tbl(i).Delete_Group_Name := p_Operation_Tbl(i)
                                             .Delete_Group_Name;
      l_Operation_Tbl(i).Operation_Sequence_Number := p_Operation_Tbl(i)
                                                     .Operation_Sequence_Number;
      l_Operation_Tbl(i).Operation_Type := 1;
      l_Operation_Tbl(i).Start_Effective_Date := p_Operation_Tbl(i)
                                                .Start_Effective_Date;
      l_Operation_Tbl(i).Department_Code := p_Operation_Tbl(i)
                                           .Department_Code;
      l_Operation_Tbl(i).Operation_Description := p_Operation_Tbl(i)
                                                 .Operation_Description;
      l_Operation_Tbl(i).Transaction_Type := p_Operation_Tbl(i)
                                            .Transaction_Type;
      l_Operation_Tbl(i).Attribute7 := p_Operation_Tbl(i).Attribute7; --专用工具
      Debug_Show('  -->>工序事物处理类型:' || l_Operation_Tbl(i).Transaction_Type);
      -- ??????????
    
      If l_Operation_Tbl(i)
      .Transaction_Type = 'DELETE' And l_Delete_Type Is Null Then
        l_Delete_Type       := 5;
        l_Delete_Group_Name := l_Operation_Tbl(i).Delete_Group_Name;
      End If;
      /*End If;*/
    End Loop;
  
    For j In 1 .. p_Op_Resource_Tbl.Count Loop
      l_Op_Resource_Tbl(j).Assembly_Item_Name := p_Rtg_Header_Rec.Assembly_Item_Name;
      l_Op_Resource_Tbl(j).Organization_Code := p_Rtg_Header_Rec.Organization_Code;
      l_Op_Resource_Tbl(j).Operation_Type := 1;
      l_Op_Resource_Tbl(j).Op_Start_Effective_Date := p_Op_Resource_Tbl(j)
                                                     .Op_Start_Effective_Date;
      l_Op_Resource_Tbl(j).Operation_Sequence_Number := p_Op_Resource_Tbl(j)
                                                       .Operation_Sequence_Number;
    
      l_Op_Resource_Tbl(j).Resource_Sequence_Number := p_Op_Resource_Tbl(j)
                                                      .Resource_Sequence_Number;
      l_Op_Resource_Tbl(j).Transaction_Type := p_Op_Resource_Tbl(j)
                                              .Transaction_Type;
      l_Op_Resource_Tbl(j).Resource_Code := p_Op_Resource_Tbl(j)
                                           .Resource_Code;
      l_Op_Resource_Tbl(j).Usage_Rate_Or_Amount := p_Op_Resource_Tbl(j)
                                                  .Usage_Rate_Or_Amount;
      l_Op_Resource_Tbl(j).Schedule_Flag := p_Op_Resource_Tbl(j)
                                           .Schedule_Flag;
      l_Op_Resource_Tbl(j).Autocharge_Type := p_Op_Resource_Tbl(j)
                                             .Autocharge_Type;
      l_Op_Resource_Tbl(j).Assigned_Units := p_Op_Resource_Tbl(j)
                                            .Assigned_Units;
      l_Op_Resource_Tbl(j).Attribute1 := p_Op_Resource_Tbl(j).Attribute1;
      l_Op_Resource_Tbl(j).Attribute3 := p_Op_Resource_Tbl(j).Attribute3;
      Debug_Show('  -->>资源处理类型:' || l_Op_Resource_Tbl(j).Transaction_Type);
    
    End Loop;
    /*If l_Rtg_Header_Rec.Transaction_Type = 'MAINTAIN_LINE' Then
      l_Rtg_Header_Rec := Bom_Rtg_Pub.g_Miss_Rtg_Header_Rec;
    End If;*/
    Error_Handler.Initialize;
    Bom_Rtg_Pub.Process_Rtg(p_Bo_Identifier      => 'RTG',
                            p_Api_Version_Number => 1.0,
                            p_Init_Msg_List      => False,
                            p_Rtg_Header_Rec     => l_Rtg_Header_Rec,
                            p_Rtg_Revision_Tbl   => l_Rtg_Revision_Tbl,
                            p_Operation_Tbl      => l_Operation_Tbl,
                            p_Op_Resource_Tbl    => l_Op_Resource_Tbl,
                            p_Sub_Resource_Tbl   => l_Sub_Resource_Tbl,
                            p_Op_Network_Tbl     => l_Op_Network_Tbl,
                            x_Rtg_Header_Rec     => Lx_Rtg_Header_Rec,
                            x_Rtg_Revision_Tbl   => Lx_Rtg_Revision_Tbl,
                            x_Operation_Tbl      => Lx_Operation_Tbl,
                            x_Op_Resource_Tbl    => Lx_Op_Resource_Tbl,
                            x_Sub_Resource_Tbl   => Lx_Sub_Resource_Tbl,
                            x_Op_Network_Tbl     => Lx_Op_Network_Tbl,
                            x_Return_Status      => Lx_Return_Status,
                            x_Msg_Count          => Lx_Msg_Count,
                            p_Debug              => g_Debug,
                            p_Output_Dir         => g_Debug_Output_Dir,
                            p_Debug_Filename     => g_Debug_Filename);
    --    Debug_Show('Return Status = ' || lx_return_status);
    --    Debug_Show('Message Count = ' || lx_msg_count);
  
    Error_Handler.Get_Message_List(l_Error_Message_List);
  
    For i In 1 .. l_Error_Message_List.Count Loop
      --  Debug_Show('Entity Id    : ' || l_error_message_list(i).entity_id);
      --  Debug_Show('Index        : ' || l_error_message_list(i).entity_index);
      --  Debug_Show('Message Type : ' || l_error_message_list(i).message_type);
      --  Debug_Show('Mesg         : ' || substr(l_error_message_list(i).message_text, 1, 250));
      --  Debug_Show('-------------------------------------------------------------------');
    
      If l_Error_Message_List(i).Message_Type <> 'W' Then
        If Length(x_Return_Message || l_Error_Message_List(i)
                  .Message_Text || ' ') < 2000 Then
        
          x_Return_Message := x_Return_Message || l_Error_Message_List(i)
                             .Message_Text || ' ';
        
        End If;
      End If;
    End Loop;
  
    If Lx_Return_Status <> 'S' Then
      x_Return_Status := 'E';
      ----Rollback;
    Else
      If l_Delete_Type > 0 Then
        Debug_Show('  -->>删除组:' || l_Delete_Group_Name || ',' ||
                   p_Organization_Code);
        Delete_Group_Api(p_Organization_Code,
                         l_Delete_Group_Name,
                         l_Delete_Type);
      End If;
    
      x_Return_Status := 'S';
      ----Commit;
    End If;
  
    x_Return_Message := Substr(x_Return_Message, 1, 1000);
  
    Insert_Log(p_Transaction_Id   => p_Transaction_Id,
               p_Entity_Type      => 'RTG',
               p_Entity_Name      => l_Rtg_Header_Rec.Assembly_Item_Name,
               p_Transaction_Type => l_Rtg_Header_Rec.Transaction_Type,
               p_Transaction_Date => Sysdate,
               p_Return_Status    => x_Return_Status,
               p_Return_Message   => x_Return_Message);
  
  End Rtg_Sync_Proc;

  Procedure Item_Sync_Main(p_Group_Name  In Varchar2,
                           p_Total_Num   Out Number,
                           p_Success_Num Out Number) Is
  
    l_Item_Rec      Inv_Item_Grp.Item_Rec_Type;
    l_Item_Rec2     Inv_Item_Grp.Item_Rec_Type;
    l_Template_Name Varchar(100);
  
    x_Return_Status Varchar2(200);
    x_Msg_Data      Varchar2(1000);
    x_Error_Tbl     Inv_Item_Grp.Error_Tbl_Type;
    x_Item_Rec      Inv_Item_Grp.Item_Rec_Type;
  
    p_Transaction_Type Varchar2(10);
    t_Total_Num        Number;
    t_Success_Num      Number;
  
    p_Delete_Group_Id   Number;
    p_Delete_Group_Name Varchar2(100);
    p_Delete_Exists     Varchar2(1); -- ?????????
    p_Commit_Count      Number;
    x                   Number;
  
    x_Status      Varchar2(20);
    x_Status_Code Varchar2(2000);
  
    x_Item_Id   Number;
    x_Msg_Count Number;
    x_Msg_Data2 Varchar2(2000);
    --xdp20120504add
    V_Wip_Supply_Subinventory VARCHAR2(5);
    V_Wip_Supply_Locator_Id   VARCHAR2(5);
    v_location_id             number;
    v_ORGANIZATION_CODE       varchar2(10);
    --xdp20120504add
  
    p_Category_Rec Cux_Pdm_Erp_Sync_Pkg.Category_Type;
  
    Cursor Cur_Line(p_Group_Name Varchar2) Is
      Select a.Group_Name,
             a.Item_Tran_Id,
             a.Segment1, --物料编码
             a.Description, --物料说明
             a.Primary_Uom_Code, --计量单位
             a.Long_Description, --物料备注信息
             a.Template_Name, --物料模板
             a.Category_Set_Id, --物料类别集
             a.Category_Id, --大中小类
             a.Organization_Id, --组织分配
             a.Organization_Code, --组织分配
             a.Lot_Control_Code, --批次控制,库存-批次-控制,
             a.Location_Control_Code, --货位控制
             a.Buyer_Id, --采购员-只能主层
             a.Planning_Make_Buy_Code, --制造或采购
             a.Full_Lead_Time, --采购提前期
             a.Planner_Code, --计划员
             a.Transaction_Type,
             a.Receiving_Routing_Id,
             a.Attribute1,
             a.Attribute2,
             a.Attribute3,
             a.Attribute4,
             a.Attribute5,
             a.Attribute6,
             a.Attribute7, --xdp20120504add
             a.Attribute8,
             a.Attribute9,
             a.Attribute30, --xdp20120504add
             Item_Catalog_Header_Id,
             End_Assembly_Pegging_Flag, --MPS/MRP计划-追溯,是否按照项目跟踪,value
             List_Price_Per_Unit, --采购-价目表价格,参考采购价格,value
             Minimum_Order_Quantity, --总计划-订货量-最小,最小订货量,value
             Fixed_Days_Supply, --总计划-订单修改量-固定供应天数,固定供应天数(天),value
             Shippable_Item_Flag, --订单管理-可发运,是否可销售,vallue
             Shelf_Life_Code, --库存-批次过期-控制,批次过期控制,vallue
             Shelf_Life_Days, --库存-批次过期-存储期限,批次过期天数(天),value
             Serial_Number_Control_Code, --库存-序列-生成,是否序列控制,vallue
             Min_Minmax_Quantity, --总计划-最小数量,库存最小限额,value
             Max_Minmax_Quantity, --总计划-最大数量,库存最大限额,value
             Days_Early_Receipt_Allowed, --接收-接收日期控制-提前天数,接收提前天数,value
             Days_Late_Receipt_Allowed, --接收-接收日期控制-延迟天数,接收延迟天数,value
             Receipt_Days_Exception_Code, --接收-接收日期控制-活动,接收活动,value
             Qty_Rcv_Tolerance, --接收-超量接收控制-允差,接收超量允差,value
             Qty_Rcv_Exception_Code, --接收-超量接收控制-活动,超量接收活动,value
             Fixed_Lot_Multiplier, --总计划-订单修改量-固定批次增加,最小包装单位,value
             a.Weight_Uom_Code,
             a.Unit_Weight,
             a.Wip_Supply_Subinventory,
             a.Wip_Supply_Locator_code,
             a.Default_Receiving_Subinv
        From Cux_Mtl_System_Items_Interface a
       Where a.Group_Name = p_Group_Name
         And a.Return_Status Is Null
       Order By a.Segment1, a.Organization_Id;
  
    Cursor Cur_Del(p_Group_Name In Varchar2) Is
      Select a.Organization_Id, a.Organization_Code
        From Cux_Mtl_System_Items_Interface a
       Where a.Group_Name = p_Group_Name
            --And a.Return_Status Is Null
         And a.Transaction_Type = 'DELETE'
       Group By a.Organization_Id, a.Organization_Code;
    --c_Cur_Line Cur_Line%Rowtype;
  
  Begin
  
    t_Total_Num   := 0;
    t_Success_Num := 0;
     begin
        Select Dg.Delete_Group_Sequence_Id, Dg.Delete_Group_Name
          Into p_Delete_Group_Id, p_Delete_Group_Name
          From Bom_Delete_Groups Dg, Mtl_Parameters Mp
         Where Dg.Delete_Group_Name = 'delete_g'
           And Mp.Organization_Id = Dg.Organization_Id;
     exception when others then
     p_Delete_Group_Id:=0;
     p_Delete_Group_Name:=null;
     end;
     --fnd_file.put_line(fnd_file.output,'33333333333333');
    For c_Cur_Line In Cur_Line(p_Group_Name) Loop
    /*xdp20120504add*/
      select ood.ORGANIZATION_CODE
        into v_ORGANIZATION_CODE
        from org_organization_definitions ood
       where ood.organization_id = c_Cur_Line.Organization_Id
         and nvl(ood.DISABLE_DATE, sysdate + 1) > sysdate;
      if v_ORGANIZATION_CODE <> 'HEC' and
         c_Cur_Line.Wip_Supply_Subinventory is not null then
        v_location_id             := get_locator_id(p_organization_id => c_Cur_Line.Organization_Id,
                                                    p_subinv_code     => c_Cur_Line.Wip_Supply_Subinventory,
                                                    p_locator_code    => c_Cur_Line.Wip_Supply_Locator_code);
        V_Wip_Supply_Subinventory := c_Cur_Line.Wip_Supply_Subinventory;
        V_Wip_Supply_Locator_id   := v_location_id;
      ELSE
        V_Wip_Supply_Subinventory := NULL;
        V_Wip_Supply_Locator_id   := NULL;
      end if;
    /*xdp20120504add*/
      l_Item_Rec                  := Inv_Item_Grp.g_Miss_Item_Rec;
      l_Item_Rec.Segment1         := c_Cur_Line.Segment1;
      l_Item_Rec.Description      := c_Cur_Line.Description;
      l_Item_Rec.Primary_Uom_Code := c_Cur_Line.Primary_Uom_Code;
      l_Item_Rec.Organization_Id  := c_Cur_Line.Organization_Id;
    
      l_Item_Rec.Lot_Control_Code            := c_Cur_Line.Lot_Control_Code;
      l_Item_Rec.Location_Control_Code       := c_Cur_Line.Location_Control_Code;
      l_Item_Rec.Buyer_Id                    := c_Cur_Line.Buyer_Id;
      l_Item_Rec.Planning_Make_Buy_Code      := c_Cur_Line.Planning_Make_Buy_Code;
      l_Item_Rec.Full_Lead_Time              := c_Cur_Line.Full_Lead_Time;
      l_Item_Rec.Planner_Code                := c_Cur_Line.Planner_Code;
      l_Item_Rec.Long_Description            := c_Cur_Line.Long_Description;
      l_Item_Rec.Receiving_Routing_Id        := c_Cur_Line.Receiving_Routing_Id;
      l_Item_Rec.Attribute1                  := c_Cur_Line.Attribute1;
      l_Item_Rec.Attribute2                  := c_Cur_Line.Attribute2;
      l_Item_Rec.Attribute3                  := c_Cur_Line.Attribute3;
      l_Item_Rec.Attribute4                  := c_Cur_Line.Attribute4;
      l_Item_Rec.Attribute5                  := c_Cur_Line.Attribute5;
      l_Item_Rec.Attribute6                  := c_Cur_Line.Attribute6;
      l_Item_Rec.Attribute7                  := c_Cur_Line.Attribute7; --xdp20120504add
      l_Item_Rec.Attribute8                  := c_Cur_Line.Attribute8;
      l_Item_Rec.Attribute9                  := c_Cur_Line.Attribute9;
      l_Item_Rec.Attribute30                 := c_Cur_Line.Attribute30; --xdp20120504add
      l_Item_Rec.End_Assembly_Pegging_Flag   := c_Cur_Line.End_Assembly_Pegging_Flag; --MPS/MRP计划-追溯,是否按照项目跟踪,value
      l_Item_Rec.List_Price_Per_Unit         := c_Cur_Line.List_Price_Per_Unit; --采购-价目表价格,参考采购价格,value
      l_Item_Rec.Minimum_Order_Quantity      := c_Cur_Line.Minimum_Order_Quantity; --总计划-订货量-最小,最小订货量,value
      l_Item_Rec.Fixed_Days_Supply           := c_Cur_Line.Fixed_Days_Supply; --总计划-订单修改量-固定供应天数,固定供应天数(天),value
      l_Item_Rec.Shippable_Item_Flag         := c_Cur_Line.Shippable_Item_Flag; --订单管理-可发运,是否可销售,vallue
      l_Item_Rec.Shelf_Life_Code             := c_Cur_Line.Shelf_Life_Code; --库存-批次过期-控制,批次过期控制,vallue
      l_Item_Rec.Shelf_Life_Days             := c_Cur_Line.Shelf_Life_Days; --库存-批次过期-存储期限,批次过期天数(天),value
      l_Item_Rec.Serial_Number_Control_Code  := c_Cur_Line.Serial_Number_Control_Code; --库存-序列-生成,是否序列控制,vallue
      l_Item_Rec.Min_Minmax_Quantity         := c_Cur_Line.Min_Minmax_Quantity; --总计划-最小数量,库存最小限额,value
      l_Item_Rec.Max_Minmax_Quantity         := c_Cur_Line.Max_Minmax_Quantity; --总计划-最大数量,库存最大限额,value
      l_Item_Rec.Days_Early_Receipt_Allowed  := c_Cur_Line.Days_Early_Receipt_Allowed; --接收-接收日期控制-提前天数,接收提前天数,value
      l_Item_Rec.Days_Late_Receipt_Allowed   := c_Cur_Line.Days_Late_Receipt_Allowed; --接收-接收日期控制-延迟天数,接收延迟天数,value
      l_Item_Rec.Receipt_Days_Exception_Code := c_Cur_Line.Receipt_Days_Exception_Code; --接收-接收日期控制-活动,接收活动,value
      l_Item_Rec.Qty_Rcv_Tolerance           := c_Cur_Line.Qty_Rcv_Tolerance; --接收-超量接收控制-允差,接收超量允差,value
      l_Item_Rec.Qty_Rcv_Exception_Code      := c_Cur_Line.Qty_Rcv_Exception_Code; --接收-超量接收控制-活动,超量接收活动,value
      l_Item_Rec.Fixed_Lot_Multiplier        := c_Cur_Line.Fixed_Lot_Multiplier; --总计划-订单修改量-固定批次增加,最小包装单位,value
      l_Item_Rec.Weight_Uom_Code             := c_Cur_Line.Weight_Uom_Code;
      l_Item_Rec.Unit_Weight                 := c_Cur_Line.Unit_Weight;
      l_Item_Rec.Wip_Supply_Subinventory     := V_Wip_Supply_Subinventory; /*xdp20120504add*/
      l_Item_Rec.Wip_Supply_Locator_Id       := V_Wip_Supply_Locator_Id; /*xdp20120504add*/
    
      l_Item_Rec.Created_By       := -1;
      l_Item_Rec.Last_Updated_By  := -1;
      l_Item_Rec.Creation_Date    := Sysdate;
      l_Item_Rec.Last_Update_Date := Sysdate;
      p_Transaction_Type          := c_Cur_Line.Transaction_Type;
    
      --Fnd_Global.Apps_Initialize(1151, 50659, 401);
      If p_Transaction_Type = 'DELETE' Then
      
        /*Select Dg.Delete_Group_Sequence_Id, Dg.Delete_Group_Name
        --Mp.Organization_Id
          Into p_Delete_Group_Id, p_Delete_Group_Name
          From Bom_Delete_Groups Dg, Mtl_Parameters Mp
         Where \*Dg.Delete_Group_Name = 'DELITEM'
                                                                           And*\
         Mp.Organization_Id = Dg.Organization_Id
         And Mp.Organization_Id = c_Cur_Line.Organization_Id
         And Dg.Delete_Type = 1 --类型为物流
         And Rownum = 1;*/
      
        Debug_Show('1-->' || p_Delete_Group_Id || ',' ||
                   p_Delete_Group_Name);
        Insert Into Bom_Delete_Entities a
          (a.Delete_Entity_Sequence_Id,
           a.Delete_Group_Sequence_Id,
           a.Delete_Entity_Type,
           a.Inventory_Item_Id,
           a.Organization_Id,
           a.Item_Description,
           a.Item_Concat_Segments,
           a.Delete_Status_Type,
           a.Prior_Process_Flag,
           a.Prior_Commit_Flag,
           a.Last_Update_Date,
           a.Last_Updated_By,
           a.Creation_Date,
           a.Created_By,
           a.Last_Update_Login)
          Select Bom_Delete_Entities_s.Nextval,
                 p_Delete_Group_Id,
                 1,
                 Msi.Inventory_Item_Id,
                 --c_Cur_Line.Organization_Id,
                 Cux_Tool_Pkg.g_Organization_Id,
                 Msi.Description,
                 Msi.Segment1,
                 1,
                 2,
                 1,
                 Sysdate,
                 -1,
                 Sysdate,
                 -1,
                 -1
            From Mtl_System_Items_b Msi
           Where Msi.Organization_Id = Cux_Tool_Pkg.g_Organization_Id --c_Cur_Line.Organization_Id
             And Msi.Segment1 = c_Cur_Line.Segment1;
      
        p_Delete_Exists := 'Y';
        x_Return_Status := 'S';
      
        Insert_Log(p_Transaction_Id   => c_Cur_Line.Item_Tran_Id,
                   p_Entity_Type      => 'ITEM',
                   p_Entity_Name      => c_Cur_Line.Segment1,
                   p_Transaction_Type => p_Transaction_Type,
                   p_Transaction_Date => Sysdate,
                   p_Return_Status    => 'S',
                   p_Return_Message   => Null);
      
      Else

        p_Category_Rec                 := Cux_Pdm_Erp_Sync_Pkg.g_Category_Rec;
        p_Category_Rec.Category_Id     := c_Cur_Line.Category_Id;
        p_Category_Rec.Category_Set_Id := c_Cur_Line.Category_Set_Id;
        Cux_Pdm_Erp_Sync_Pkg.Item_Sync_Proc(p_Transaction_Type => p_Transaction_Type,
                                            p_Template_Name    => c_Cur_Line.Template_Name,
                                            p_Category_Rec     => p_Category_Rec,
                                            p_Item_Rec         => l_Item_Rec,
                                            x_Item_Id          => x_Item_Id,
                                            p_Return_Status    => x_Return_Status,
                                            p_Return_Msg       => x_Msg_Data);
      
        --更新目录组
        If x_Return_Status = 'S' And
           Nvl(c_Cur_Line.Item_Catalog_Header_Id, -1) != -1 Then
          Catalog_Maintain(d_Group_Name  => p_Group_Name,
                           d_Header_Id   => c_Cur_Line.Item_Catalog_Header_Id,
                           x_Status      => x_Status,
                           x_Status_Code => x_Status_Code);

          If c_Cur_Line.Default_Receiving_Subinv Is Not Null Then
            Inv_Item_Sub_Default_Pkg.Insert_Upd_Item_Sub_Defaults(x_Return_Status     => x_Status_Code,
                                                                  x_Msg_Count         => x_Msg_Count,
                                                                  x_Msg_Data          => x_Msg_Data2,
                                                                  p_Organization_Id   => c_Cur_Line.Organization_Id,
                                                                  p_Inventory_Item_Id => x_Item_Id,
                                                                  p_Subinventory_Code => c_Cur_Line.Default_Receiving_Subinv,
                                                                  p_Default_Type      => 2,
                                                                  p_Creation_Date     => Sysdate,
                                                                  p_Created_By        => -1,
                                                                  p_Last_Update_Date  => Sysdate,
                                                                  p_Last_Updated_By   => -1,
                                                                  p_Process_Code      => 'INSERT', --'UPDATE',/*xdp20120504add*/
                                                                  P_COMMIT            => FND_API.G_false);

          End If;
        End If;
      End If;
      t_Total_Num := t_Total_Num + 1;
    
      -- Debug_Show(x_msg_data);
      If x_Return_Status = 'S' Then
        t_Success_Num := t_Success_Num + 1;
      End If;
    
      Update Cux_Mtl_System_Items_Interface
         Set Return_Status = x_Return_Status,
             Error_Msg     = (x_Msg_Data || x_Status_Code)
       Where Item_Tran_Id = c_Cur_Line.Item_Tran_Id
            --2011-11-03 add
         And Group_Name = c_Cur_Line.Group_Name;
      -------
    /*SELECT MOD(t_total_num
                                                                                                                                                                                                                                                                                                                                ,10)
                                                                                                                                                                                                                                                                                                                      INTO   p_commit_count
                                                                                                                                                                                                                                                                                                                      FROM   dual;
                                                                                                                                                                                                                                                                                                                      IF p_commit_count = 0 THEN
                                                                                                                                                                                                                                                                                                                        COMMIT;
                                                                                                                                                                                                                                                                                                                      END IF;*/
    
    End Loop;
  
    If Nvl(p_Delete_Exists, 'N') = 'Y' Then
      --Delete_Group_Api('MST', 'DELITEM', 1);
      --Debug_Show('-->x:' || x);
      /*For c_Del In Cur_Del(p_Group_Name) Loop
      
        Debug_Show('-->delete--c_Del.Organization_Code:' ||
                             c_Del.Organization_Code || ',' ||
                             'p_Delete_Group_Name:' || p_Delete_Group_Name);
        Select Dg.Delete_Group_Sequence_Id, Dg.Delete_Group_Name
        --Mp.Organization_Id
          Into p_Delete_Group_Id, p_Delete_Group_Name
          From Bom_Delete_Groups Dg, Mtl_Parameters Mp
         Where \*Dg.Delete_Group_Name = 'DELITEM'
                                                                           And*\
         Mp.Organization_Id = Dg.Organization_Id
         And Mp.Organization_Id = c_Del.Organization_Id
         And Dg.Delete_Type = 1 --类型为物流
         And Rownum = 1;
        Delete_Group_Api(c_Del.Organization_Code, p_Delete_Group_Name, 1);
      End Loop;*/
    
      Delete_Group_Api(Cux_Tool_Pkg.g_Organization_Code,
                       p_Delete_Group_Name,
                       1);
    End If;
    Debug_Show('-->delete over');
  
    Delete From Mtl_System_Items_Interface
     Where Segment1 In (Select Segment1
                          From Cux_Mtl_System_Items_Interface t
                         Where Group_Name = p_Group_Name);
    ----COMMIT;
  
    p_Total_Num   := t_Total_Num;
    p_Success_Num := t_Success_Num;
  
  End;

  Procedure Bom_Sync_Main(p_Group_Name  In Varchar2,
                          p_Total_Num   Out Number,
                          p_Success_Num Out Number) Is
    l_Transaction_Id         Number;
    l_Bom_Header_Rec         Bom_Bo_Pub.Bom_Head_Rec_Type := Bom_Bo_Pub.g_Miss_Bom_Header_Rec;
    l_Bom_Revision_Tbl       Bom_Bo_Pub.Bom_Revision_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Revision_Tbl;
    l_Bom_Component_Tbl      Bom_Bo_Pub.Bom_Comps_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Component_Tbl;
    l_Bom_Ref_Designator_Tbl Bom_Bo_Pub.Bom_Ref_Designator_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Ref_Designator_Tbl;
    l_Bom_Sub_Component_Tbl  Bom_Bo_Pub.Bom_Sub_Component_Tbl_Type := Bom_Bo_Pub.g_Miss_Bom_Sub_Component_Tbl;
    x_Return_Status          Varchar2(1);
    x_Return_Message         Varchar2(1000);
  
    p_Count     Number;
    p_Tran_Type Varchar2(30);
    p_Line_Type Varchar2(30);
  
    p_Transaction_Type Varchar2(10);
    t_Total_Num        Number;
    t_Success_Num      Number;
  
    Cursor Cur_Head(p_Group_Name Varchar2) Is
      Select *
        From Cux_Bom_Head_Interface l
       Where l.Group_Name = p_Group_Name;
    c_Cur_Head Cur_Head%Rowtype;
  
    Cursor Cur_Line(Tran_Id Number) Is
      Select *
        From Cux_Bom_Line_Interface l
       Where l.Bill_Sequence_Id = Tran_Id;
    c_Cur_Line Cur_Line%Rowtype;
  
  Begin
    t_Total_Num   := 0;
    t_Success_Num := 0;
  
    Open Cur_Head(p_Group_Name);
    Loop
      Fetch Cur_Head
        Into c_Cur_Head;
      Exit When Cur_Head%Notfound;
    
      l_Bom_Header_Rec.Assembly_Item_Name := c_Cur_Head.Assembly_Item_Name;
      l_Bom_Header_Rec.Organization_Code  := c_Cur_Head.Organization_Code;
      --  l_bom_header_rec.alternate_bom_code:= c_cur_head.alternate_bom_code;
      l_Bom_Header_Rec.Assembly_Type    := c_Cur_Head.Assembly_Type;
      l_Bom_Header_Rec.Transaction_Type := c_Cur_Head.Transaction_Type;
      p_Tran_Type                       := c_Cur_Head.Transaction_Type;
      Debug_Show('<======================================>');
      Debug_Show(l_Bom_Header_Rec.Assembly_Item_Name);
      Debug_Show(l_Bom_Header_Rec.Organization_Code);
      Debug_Show(l_Bom_Header_Rec.Assembly_Type);
      --  p_tran_type :='DELETE';
    
      If p_Tran_Type = 'CREATE' Then
        l_Bom_Component_Tbl := Bom_Bo_Pub.g_Miss_Bom_Component_Tbl;
        p_Count             := 1;
      
        Open Cur_Line(c_Cur_Head.Bill_Sequence_Id);
        Loop
          Fetch Cur_Line
            Into c_Cur_Line;
          Exit When Cur_Line%Notfound;
        
          Debug_Show('<---->');
          Debug_Show(c_Cur_Line.Item_Sequence_Number);
          Debug_Show(c_Cur_Line.Quantity_Per_Assembly);
          Debug_Show(c_Cur_Line.Start_Effective_Date);
          Debug_Show(c_Cur_Line.Component_Item_Name);
          Debug_Show(c_Cur_Line.Operation_Sequence_Number);
          l_Bom_Component_Tbl(p_Count).Item_Sequence_Number := c_Cur_Line.Item_Sequence_Number;
          l_Bom_Component_Tbl(p_Count).Transaction_Type := p_Tran_Type;
          l_Bom_Component_Tbl(p_Count).Quantity_Per_Assembly := c_Cur_Line.Quantity_Per_Assembly;
          l_Bom_Component_Tbl(p_Count).Start_Effective_Date := c_Cur_Line.Start_Effective_Date;
          l_Bom_Component_Tbl(p_Count).Component_Item_Name := c_Cur_Line.Component_Item_Name;
          l_Bom_Component_Tbl(p_Count).Operation_Sequence_Number := c_Cur_Line.Operation_Sequence_Number;
          l_Bom_Component_Tbl(p_Count).Attribute1 := c_Cur_Line.Attribute1; --下料尺寸
          p_Count := p_Count + 1;
        
        End Loop;
        Close Cur_Line;
      
      Elsif p_Tran_Type = 'DELETE' Then
        l_Bom_Header_Rec.Delete_Group_Name := 'DELBOM';
        l_Bom_Header_Rec.Transaction_Type  := 'DELETE';
      
      Elsif p_Tran_Type = 'UPDATE' Then
        l_Bom_Header_Rec.Delete_Group_Name := 'DELBOM';
        l_Bom_Header_Rec.Transaction_Type  := 'DELETE';
      
        Cux_Pdm_Erp_Sync_Pkg.Bom_Sync_Proc --
        (p_Transaction_Id         => l_Transaction_Id,
         p_Bom_Header_Rec         => l_Bom_Header_Rec,
         p_Bom_Revision_Tbl       => l_Bom_Revision_Tbl,
         p_Bom_Component_Tbl      => l_Bom_Component_Tbl,
         p_Bom_Ref_Designator_Tbl => l_Bom_Ref_Designator_Tbl,
         p_Bom_Sub_Component_Tbl  => l_Bom_Sub_Component_Tbl,
         x_Return_Status          => x_Return_Status,
         x_Return_Message         => x_Return_Message);
      
        If x_Return_Status = 'S' Then
          Select h.Assembly_Item_Name,
                 h.Organization_Code,
                 Null,
                 h.Assembly_Type
            Into l_Bom_Header_Rec.Assembly_Item_Name,
                 l_Bom_Header_Rec.Organization_Code,
                 l_Bom_Header_Rec.Alternate_Bom_Code,
                 l_Bom_Header_Rec.Assembly_Type
            From Cux_Bom_Head_Interface h
           Where h.Bill_Sequence_Id = l_Transaction_Id;
        
          l_Bom_Header_Rec.Transaction_Type := 'CREATE';
        
          p_Count := 1;
          Open Cur_Line(l_Transaction_Id);
          Loop
            Fetch Cur_Line
              Into c_Cur_Line;
            Exit When Cur_Line%Notfound;
            l_Bom_Component_Tbl(p_Count).Item_Sequence_Number := c_Cur_Line.Item_Sequence_Number;
            l_Bom_Component_Tbl(p_Count).Transaction_Type := 'CREATE';
            l_Bom_Component_Tbl(p_Count).Quantity_Per_Assembly := c_Cur_Line.Quantity_Per_Assembly;
            l_Bom_Component_Tbl(p_Count).Start_Effective_Date := c_Cur_Line.Start_Effective_Date;
            l_Bom_Component_Tbl(p_Count).Component_Item_Name := c_Cur_Line.Component_Item_Name;
            l_Bom_Component_Tbl(p_Count).Operation_Sequence_Number := c_Cur_Line.Operation_Sequence_Number;
            l_Bom_Component_Tbl(p_Count).Attribute1 := c_Cur_Line.Attribute1; --下料尺寸-xdpadd
            p_Count := p_Count + 1;
          
          End Loop;
          Close Cur_Line;
        
        End If;
      Elsif p_Tran_Type = 'MAINTAIN_LINE' Then
        Debug_Show('-->>事物处理类型:' || p_Tran_Type);
        --l_Bom_Header_Rec    := Bom_Bo_Pub.g_Miss_Bom_Header_Rec;
        l_Bom_Component_Tbl := Bom_Bo_Pub.g_Miss_Bom_Component_Tbl;
        p_Count             := 1;
      
        Open Cur_Line(c_Cur_Head.Bill_Sequence_Id);
        Loop
          Fetch Cur_Line
            Into c_Cur_Line;
          Exit When Cur_Line%Notfound;
        
          Debug_Show('-->>事物处理行类型:' || c_Cur_Line.Transaction_Type);
          Debug_Show('  -->>行组织代码:' || c_Cur_Line.Organization_Code);
          Debug_Show('  -->>物料:' || c_Cur_Line.Assembly_Item_Name);
          Debug_Show('  -->>工序号:' || c_Cur_Line.Operation_Sequence_Number);
          Debug_Show('  -->>组件:' || c_Cur_Line.Component_Item_Name);
          Debug_Show('  -->>有效日期:' || c_Cur_Line.Start_Effective_Date);
          p_Line_Type := c_Cur_Line.Transaction_Type;
        
          l_Bom_Component_Tbl(p_Count).Transaction_Type := p_Line_Type;
          l_Bom_Component_Tbl(p_Count).Organization_Code := c_Cur_Head.Organization_Code;
          l_Bom_Component_Tbl(p_Count).Assembly_Item_Name := c_Cur_Head.Assembly_Item_Name;
          l_Bom_Component_Tbl(p_Count).Alternate_Bom_Code := c_Cur_Head.Alternate_Bom_Designator;
          l_Bom_Component_Tbl(p_Count).Operation_Sequence_Number := c_Cur_Line.Operation_Sequence_Number;
          l_Bom_Component_Tbl(p_Count).Component_Item_Name := c_Cur_Line.Component_Item_Name;
          l_Bom_Component_Tbl(p_Count).Start_Effective_Date := c_Cur_Line.Start_Effective_Date; --To_Date(To_Char(c_Cur_Line.Start_Effective_Date,
          -- 'yyyy-mm-dd hh24:mi:ss'),
          --'');
          If p_Line_Type = 'DELETE' Then
            l_Bom_Component_Tbl(p_Count).Delete_Group_Name := 'DELBOM_C';
          Else
            l_Bom_Component_Tbl(p_Count).Item_Sequence_Number := c_Cur_Line.Item_Sequence_Number; --序号
            l_Bom_Component_Tbl(p_Count).Quantity_Per_Assembly := c_Cur_Line.Quantity_Per_Assembly; --数量
            l_Bom_Component_Tbl(p_Count).New_Effectivity_Date := c_Cur_Line.New_Effectivity_Date; --新的起效日期
            l_Bom_Component_Tbl(p_Count).New_Operation_Sequence_Number := c_Cur_Line.New_Operation_Sequence_Number; --新工序号
            l_Bom_Component_Tbl(p_Count).Wip_Supply_Type := c_Cur_Line.Wip_Supply_Type; --供应类型
            l_Bom_Component_Tbl(p_Count).Disable_Date := c_Cur_Line.Disable_Date;
            l_Bom_Component_Tbl(p_Count).Attribute1 := c_Cur_Line.Attribute1; --下料尺寸
          End If;
          p_Count := p_Count + 1;
        
        End Loop;
        Close Cur_Line;
      
      End If;
    
      Cux_Pdm_Erp_Sync_Pkg.Bom_Sync_Proc --
      (p_Transaction_Id         => l_Transaction_Id,
       p_Bom_Header_Rec         => l_Bom_Header_Rec,
       p_Bom_Revision_Tbl       => l_Bom_Revision_Tbl,
       p_Bom_Component_Tbl      => l_Bom_Component_Tbl,
       p_Bom_Ref_Designator_Tbl => l_Bom_Ref_Designator_Tbl,
       p_Bom_Sub_Component_Tbl  => l_Bom_Sub_Component_Tbl,
       x_Return_Status          => x_Return_Status,
       x_Return_Message         => x_Return_Message);
    
      -- Debug_Show('=================================================');
      -- Debug_Show(x_return_status);
      --  Debug_Show(x_return_message);
    
      Update Cux_Bom_Head_Interface k
         Set k.Return_Status = x_Return_Status,
             k.Error_Msg     = x_Return_Message
       Where k.Bill_Sequence_Id = c_Cur_Head.Bill_Sequence_Id;
    
      t_Total_Num := t_Total_Num + 1;
      If x_Return_Status = 'S' Then
        t_Success_Num := t_Success_Num + 1;
      End If;
    
    End Loop;
    Close Cur_Head;
  
    ----COMMIT;
  
    p_Total_Num   := t_Total_Num;
    p_Success_Num := t_Success_Num;
  
  End;

  Procedure Rou_Sync_Main(p_Group_Name  In Varchar2,
                          p_Total_Num   Out Number,
                          p_Success_Num Out Number) Is
    Cursor Cur_Main(p_Group_Name Varchar2) Is
      Select Rh.Routing_Sequence_Id,
             Rh.Assembly_Item_Number,
             Rh.Organization_Code,
             Rh.Transaction_Type
        From Cux_Routing_Head_Interface Rh
       Where Rh.Group_Name = p_Group_Name
         And Rh.Return_Status Is Null;
    c_Cur_Main Cur_Main%Rowtype;
  
    p_Return_Status Varchar2(1);
    t_Total_Num     Number;
    t_Success_Num   Number;
  
  Begin
  
    t_Total_Num   := 0;
    t_Success_Num := 0;
    Open Cur_Main(p_Group_Name);
    Loop
      Fetch Cur_Main
        Into c_Cur_Main;
      Exit When Cur_Main%Notfound;
      --    Debug_Show(c_cur_main.routing_sequence_id);
    
      Rou_Sync_Line(c_Cur_Main.Routing_Sequence_Id, p_Return_Status);
    
      t_Total_Num := t_Total_Num + 1;
      If p_Return_Status = 'S' Then
        t_Success_Num := t_Success_Num + 1;
      End If;
    
    End Loop;
    Close Cur_Main;
  
    p_Total_Num   := t_Total_Num;
    p_Success_Num := t_Success_Num;
  
  End;

  Procedure Rou_Sync_Line(p_Routing_Sequence_Id In Number,
                          p_Return_Status       Out Varchar2) Is
    l_Transaction_Id   Number;
    l_Rtg_Header_Rec   Bom_Rtg_Pub.Rtg_Header_Rec_Type;
    l_Rtg_Revision_Tbl Bom_Rtg_Pub.Rtg_Revision_Tbl_Type;
    l_Operation_Tbl    Bom_Rtg_Pub.Operation_Tbl_Type;
    l_Op_Resource_Tbl  Bom_Rtg_Pub.Op_Resource_Tbl_Type;
    l_Sub_Resource_Tbl Bom_Rtg_Pub.Sub_Resource_Tbl_Type;
    l_Op_Network_Tbl   Bom_Rtg_Pub.Op_Network_Tbl_Type;
    l_Return_Status    Varchar2(1);
    l_Return_Message   Varchar2(20000);
  
    p_Transaction_Type Varchar2(20);
    p_Operation_Type   Varchar2(20);
    p_Resource_Type    Varchar2(20);
    --    t_total_num   NUMBER;
    --    t_success_num NUMBER;
    --    p_commit_count NUMBER;
  
    p_Count_s Number;
    p_Count_r Number;
  
    Cursor Cur_Main(p_Routing_Sequence_Id Number) Is
      Select Rh.Routing_Sequence_Id, --cux_operation_id_s
             Rh.Assembly_Item_Number, --产品编码
             Rh.Organization_Code, --组织code
             Rh.Transaction_Type, --事物处理类型,创建为  CREATE
             Rh.Attribute1, --工艺文件编号
             Rh.Attribute2, --工艺路线
             Rh.Alternate_Routing_Designator
        From Cux_Routing_Head_Interface Rh
       Where Rh.Routing_Sequence_Id = p_Routing_Sequence_Id;
    c_Cur_Main Cur_Main%Rowtype;
  
    Cursor Cur_Operation(Tran_Id Number) Is
      Select s.Operation_Sequence_Id, --cux_operation_id_s
             s.Operation_Seq_Num Operation_Sequence_Number, --部门序列,由小到大,由上到下指定
             s.Department_Code, --部门code
             s.Effectivity_Date Start_Effective_Date, --起效时间
             s.Operation_Description, --部门描述
             s.Transaction_Type,
             s.Attribute7 --专用工具
        From Cux_Routing_Sequence_Interface s
       Where s.Routing_Sequence_Id = Tran_Id;
    c_Cur_Operation Cur_Operation%Rowtype;
  
    Cursor Cur_Resource(Tran_Id Number) Is
      Select r.Effectivity_Date Op_Start_Effective_Date, --起效时间
             r.Operation_Seq_Num Operation_Sequence_Number, --部门序列,与Cux_Routing_Sequence_Interface对应
             r.Resource_Seq_Num Resource_Sequence_Number, --资源序列,由小到大,由上到下指定
             r.Resource_Code, --资源代码
             r.Usage_Rate_Or_Amount, --主要-->单位使用量
             r.Usage_Rate_Or_Amount_Inverse, --主要-->倒数
             r.Schedule_Flag, --计划,计划,1=是,2=否,3=前一个,4=下一个
             r.Autocharge_Type, --成本计算-->计费类型
             r.Assigned_Units,
             r.Attribute1, --单件计奖工时
             r.Attribute3, --单件标准工时
             r.Transaction_Type
        From Cux_Routing_Resource_Interface r
       Where r.Operation_Sequence_Id = Tran_Id
         And r.Resource_Code Is Not Null
         And r.Usage_Rate_Or_Amount >= 0;
    c_Cur_Resource Cur_Resource%Rowtype;
  
  Begin
  
    --    t_total_num   := 0;
    --    t_success_num := 0;
  
    Open Cur_Main(p_Routing_Sequence_Id);
    Loop
      Fetch Cur_Main
        Into c_Cur_Main;
      Exit When Cur_Main%Notfound;
    
      p_Transaction_Type := c_Cur_Main.Transaction_Type;
    
      If p_Transaction_Type = 'CREATE' Then
        --l_Rtg_Header_Rec                    := Bom_Rtg_Pub.Rtg_Header_Rec_Type;
        l_Rtg_Header_Rec.Transaction_Type   := p_Transaction_Type;
        l_Rtg_Header_Rec.Assembly_Item_Name := c_Cur_Main.Assembly_Item_Number;
        l_Rtg_Header_Rec.Organization_Code  := c_Cur_Main.Organization_Code;
        l_Rtg_Header_Rec.Attribute2         := c_Cur_Main.Attribute2;
        l_Rtg_Header_Rec.Attribute1         := c_Cur_Main.Attribute1;
        p_Count_s                           := 1;
        p_Count_r                           := 1;
        Open Cur_Operation(c_Cur_Main.Routing_Sequence_Id);
        --l_Operation_Tbl := Bom_Rtg_Pub.Operation_Tbl_Type;
        Loop
          Fetch Cur_Operation
            Into c_Cur_Operation;
          Exit When Cur_Operation%Notfound;
          l_Operation_Tbl(p_Count_s).Operation_Sequence_Number := c_Cur_Operation.Operation_Sequence_Number;
          l_Operation_Tbl(p_Count_s).Start_Effective_Date := c_Cur_Operation.Start_Effective_Date;
          l_Operation_Tbl(p_Count_s).Department_Code := c_Cur_Operation.Department_Code;
          l_Operation_Tbl(p_Count_s).Transaction_Type := p_Transaction_Type;
          l_Operation_Tbl(p_Count_s).Operation_Description := c_Cur_Operation.Operation_Description;
          l_Operation_Tbl(p_Count_s).Attribute7 := c_Cur_Operation.Attribute7;
        
          Open Cur_Resource(c_Cur_Operation.Operation_Sequence_Id);
          Loop
            Fetch Cur_Resource
              Into c_Cur_Resource;
            Exit When Cur_Resource%Notfound;
          
            l_Op_Resource_Tbl(p_Count_r).Op_Start_Effective_Date := c_Cur_Resource.Op_Start_Effective_Date;
            l_Op_Resource_Tbl(p_Count_r).Operation_Sequence_Number := c_Cur_Resource.Operation_Sequence_Number;
            l_Op_Resource_Tbl(p_Count_r).Resource_Sequence_Number := c_Cur_Resource.Resource_Sequence_Number;
            l_Op_Resource_Tbl(p_Count_r).Resource_Code := c_Cur_Resource.Resource_Code;
            l_Op_Resource_Tbl(p_Count_r).Usage_Rate_Or_Amount := c_Cur_Resource.Usage_Rate_Or_Amount;
            l_Op_Resource_Tbl(p_Count_r).Schedule_Flag := c_Cur_Resource.Schedule_Flag;
            l_Op_Resource_Tbl(p_Count_r).Autocharge_Type := c_Cur_Resource.Autocharge_Type;
            l_Op_Resource_Tbl(p_Count_r).Transaction_Type := p_Transaction_Type;
            l_Op_Resource_Tbl(p_Count_r).Assigned_Units := c_Cur_Resource.Assigned_Units;
            l_Op_Resource_Tbl(p_Count_r).Attribute1 := c_Cur_Resource.Attribute1;
            l_Op_Resource_Tbl(p_Count_r).Attribute3 := c_Cur_Resource.Attribute3;
            p_Count_r := p_Count_r + 1;
          End Loop;
          Close Cur_Resource;
          p_Count_s := p_Count_s + 1;
        End Loop;
        Close Cur_Operation;
      
      Elsif p_Transaction_Type = 'DELETE' Then
      
        l_Rtg_Header_Rec.Transaction_Type   := p_Transaction_Type;
        l_Rtg_Header_Rec.Assembly_Item_Name := c_Cur_Main.Assembly_Item_Number;
        l_Rtg_Header_Rec.Organization_Code  := c_Cur_Main.Organization_Code;
        l_Rtg_Header_Rec.Delete_Group_Name  := 'DELROU';
      Elsif p_Transaction_Type = 'UPDATE' Then
        l_Rtg_Header_Rec.Transaction_Type       := p_Transaction_Type;
        l_Rtg_Header_Rec.Assembly_Item_Name     := c_Cur_Main.Assembly_Item_Number;
        l_Rtg_Header_Rec.Organization_Code      := c_Cur_Main.Organization_Code;
        l_Rtg_Header_Rec.Alternate_Routing_Code := c_Cur_Main.Alternate_Routing_Designator;
        l_Rtg_Header_Rec.Attribute1             := c_Cur_Main.Attribute1;
        l_Rtg_Header_Rec.Attribute2             := c_Cur_Main.Attribute2;
      
        --l_Rtg_Header_Rec                    := Bom_Rtg_Pub.g_Miss_Rtg_Header_Rec;
        p_Count_s := 1;
        p_Count_r := 1;
        Open Cur_Operation(c_Cur_Main.Routing_Sequence_Id);
        --l_Operation_Tbl := Bom_Rtg_Pub.Operation_Tbl_Type;
        Loop
          Fetch Cur_Operation
            Into c_Cur_Operation;
          Exit When Cur_Operation%Notfound;
          p_Operation_Type := c_Cur_Operation.Transaction_Type;
          If Nvl(p_Operation_Type, '~') != '~' Then
            --Debug_Show('  -->>事物处理类型:' || p_Transaction_Type);
            l_Operation_Tbl(p_Count_s).Assembly_Item_Name := c_Cur_Main.Assembly_Item_Number;
            l_Operation_Tbl(p_Count_s).Organization_Code := c_Cur_Main.Organization_Code;
            l_Operation_Tbl(p_Count_s).Alternate_Routing_Code := c_Cur_Main.Alternate_Routing_Designator;
            l_Operation_Tbl(p_Count_s).Operation_Sequence_Number := c_Cur_Operation.Operation_Sequence_Number;
            l_Operation_Tbl(p_Count_s).Start_Effective_Date := c_Cur_Operation.Start_Effective_Date;
          
            l_Operation_Tbl(p_Count_s).Transaction_Type := p_Operation_Type;
            If p_Operation_Type = 'DELETE' Then
              l_Operation_Tbl(p_Count_s).Delete_Group_Name := 'DELROUL'; --p_Operation_Tbl(i)
            Else
              l_Operation_Tbl(p_Count_s).Operation_Type := 1;
              l_Operation_Tbl(p_Count_s).Department_Code := c_Cur_Operation.Department_Code;
              l_Operation_Tbl(p_Count_s).Operation_Description := c_Cur_Operation.Operation_Description;
              l_Operation_Tbl(p_Count_s).Attribute7 := c_Cur_Operation.Attribute7;
            End If;
          End If;
        
          Open Cur_Resource(c_Cur_Operation.Operation_Sequence_Id);
          Loop
            Fetch Cur_Resource
              Into c_Cur_Resource;
            Exit When Cur_Resource%Notfound;
            p_Resource_Type := c_Cur_Resource.Transaction_Type;
            l_Op_Resource_Tbl(p_Count_r).Assembly_Item_Name := c_Cur_Main.Assembly_Item_Number;
            l_Op_Resource_Tbl(p_Count_r).Organization_Code := c_Cur_Main.Organization_Code;
            l_Op_Resource_Tbl(p_Count_r).Alternate_Routing_Code := c_Cur_Main.Alternate_Routing_Designator;
            --l_Op_Resource_Tbl(i).Operation_Type := 1;
            l_Op_Resource_Tbl(p_Count_r).Op_Start_Effective_Date := c_Cur_Operation.Start_Effective_Date;
            l_Op_Resource_Tbl(p_Count_r).Operation_Sequence_Number := c_Cur_Operation.Operation_Sequence_Number;
          
            l_Op_Resource_Tbl(p_Count_r).Resource_Sequence_Number := c_Cur_Resource.Resource_Sequence_Number;
            l_Op_Resource_Tbl(p_Count_r).Transaction_Type := p_Resource_Type;
            l_Op_Resource_Tbl(p_Count_r).Resource_Code := c_Cur_Resource.Resource_Code;
            l_Op_Resource_Tbl(p_Count_r).Usage_Rate_Or_Amount := c_Cur_Resource.Usage_Rate_Or_Amount;
            l_Op_Resource_Tbl(p_Count_r).Schedule_Flag := c_Cur_Resource.Schedule_Flag;
            l_Op_Resource_Tbl(p_Count_r).Autocharge_Type := c_Cur_Resource.Autocharge_Type;
            l_Op_Resource_Tbl(p_Count_r).Assigned_Units := c_Cur_Resource.Assigned_Units;
            l_Op_Resource_Tbl(p_Count_r).Attribute1 := c_Cur_Resource.Attribute1;
            l_Op_Resource_Tbl(p_Count_r).Attribute3 := c_Cur_Resource.Attribute3;
            p_Count_r := p_Count_r + 1;
          End Loop;
          Close Cur_Resource;
          p_Count_s := p_Count_s + 1;
        End Loop;
        Close Cur_Operation;
      
      End If;
    
      Cux_Pdm_Erp_Sync_Pkg.Rtg_Sync_Proc --
      (p_Transaction_Id   => l_Transaction_Id,
       p_Rtg_Header_Rec   => l_Rtg_Header_Rec,
       p_Rtg_Revision_Tbl => l_Rtg_Revision_Tbl,
       p_Operation_Tbl    => l_Operation_Tbl,
       p_Op_Resource_Tbl  => l_Op_Resource_Tbl,
       p_Sub_Resource_Tbl => l_Sub_Resource_Tbl,
       p_Op_Network_Tbl   => l_Op_Network_Tbl,
       x_Return_Status    => l_Return_Status,
       x_Return_Message   => l_Return_Message);
    
      -- Debug_Show('=================================================');
      -- Debug_Show(x_return_status);
      -- Debug_Show(x_return_message);
    
      --   t_total_num := t_total_num + 1;
      --   IF l_return_status = 'S' THEN
      --    t_success_num := t_success_num + 1;
      --  END IF;
    
      p_Return_Status := l_Return_Status;
    
      Update Cux_Routing_Head_Interface k
         Set k.Return_Status = l_Return_Status,
             k.Error_Msg     = Substr(l_Return_Message, 1, 2000)
       Where k.Routing_Sequence_Id = c_Cur_Main.Routing_Sequence_Id;
    
      /*
        select mod(t_total_num,50) into p_commit_count from dual ;
        if p_commit_count =0 then
           commit;
        end if;
      */
    
      ----Commit;
    
    End Loop;
    Close Cur_Main;
    ----Commit;
  End;
  FUNCTION get_locator_id(p_organization_id number,
                          p_subinv_code     VARCHAR2,
                          p_locator_code    VARCHAR2) RETURN NUMBER is
    x_return_status         VARCHAR2(1000);
    x_msg_count             NUMBER;
    x_msg_data              VARCHAR2(1000);
    x_inventory_location_id NUMBER;
    x_locator_exists        VARCHAR2(100);
    v_ORGANIZATION_CODE     varchar2(10);
  BEGIN
    BEGIN
      fnd_profile.put('MFG_ORGANIZATION_ID', p_organization_id);
    END;
    select ORGANIZATION_CODE
      into v_ORGANIZATION_CODE
      from org_organization_definitions
     where organization_id = p_organization_id;
    inv_loc_wms_pub.create_locator(x_return_status            => x_return_status,
                                   x_msg_count                => x_msg_count,
                                   x_msg_data                 => x_msg_data,
                                   x_inventory_location_id    => x_inventory_location_id,
                                   x_locator_exists           => x_locator_exists,
                                   p_organization_id          => p_organization_id,
                                   p_organization_code        => v_organization_code,
                                   p_concatenated_segments    => p_locator_code,
                                   p_description              => NULL,
                                   p_inventory_location_type  => NULL,
                                   p_picking_order            => NULL,
                                   p_location_maximum_units   => NULL,
                                   p_subinventory_code        => p_subinv_code,
                                   p_location_weight_uom_code => NULL,
                                   p_max_weight               => NULL,
                                   p_volume_uom_code          => NULL,
                                   p_max_cubic_area           => NULL,
                                   p_x_coordinate             => NULL,
                                   p_y_coordinate             => NULL,
                                   p_z_coordinate             => NULL,
                                   p_physical_location_id     => NULL,
                                   p_pick_uom_code            => NULL,
                                   p_dimension_uom_code       => NULL,
                                   p_length                   => NULL,
                                   p_width                    => NULL,
                                   p_height                   => NULL,
                                   p_status_id                => 1,
                                   p_dropping_order           => NULL);
    COMMIT;
    RETURN x_inventory_location_id;
  end;
Begin
  --Fnd_Global.Apps_Initialize(g_User_Id, g_Resp_Id, g_Resp_Appl_Id);
  Null;
End Cux_Pdm_Erp_Sync_Pkg; 
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 很抱歉,作为一个自然语言处理模型,我无法为您编写完整的程序代码。但是,我可以提供一些指导和技巧,以帮助您实现您的需求。 为了实现 Oracle EBS 日记账导入接口,您需要熟悉 Oracle EBS 的数据模型和 API。您可以使用 PL/SQL 编写存储过程,并使用 SQL 加载数据到 Oracle EBS 系统。您还可以使用第三方工具,如 Toad for Oracle,来帮助您管理数据。 如果您是第一次尝试实现此类接口,建议您从官方文档和教程开始学习。同时,您可以在技术论坛和在线社区中寻求帮助,并与其他开发人员分享经验。 希望这些信息能帮助您。如果您有任何其他问题,请随时告诉我。 ### 回答2: 为了帮您完成Oracle EBS的日记账导入接口程序,我们需要一些相关的信息和步骤。以下是一个简单的300字的回答: 首先,为了编写日记账导入接口程序,您需要了解要导入的数据源以及EBS的数据表结构。请检查数据源中的字段以及EBS的相关表,例如GL_IMPORT_REFERENCES和GL_JE_BATCHES。 然后,创建一个自定义的表,用于存储导入的数据。该表应该与EBS中的日记账表具有相似的字段。您可以使用PL/SQL编程语言来创建此表,并确保表的字段与数据源的字段对应。 接下来,在EBS中创建一个新的接口程序。在“系统管理员”职责下,找到“标准接口”功能,并创建一个新的接口。在接口属性中,指定入口程序名称和自定义表的名称,并选择适当的数据类型。 在程序代码中,使用SQL或PL/SQL编写数据导入逻辑。您可以使用INSERT语句将数据从自定义表插入到EBS的相关表中。确保数据的完整性和正确性,以避免导入错误。 编写完程序后,使用EBS的接口测试工具进行测试。该工具将检查数据的准确性和完整性,以确保导入过程不会导致任何问题。 最后,将程序部署到生产环境中。您可以使用EBS的并发管理器来调度程序的运行,以自动执行日记账导入任务。 总结起来,编写Oracle EBS的日记账导入接口程序需要了解数据源和EBS的表结构,创建自定义表,编写PL/SQL代码以完成数据导入逻辑,并使用EBS的接口测试工具和并发管理器进行测试和部署。这样,您就可以成功地实现日记账导入功能。 ### 回答3: 当导入Oracle EBS的日记账接口程序时,首先需要创建一个程序或脚本来解析输入数据文件。根据Oracle EBS的数据模型,我们可以确定需要导入的字段和表的关系。 接下来,我们需要使用适当的API或工具来导入数据。对于Oracle EBS而言,可以使用Oracle的数据导入程序或自定义的PL/SQL脚本来实现。如果采用数据导入程序,需要注意文件格式和分隔符的设置,以及字段与表之间的映射关系。 在导入过程中,为了确保数据的准确性和完整性,可以添加一些数据校验的步骤。例如,校验账户是否存在、金额是否合法等。对于不符合要求的数据,可以选择忽略或记录错误信息。 同时,为了保证导入的效率和性能,可以考虑使用并行处理等技术手段,以加快数据导入的速度。 最后,导入完成后,可以生成相应的导入日志,记录导入的结果和相关信息,以供日后参考。日志包括成功导入的记录数、失败的记录数以及错误信息等。这样可以方便后续的追踪和排查。 综上所述,编写Oracle EBS的日记账导入接口程序,需要对输入数据进行解析,使用合适的API或工具导入数据,添加数据校验步骤,考虑性能优化措施,并生成导入日志。通过以上步骤,可以实现一个高效、可靠的日记账导入接口程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值