由於我方料號編碼整個調整,所以直接複製舊料號的給新料號使用

mtl_system_items.attribute29  存的是舊料號ID ,讓新料號直接對串資料~

 

 

-- MTL_CROSS_REFERENCES_PUB SPEC 120.0.12010000.2  欄位長度定義有錯,TYPE XRef_Rec_Type 以下兩個欄位必須自己放大到255
--上patch p14138918_R12.ITM.C_R12_GENERIC 更新 MTL_CROSS_REFERENCES_PVT body 到 120.0.12010000.5
-- patch p14138918_R12 fixed 1OFF:12800632:INV.K:12.1.3:INVALID VALUE FOR UOM_CODE OR REVISION_ID
--  ,Cross_Reference_Type                   VARCHAR2(25)         DEFAULT      FND_API.G_MISS_CHAR
--  ,Cross_Reference                        VARCHAR2(25)         DEFAULT      FND_API.G_MISS_CHAR

DECLARE
   /* sql 1 , 抓要轉換的料號參照除了舊料號外的CROSS_REFERENCE */
   CURSOR cur
   IS
      SELECT   msi.INVENTORY_ITEM_ID,
               msi.segment1,
               msi.attribute28,
               msi.attribute29,
               crss.INVENTORY_ITEM_ID old_INVENTORY_ITEM_ID,
               crss.ORGANIZATION_ID,
               crss.CROSS_REFERENCE_TYPE,
               crss.CROSS_REFERENCE
        FROM   (SELECT   INVENTORY_ITEM_ID,
                         segment1,
                         attribute28,
                         attribute29
                  FROM   mtl_system_items
                 WHERE       ORGANIZATION_ID = 101
                         AND attribute30 = 'Y'
                         AND attribute29 IS NOT NULL) msi,
               mtl_cross_references crss
       WHERE   msi.attribute29 = crss.INVENTORY_ITEM_ID
               AND crss.CROSS_REFERENCE_TYPE <> '舊料號'
      UNION ALL
      /* sql 2 , 調整舊料號 CROSS_REFERENCE 為舊ERP 14碼料號*/
      SELECT   msi.INVENTORY_ITEM_ID,
               msi.segment1,
               msi.attribute28,
               msi.attribute29,
               msi_old.INVENTORY_ITEM_ID old_INVENTORY_ITEM_ID,
               NULL ORGANIZATION_ID,
               '舊料號' CROSS_REFERENCE_TYPE,
               msi_old.segment1 CROSS_REFERENCE
        FROM   (SELECT   INVENTORY_ITEM_ID,
                         segment1,
                         attribute28,
                         attribute29
                  FROM   mtl_system_items
                 WHERE       ORGANIZATION_ID = 101
                         AND attribute30 = 'Y'
                         AND attribute29 IS NOT NULL) msi,
               mtl_system_items msi_old
       WHERE   msi.attribute29 = msi_old.INVENTORY_ITEM_ID
               AND msi_old.ORGANIZATION_ID = 101;

   l_api_version      NUMBER := 1.0;
   l_init_msg_list    VARCHAR2 (2) := FND_API.G_TRUE;
   l_commit           VARCHAR2 (2) := FND_API.G_TRUE;
   l_user_id          NUMBER := 3314;
   l_resp_id          NUMBER := 50658;
   l_application_id   NUMBER := 401;
   l_XRef_tbl         MTL_CROSS_REFERENCES_PUB.XRef_Tbl_Type;
   x_message_list     Error_Handler.Error_Tbl_Type;
   x_return_status    VARCHAR2 (2);
   x_msg_count        NUMBER := 0;
   reccnt pls_integer :=0;
BEGIN
   APPS.FND_GLOBAL.APPS_INITIALIZE (l_user_id, l_resp_id, l_application_id);
 --  set serveroutput on buffer 2560000;
   FOR rec IN cur
   LOOP
      reccnt := reccnt +1 ;    
      l_XRef_tbl(reccnt).Transaction_Type := 'CREATE';
      l_XRef_tbl(reccnt).Cross_Reference_Type := rec.CROSS_REFERENCE_TYPE;
      l_XRef_tbl(reccnt).Cross_Reference := rec.CROSS_REFERENCE;
      l_XRef_tbl(reccnt).Inventory_Item_Id := rec.INVENTORY_ITEM_ID;
      l_XRef_tbl(reccnt).Organization_Id := rec.ORGANIZATION_ID;
      l_XRef_tbl (reccnt).org_independent_flag := 'Y';
      
   END LOOP;
        DBMS_OUTPUT.PUT_LINE('Total pop plsql table record number = ' || to_char(reccnt));
      MTL_CROSS_REFERENCES_PUB.Process_XRef (
         p_api_version     => l_api_version,
         p_init_msg_list   => l_init_msg_list,
         p_commit          => l_commit,
         p_XRef_Tbl        => l_XRef_tbl,
         x_return_status   => x_return_status,
         x_msg_count       => x_msg_count,
         x_message_list    => x_message_list
      );

      IF x_return_status = FND_API.g_RET_STS_ERROR
      THEN
         --DBMS_OUTPUT.PUT_LINE('Error Message Count :'||x_message_list.COUNT);
         FOR i IN 1 .. x_message_list.COUNT
         LOOP
            DBMS_OUTPUT.PUT_LINE(   TO_CHAR (i)
                                 || '. Err Rec No : '
                                 || x_message_list (i).entity_index
                                 || ' Table Name : '
                                 || x_message_list (i).table_name);
         END LOOP;
      END IF;


      DBMS_OUTPUT.PUT_LINE(x_return_status);

END;

arrow
arrow
    全站熱搜

    Nolem 發表在 痞客邦 留言(0) 人氣()