天天看点

二次上线之后台底表更新料号(后果)

情形: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