--尋找兩年內沒有異動料號 SELECT COUNT(*) FROM YOLIN_TEMP WHERE RPT_ID = 'ITEM_CHECK' --清空資料 DELETE YOLIN_TEMP WHERE RPT_ID = 'ITEM_CHECK' --整理久未異動料號 DECLARE CURSOR CHECK_ITEM IS SELECT MSI.INVENTORY_ITEM_ID FROM MTL_SYSTEM_ITEMS_B MSI WHERE 1 = 1 AND MSI.ORGANIZATION_ID = 137 AND MSI.INVENTORY_ITEM_STATUS_CODE <> 'Inactive' --AND MSI.INVENTORY_ITEM_ID = 9161201 AND TRUNC(MSI.CREATION_DATE) <= TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE, -12)) + 1) --排除近一年建立 AND MSI.INVENTORY_ITEM_ID NOT IN (SELECT MS.ITEM_ID FROM MTL_SUPPLY MS) --排除有供需料號 AND MSI.INVENTORY_ITEM_ID NOT IN (SELECT DISTINCT ITEM_ID FROM (SELECT BOM.ASSEMBLY_ITEM_ID ITEM_ID FROM BOM_BILL_OF_MATERIALS BOM UNION ALL SELECT BIC.COMPONENT_ITEM_ID ITEM_ID FROM BOM_INVENTORY_COMPONENTS BIC)); --排除BOM 料號 P_MMT_COUNT NUMBER; P_MONTH NUMBER := -36; --三年MMT沒有紀錄 BEGIN FOR C1 IN CHECK_ITEM LOOP SELECT COUNT(*) INTO P_MMT_COUNT FROM MTL_MATERIAL_TRANSACTIONS MMT WHERE 1 = 1 AND MMT.INVENTORY_ITEM_ID = C1.INVENTORY_ITEM_ID AND MMT.ORGANIZATION_ID = 137 AND TRUNC(MMT.TRANSACTION_DATE) BETWEEN TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE, P_MONTH)) + 1) AND TRUNC(SYSDATE); IF P_MMT_COUNT = 0 THEN INSERT INTO YOLIN_TEMP (RPT_ID, LINE_NO) VALUES ('ITEM_CHECK', C1.INVENTORY_ITEM_ID); END IF; END LOOP; END; --資料備份 CREATE TABLE MTL_SYSTEM_ITEMS_B_230915 AS SELECT * FROM MTL_SYSTEM_ITEMS_B MSI --大量失效料號 DECLARE L_ITEM_TABLE EGO_ITEM_PUB.ITEM_TBL_TYPE; X_ITEM_TABLE EGO_ITEM_PUB.ITEM_TBL_TYPE; X_MESSAGE_LIST ERROR_HANDLER.ERROR_TBL_TYPE; X_RETURN_STATUS VARCHAR2(300); X_MSG_COUNT NUMBER; X_MSG_DATA VARCHAR2(4000); P_COUNTER NUMBER := 0; --紀錄失效筆數 CURSOR ITEMS IS --排除委外加工料號、BOM 料號 SELECT MSI.ORGANIZATION_ID, MSI.INVENTORY_ITEM_ID, MSI.SEGMENT1, FLV.MEANING ITEM_TYPE, MSI.DESCRIPTION, MSIV.LONG_DESCRIPTION, MSI.INVENTORY_ITEM_STATUS_CODE, QTY.ON_HAND_QTY, INVMC.SEGMENT1 || '.' || INVMC.SEGMENT2 || '.' || INVMC.SEGMENT3 || '.' || INVMC.SEGMENT4 || '.' || INVMC.SEGMENT5 || '.' || INVMC.SEGMENT6 INV_CATEGORY, (SELECT FLV.TAG FROM FND_LOOKUP_TYPES_TL FLTT, FND_LOOKUP_TYPES FLT, FND_LOOKUP_VALUES FLV WHERE FLT.LOOKUP_TYPE = FLTT.LOOKUP_TYPE AND FLT.SECURITY_GROUP_ID = FLTT.SECURITY_GROUP_ID AND FLT.VIEW_APPLICATION_ID = FLTT.VIEW_APPLICATION_ID AND FLTT.LOOKUP_TYPE = FLV.LOOKUP_TYPE AND FLTT.DESCRIPTION = '產品處與產品對應表' AND FLV.LANGUAGE = 'ZHT' AND FLTT.LANGUAGE = 'ZHT' AND FLV.LOOKUP_CODE = INVMC.SEGMENT1 || '.' || INVMC.SEGMENT2 || '.' || INVMC.SEGMENT3 || '.' || INVMC.SEGMENT4 || '.' || INVMC.SEGMENT5 || '.' || INVMC.SEGMENT6 ) PM FROM YOLIN_TEMP Y, MTL_ITEM_CATEGORIES INVMIC, MTL_CATEGORIES_V INVMC, MTL_SYSTEM_ITEMS_B MSI, MTL_SYSTEM_ITEMS_FVL MSIV, FND_LOOKUP_VALUES FLV, (SELECT MMT.ORGANIZATION_ID, MMT.INVENTORY_ITEM_ID, SUM(MMT.PRIMARY_QUANTITY) ON_HAND_QTY FROM MTL_MATERIAL_TRANSACTIONS MMT, MTL_SYSTEM_ITEMS_B MSI, MTL_SECONDARY_INVENTORIES SUBINV WHERE 1 = 1 AND MMT.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID AND MMT.ORGANIZATION_ID = MSI.ORGANIZATION_ID AND MMT.SUBINVENTORY_CODE = SUBINV.SECONDARY_INVENTORY_NAME AND MMT.ORGANIZATION_ID = SUBINV.ORGANIZATION_ID --AND MSI.SEGMENT1 = 'MM-24K' --AND MSI.INVENTORY_ITEM_ID = 13040420 AND MMT.ORGANIZATION_ID = 137 AND TRUNC(MMT.TRANSACTION_DATE) <= TRUNC(SYSDATE --庫存計算截止時間 --AND MMT.TRANSACTION_TYPE_ID NOT IN (10008, 26, 52, 80) 錯誤觀念也要計算 AND SUBINV.ASSET_INVENTORY <> 2 --排除費用倉 GROUP BY MMT.ORGANIZATION_ID, MMT.INVENTORY_ITEM_ID --HAVING SUM(MMT.PRIMARY_QUANTITY) <> 0 ) QTY WHERE 1 = 1 AND Y.RPT_ID = 'ITEM_CHECK' AND MSI.ORGANIZATION_ID = 137 AND MSI.ORGANIZATION_ID = MSIV.ORGANIZATION_ID AND MSI.INVENTORY_ITEM_ID = MSIV.INVENTORY_ITEM_ID AND Y.LINE_NO = MSI.INVENTORY_ITEM_ID AND FLV.LOOKUP_TYPE = 'ITEM_TYPE' AND NVL(MSI.ITEM_TYPE,'CLASS') = FLV.LOOKUP_CODE(+) AND FLV.LANGUAGE = 'ZHT' AND MSI.ORGANIZATION_ID = QTY.ORGANIZATION_ID(+) AND MSI.INVENTORY_ITEM_ID = QTY.INVENTORY_ITEM_ID(+) AND MSI.INVENTORY_ITEM_ID = INVMIC.INVENTORY_ITEM_ID AND MSI.ORGANIZATION_ID = INVMIC.ORGANIZATION_ID AND INVMIC.CATEGORY_ID = INVMC.CATEGORY_ID AND INVMIC.CATEGORY_SET_ID = 1 AND FLV.MEANING <> '委外加工料號' --排除委外加工料號 --AND INVMC.SEGMENT1 = '50' BEGIN FND_GLOBAL.APPS_INITIALIZE(USER_ID => 0, RESP_ID => 50532, RESP_APPL_ID => 401); FOR C1 IN ITEMS LOOP P_COUNTER := P_COUNTER + 1; L_ITEM_TABLE(P_COUNTER).TRANSACTION_TYPE := 'UPDATE'; L_ITEM_TABLE(P_COUNTER).INVENTORY_ITEM_ID := C1.INVENTORY_ITEM_ID; L_ITEM_TABLE(P_COUNTER).ORGANIZATION_ID := C1.ORGANIZATION_ID; L_ITEM_TABLE(P_COUNTER).INVENTORY_ITEM_STATUS_CODE := 'Inactive'; EGO_ITEM_PUB.PROCESS_ITEMS(P_API_VERSION => 1.0, P_INIT_MSG_LIST => FND_API.G_TRUE, P_COMMIT => FND_API.G_TRUE, P_ITEM_TBL => L_ITEM_TABLE, X_ITEM_TBL => X_ITEM_TABLE, X_RETURN_STATUS => X_RETURN_STATUS, X_MSG_COUNT => X_MSG_COUNT); DBMS_OUTPUT.PUT_LINE(X_ITEM_TABLE.COUNT); IF (X_RETURN_STATUS = FND_API.G_RET_STS_SUCCESS) THEN DBMS_OUTPUT.PUT_LINE('ORG_ID :' || C1.ORGANIZATION_ID ||',ITEM_ID :' || C1.INVENTORY_ITEM_ID); ELSE DBMS_OUTPUT.PUT_LINE('ERROR-' || 'ORG_ID :' || C1.ORGANIZATION_ID || ',ITEM_ID :' || C1.INVENTORY_ITEM_ID); ERROR_HANDLER.GET_MESSAGE_LIST(X_MESSAGE_LIST => X_MESSAGE_LIST); FOR I IN 1 .. X_MESSAGE_LIST.COUNT LOOP DBMS_OUTPUT.PUT_LINE(X_MESSAGE_LIST(I).MESSAGE_TEXT); END LOOP; END IF; END LOOP; COMMIT; END; --比對目前失效狀況 SELECT A.ORGANIZATION_ID, A.INVENTORY_ITEM_ID, A.SEGMENT1, A.INVENTORY_ITEM_STATUS_CODE, B.INVENTORY_ITEM_STATUS_CODE FROM MTL_SYSTEM_ITEMS_B_230915 A , MTL_SYSTEM_ITEMS_B B WHERE 1=1 AND A.INVENTORY_ITEM_ID = B.INVENTORY_ITEM_ID AND A.ORGANIZATION_ID = B.ORGANIZATION_ID AND B.ORGANIZATION_ID = 137 AND A.INVENTORY_ITEM_STATUS_CODE <> B.INVENTORY_ITEM_STATUS_CODE
2023-06-26
[Oracle]How to Mass Inactive Inventory item
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言