二次上線之後臺底表更新料號(後果)

情形:1w多個料號導入系統,通過interface導入,但是整理時錯位,導致料號和描述對不上。

 

解決方法:後臺底表直接修改msib表的segment1欄位

 

後果:發現前臺標準界面無法修改此料號屬性,保存報錯,經查標準代碼發現

ENI_OLTP_ITEM_STAR這個table記錄了料號和組織代碼的組合值,插入和更新時

會同時記錄到此表中,修改時因爲此表的唯一索引導致不能修改

 

解決方法:

UPDATE ENI_OLTP_ITEM_STAR EOS
  SET EOS.VALUE = (SELECT MSIB.SEGMENT1 || ' (1ZM)' FROM MTL_SYSTEM_ITEMS_B MSIB WHERE MSIB.INVENTORY_ITEM_ID = EOS.INVENTORY_ITEM_ID
               AND MSIB.ORGANIZATION_ID = EOS.ORGANIZATION_ID
               AND MSIB.ORGANIZATION_ID = 118)
WHERE (EOS.INVENTORY_ITEM_ID,EOS.ORGANIZATION_ID)
IN (SELECT MSIB1.INVENTORY_ITEM_ID,MSIB1.ORGANIZATION_ID FROM MTL_SYSTEM_ITEMS_B MSIB1 WHERE MSIB1.ORGANIZATION_ID = 118)

直接修改標準表的值欄位和msib表相同,這樣就可以修改標準前臺界面的屬性了。

 

用如下代碼可以查看這兩個table中有哪些料號是不等的

SELECT MSIB.SEGMENT1,U.VALUE FROM MTL_SYSTEM_ITEMS_B MSIB,ENI_OLTP_ITEM_STAR U WHERE MSIB.ORGANIZATION_ID IN (112)
AND MSIB.ORGANIZATION_ID = U.ORGANIZATION_ID
AND MSIB.INVENTORY_ITEM_ID = U.INVENTORY_ITEM_ID
AND MSIB.SEGMENT1 <> SUBSTR(U.VALUE,1,14)
and msib.segment1 in ('N4DA-740553-00','Y5PK-740514-00')

 

雖然目前屬性可以改了,但是你會發現一個問題:

以前的主org1  這個料號inventory_item_id = 1

現在的主org2 相同的料號inventory_item_id = 2

因爲org2導入的時候,料號與org1的料號相同,後來底表直接修改segment1導致現在料號相同,inventory_item_id不同

目前好像是沒發現什麼問題,但是爲保險起見,我把料號全部刪除,重新導入

 

導入後發現,料號相同,主org不同,inventory_item_id也是相同的,這樣就確保沒有問題。

 

結論:不要用底表更改msib的segment1的值,要改也要前臺修改,profile:可更新物料名  =  Y

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章