Oracle EBS中,标准功能允许ERP物料、客户物料存在1对多和多对1的情况。
可以在系统中这样处理(系统标准功能并没有,需要开发):
A、 1对多时,录入ERP物料,客户物料置为空,并警告必须手工选择客户物料;
B、 多对1时,录入客户物料,系统直接弹出要选择对应的ERP物料。
1对多或者多对1都比较难处理,建议Customer Item的用法是1对1。(需个性化限制1对多或多对1)
这样的话,在销售订单界面,输入客户物料,可以自动跳出ERP物料(修改LOV可以实现)。
建立客户物料
定义商业代码(使用客户物料商品代码来为客户物料分组)
路径:INV –> 设定 –> 料号 –> 客户料号商品代码
选择客户名称,输入客户料号,选择商品代码,点击“交叉引用”按钮。
输入对应的厂内料号和级别。
级别的作用:允许对客户物料使用替代或替代库存物料,则可以为单个客户物料定义多个库存物料交叉引用。在这种情况下,必须指定交叉引用的“级别”。
获取客户物料
–对于一个客户,一个厂内料号可能有多个客户料号,取最新建立的客户料号
select mci.customer_id,mci.customer_item_number,mcix.inventory_item_idfrom mtl_customer_items mci,mtl_customer_item_xrefs mcix,(SELECT a.customer_id,b.inventory_item_id,max(b.creation_date) l_dFROM mtl_customer_items a,mtl_customer_item_xrefs bWHERE b.customer_item_id = a.customer_item_idAND (b.inactive_flag = 'N' OR b.inactive_flag IS NULL)group by a.customer_id, b.inventory_item_id) latest_creation --客户某个厂内料号对应的最新建立的客户料号的建立时间
where mci.customer_item_id = mcix.customer_item_idand mci.customer_id = latest_creation.customer_idand mcix.inventory_item_id = latest_creation.inventory_item_idand mcix.creation_date = latest_creation.l_dand (mcix.inactive_flag = 'N' or mcix.inactive_flag is null) cust_item
或者多个客户料号拼接起来
FUNCTION get_customer_item(p_organzation_id IN NUMBER,p_customer_id IN NUMBER,p_item_id IN NUMBER) RETURN VARCHAR2 deterministic ASl_customer_item VARCHAR2(2000);
BEGINl_customer_item := NULL;FOR r IN (SELECT DISTINCT mci.customer_item_numberFROM mtl_customer_items mci,mtl_customer_item_xrefs mcix,mtl_parameters mpWHERE mcix.customer_item_id = mci.customer_item_idAND mci.inactive_flag = 'N'AND mcix.inactive_flag = 'N'AND mcix.master_organization_id = mp.master_organization_idAND mp.organization_id = p_organzation_idAND mci.customer_id = p_customer_idAND mcix.inventory_item_id = p_item_idORDER BY 1) LOOPl_customer_item := l_customer_item || '/' || r.customer_item_number;END LOOP;IF l_customer_item IS NULL THENRETURN NULL;END IF;RETURN substr(l_customer_item, 2);
END get_customer_item;
客户物料客制(To be continued)
创建销售订单时,料号栏位可以输入客户料号,自动弹出厂内料号