因為這個Costing問題導致我們三天無法關Inventory Period.

在此紀錄與分享之

Issue Description (故事的起源)

事情就是發生在2019/07/31,月底的那天我們的HK finance發現他們有好幾筆uncost material 沒有cost,不太正常。

於是我家的人,到系統查了一下為什麼會沒有cost,才發現。。。原來China有一個org有8201筆資料沒有cost.

image

 

Diagnostics History (診斷紀錄)

於是我們作了以下的檢查動作。

1) 確認cost manager有沒有正常啟動 --是正常的

2) 有多少org 有uncosted的資料,筆數多少?

image

 What Actions IT tried ( IT 做了什麼努力? )

1. System admin幫忙重啟”Cost Manager”,沒用

2. DBA 重啟ERP server,沒用

Tracking History

  • Actual Cost Worker concurrent 執行狀況

image

  • 問題的資料

          Delivery # 8620222 可以看出有三種資料狀況

image

1. 已經costed,而且costed_flag 為空 -- 正常資料

2. 有actual cost但costed_flag=N

3. 沒有actual cost而costed_flag=N

We don’t see error_code or ERROR_EXPLANATION exists.

經過兩天兩夜的努力,我們了解與發現了什麼?

         原來,根本的問題是,我們在SDC 這個org啟用的Logical transaciton,但我們早期有顧問也寫了一個non standard logical transaction的程序。

         我們發現,在標準的logical transaction還沒cost時,non standard logical transaction的程序去產生了 another MFG orgs的logical transaction並且做了部分的cost.

         然後導致一個結果,我們的Actual Cost Worker 持續停留在異常資料的那筆資料,導致後續的資料都無法往下cost (參下圖).

ps. SDC is average cost organization.

正常的情況是什麼?

正常來說,我們應該是要讓標準的cost都做完,才能產生我們自己客製產生的logical transaction 到MFG site,我的判定是,Oracle不認識那些MFG的logical transaction於是,他很聰明的,不cost了。然而,因為我們SDC的cost method 是平均成本,在oracle 平均成本的計算是透過Actual Cost Worker,這個concurrent很特別,他會記錄最後一筆Uncosted TXN資料的transction_date`,所以你可以從上圖看到argument4 一直停留在08:24:35  這個時間點上了

終於在8/2,我們做了正確的判定與了解,那我們怎麼解決這個問題呢?

Resolution 解決方案


1. Stop Cost Manager and Customized Logical Transaction Schedule Job
2. Backup the all SDC problem data

SELECT *
  FROM MTL_MATERIAL_TRANSACTIONS
WHERE ORGANIZATION_ID = 407
   AND COSTED_FLAG = 'N'
   AND TRANSACTION_DATE >= TO_DATE ('20190731 08:24:35', 'yyyymmdd hh24:mi:ss');

3. Backup the logical transaction of MFG inventory organizations with ‘N’ uncosted_flag
4. Backup the MFG distributions data of logical transaction
5. Deleting these logical transactions of MFG inventory organizations with ‘N’ uncosted_flag
6. Deleting the MFG distributions data of logical transactions
7. UpdatingSDC all uncosted txn’s LOGICAL_TRANSACTIONS_CREATED from 2 to 1.

UPDATE MTL_MATERIAL_TRANSACTIONS
    SET LOGICAL_TRANSACTIONS_CREATED = 1
  WHERE ORGANIZATION_ID = 407
    AND COSTED_FLAG = 'N'
    AND TRUNC (TRANSACTION_DATE) = '31-JUL-2019'
    and LOGICAL_TRANSACTIONS_CREATED = 2;

8. Start Cost Manager
9. Confirm all uncosted transactions are costed.
10. Recover all deleted data back to MFG inventory organizaiton
分享Script
 
-- Query Cost Manager & Acutal Cost Worker 的執行狀況
---------------------------------------------------------------------------------00 
  SELECT REQUEST_ID REQUESTID,
         FCR.ACTUAL_START_DATE,
         FCP.CONCURRENT_PROGRAM_NAME PROGRAM_CODE,
         FCP.USER_CONCURRENT_PROGRAM_NAME CONCURRENT,
         FCP.CONCURRENT_PROGRAM_ID,
         FCR.ARGUMENT1,
         FCR.ARGUMENT2,
         FCR.ARGUMENT3,
         FCR.ARGUMENT4,
         FCR.REQUEST_DATE,
         PHASE_CODE PHASE,
         STATUS_CODE STATUS
    FROM FND_CONCURRENT_REQUESTS FCR, FND_CONCURRENT_PROGRAMS_VL FCP
   WHERE FCP.APPLICATION_ID = 702
     AND FCP.CONCURRENT_PROGRAM_NAME IN ('CMCTCM', 'CMCACW')
     AND FCR.CONCURRENT_PROGRAM_ID = FCP.CONCURRENT_PROGRAM_ID
     AND FCR.PROGRAM_APPLICATION_ID = 702
ORDER BY FCR.ACTUAL_START_DATE DESC;

如果,有天,你也發生這樣的狀況,我希望,這篇文章對你有幫助~!!

arrow
arrow
    文章標籤
    Uncosted
    全站熱搜

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