首页 > 数据库 > Oracle > Auto Generate Item Number
自动生成物料编码的客户化代码,觉得代码写的挺好的,留着备用吧
source:https://forums.oracle.com/thread/411343
代码需加入到CUSTOM.pll
------------------------------------------------------------------------------------------------------------------------------------
/*********************************************************************/
/* Begin Master Item Form */
/* 1. Make sure the Item Field on the Master Item Form */
/* is NOT editable by the END USER */
/* 2. Set the Item Field to be the next Item Number */
/* in a 7 digit sequence. */
/* HELPFUL INFO: */
/* MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR */
/* - Item Field on the main Master Item Form */
/* MTL_SYSTEM_ITEMS.INVENTORY_ITEM */
/* - Item Field on the folder tab of the Master Item Form */
BEGIN
-- Item Master Form
IF FORM_NAME = \'INVIDITM\' THEN
-- MTL_SYSTEM_ITEMS Block
IF BLOCK_NAME = \'MTL_SYSTEM_ITEMS\' THEN
-- WHEN-NEW-ITEM-INSTANCE Event
IF EVENT_NAME = \'WHEN-NEW-ITEM-INSTANCE\' THEN
-- We don\'t want to mess with the Item if we\'re in a Query Mode
IF NAME_IN(\'SYSTEM.MODE\') != \'ENTER-QUERY\' THEN
-- The value of the INVENTORY_ITEM_MIR will be blank when we\'re creating a new Item Master Record
-- and therefore that is when we want to DISABLE that item. If it\'s filled in, then we\'re
-- dealing with an existing Item Master Record, in which case we still want the END USER to be able to
-- highlight or select the item number that was generated by the system.
IF NAME_IN(\'SYSTEM.CURRENT_ITEM\') = \'INVENTORY_ITEM_MIR\' AND
NAME_IN(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR\') IS NULL THEN
NEXT_ITEM; -- Move to the next item so the SYSTEM.CURRENT_ITEM isn\'t the Item Field Anymore(t
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR\',
REQUIRED,
PROPERTY_FALSE);
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR\',
INSERT_ALLOWED,
PROPERTY_FALSE);
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR\',
UPDATEABLE,
PROPERTY_FALSE);
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM\',
REQUIRED,
PROPERTY_FALSE);
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM\',
INSERT_ALLOWED,
PROPERTY_FALSE);
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM\',
UPDATEABLE,
PROPERTY_FALSE);
ELSIF NAME_IN(\'SYSTEM.CURRENT_ITEM\') = \'INVENTORY_ITEM\' AND
NAME_IN(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM\') IS NULL THEN
NEXT_ITEM; -- Move to the next item so the SYSTEM.CURRENT_ITEM isn\'t the Item Field Anymore(t
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR\',
REQUIRED,
PROPERTY_FALSE);
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR\',
INSERT_ALLOWED,
PROPERTY_FALSE);
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR\',
UPDATEABLE,
PROPERTY_FALSE);
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM\',
REQUIRED,
PROPERTY_FALSE);
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM\',
INSERT_ALLOWED,
PROPERTY_FALSE);
SET_ITEM_PROPERTY(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM\',
UPDATEABLE,
PROPERTY_FALSE);
END IF; -- NAME_IN - INVENTORY_ITEM_MIR - INVENTORY_ITEM
END IF; -- SYSTEM.MODE
END IF; -- WHEN-NEW-ITEM-INSTANCE
-- WHEN-VALIDATE-RECORD Event
IF EVENT_NAME = \'WHEN-VALIDATE-RECORD\' THEN
IF NAME_IN(\'MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR\') IS NULL THEN
DECLARE
NEXTITEMNUMBER VARCHAR2(10);
BEGIN
--FND_MESSAGE.SET_STRING(\'Setting the value of INVENTORY_ITEM to the next Item_Number\');
--FND_MESSAGE.SHOW;
-- Call our custom plsql to get the next item number from a sequence
NEXTITEMNUMBER := XXSSI.XXSSI_ITEM_MAST_NUM_GEN.GET_NEXT_ITEM_NUMBER;
COPY(NEXTITEMNUMBER, \'MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR\');
COPY(NEXTITEMNUMBER, \'MTL_SYSTEM_ITEMS.SEGMENT1\');
END;
END IF; -- NAME_IN - INVENTORY_ITEM_MIR
END IF; -- WHEN-VALIDATE-RECORD
END IF; -- BLOCK \'MTL_SYSTEM_ITEMS\'
END IF; -- FORM \'Master Item\'
END;
/* End Master Item Form */
/*********************************************************************/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26687597/viewspace-1207561/ ,如需转载,请注明出处,否则将追究法律责任。