EBS版本:11i


今天做了一外围接口,需要用到替代接收,以前没做过,现研究了下。


1、设置物料可替代接收属性

职责:库存超级用户

菜单:物料-》主组织物料-》接收-》允许替代接收:“是”

此处对应 mtl_system_items_b.allow_substitute_receipts_flag 字段,存储为'Y'/'N',默认空为不允许替代接收。

234942421.jpg


2、复制一个物料用于测试:

新建一个物料301000010000010,输入物料描述后,工具菜单-》复制自。输入要复制的物料编码,即30100001000001,完成即可。 然后将此物料分配给某个组织。

235452218.jpg


3、维护一个替代接收关系:

菜单:物料-》产品关系

在弹出的快捷窗口中选择“新建”,起始物料输入源物料,终止物料输入新建的物料,类型选择“替代”,保存。

000533870.jpg


4、创建采购订单并审批:

职责:采购超级用户

菜单:采购订单-》采购订单

采购物料录入源物料30100001000001,数量100。

在发运-》接收控制中,选择“允许替代接收”并选择接收方式为“直接交货”。

发运组织选择给新物料分配的那个组织。

依次填写发运、分配信息,保存并审批。

订单编号:810007928

001926727.jpg


5、接收:

职责:采购超级用户

菜单:接收-》接收

选择发运填写的组织,输入订单编号:810007928并查找,弹出窗口中选新建接收,关闭此小窗口。

在行标签页可以看到默认显示物料是订单物料,可以在此字段上选择,即可看到刚维护的替代接收的物料。

该行信息录入完毕后,勾选此行前的复选框,保存即可。

003433900.jpg


6、查询接收事务处理:

稍等几十秒,等待接收事务处理完成后即可查询是否替代接收成功。

职责:采购超级用户

菜单:接收-》接收事务处理汇总

查询界面输入采购订单编号:810007928, 亦可在物料栏位输入替代接收的物料编码,查找。

选择查出的记录,点击事务处理按钮。

可以看到接收物料是新建的替代接收物料,成功了!

004823970.jpg



相关SQL:

1、物料是否允许替代接收:

SELECT Nvl(Msi.Allow_Substitute_Receipts_Flag, 'N')
  FROM Mtl_System_Items_b Msi
 WHERE Msi.Inventory_Item_Id = Pi_Item_Id
   AND Msi.Organization_Id = Pi_Organization_Id
   AND Inventory_Item_Status_Code IN ('有效', 'Active')
   AND Nvl(Enabled_Flag, 'N') = 'Y'
   AND Nvl(Start_Date_Active, Trunc(Pi_Transaction_Date)) <=
       Trunc(Pi_Transaction_Date)
   AND Nvl(End_Date_Active, Trunc(Pi_Transaction_Date) + 1) >
       Trunc(Pi_Transaction_Date);


2、订单发运行是否允许替代接收

SELECT Nvl(Plla.Allow_Substitute_Receipts_Flag, 'N')
  FROM Po_Headers_All        Pha,
       Po_Lines_All          Pla,
       Po_Distributions_All  Pda,
       Po_Line_Locations_All Plla
 WHERE 1 = 1
   AND Pda.Po_Distribution_Id = Pi_Distribution_Id
   AND Pda.Line_Location_Id = Plla.Line_Location_Id
   AND Pda.Po_Header_Id = Pha.Po_Header_Id
   AND Pla.Po_Header_Id = Pha.Po_Header_Id
   AND Pla.Po_Line_Id = Pda.Po_Line_Id
   AND Pha.Po_Header_Id = Pi_Header_Id
   AND Nvl(Plla.Cancel_Flag, 'N') <> 'Y'
   AND Nvl(Plla.Closed_Code, 'OPEN') NOT IN
       ('CLOSED', 'CLOSED FOR RECEIVING', 'FINALLY CLOSED')
   AND Nvl(Plla.Approved_Flag, 'N') = 'Y';


3、供应商是否允许替代接收

SELECT Nvl(Pv.Allow_Substitute_Receipts_Flag, 'N')
  FROM Po_Vendors Pv
 WHERE Vendor_Id = Vn_Vendor_Id;


4、是否存在产品关系

SELECT COUNT(1)
  FROM Mtl_Related_Items_All_v Mri
 WHERE 1 = 1
   AND Mri.Inventory_Item_Id = Vn_Item_Id
   AND Mri.Related_Item_Id = Vn_Substitute_Item_Id
   AND Mri.Relationship_Type_Id = 2
   AND Mri.Reciprocal_Flag = 'Y'
   AND SYSDATE BETWEEN Nvl(Mri.Start_Date, SYSDATE) AND
       Nvl(Mri.End_Date, SYSDATE);



接口程序:

相比普通物料的采购接收,在插入RTI(RCV_TRANSACTION_INTERFACE)时,替代接收需注意以下字段。

1、Inspection_Status_Code

   替代接收:'NOT INSPECTED'

   普通接收:null。

2、Substitute_Unordered_Code

   替代接收:'SUBSTITUTE'

   普通接收:null

3、Substitute_Item_Id

   替代接收:替代接收物料ID

   普通接收:null


另,退货时,RTI中所填写的item_id为接收物料的ID,并非订单物料ID。


附:接口程序样例及测试脚本。