2014年6月29日 星期日

[ASCP] Legacy Collection, PLANNING_PARTNER_SITE_CODE is invalid Error

  子公司希望透過 ASCP 進行 Planning,但是子公司 ERP 並非 Oracle,這時候 Data Collection 就必須用到 Legacy Collection。大致上沒什麼問題,就是 On Hand 一直無法順利匯入。

  Legacy Collection 分成三個階段:

    1. Flat File Loader: 這個階段是把文字檔資料,匯入 Interface Table(或稱 Staging table)。這個階段使用 Oracle Data Loader的方式匯入資料,做的基本只是針對個別單一檔案資料格式的檢核。熟悉 Data Loader 的朋友應該都清楚,錯誤的資料會寫到 bat file。

    2. Pre-Process Monitor: 前一個階段完成後,資料就已經寫到 Interface Table了。第二個階段,就會針對 Staging Table 的資料邏輯做檢核。舉例來說,如果匯入一個 SO Demand,但是料號卻不存在於 Item Master 中,在這個階段會被檢核出來,資料將不會繼續匯入。

    3. Planning ODS Load: 這是最後一個階段。通過前一個階段檢查正常的 Record,則會被寫入 Planning Table(或稱PDS, Planning Data Store)

-------------------------我不會塞分隔線--------------------------------------------

    各項資料匯入都還正常,就是 On Hand 一直無法匯入。在 Pre-Process Monitor 階段錯誤(Pre-Process Monitor 是 Complete Normal,但是 Log 中會記錄錯誤訊息,或者像我直接檢查 msc_st_supplies table,正常應該 No rows)。

    在  msc_st_supplies 的 Error Text 中,會出現錯誤訊息 :
The  value provided for PLANNING_PARTNER_SITE_CODE is invalid.  Please resubmit this record with a valid value for PLANNING_PARTNER_SITE_CODE.

    查這個問題真的花了我非常久的時間,資料怎麼看都沒有錯,就是無法匯入。
    最終,只能去看 Oracle 的 Source Code,幫 Oracle Debug 了。

    這個要檢查 Package MSC_CL_PRE_PROCESS,其中的 Proedure LOAD_SUPPLY,就是檢查供給資料的部分。

    On Hand 檢查 PLANNING_PARTNER_SITE_CODE 的程式有兩段(程式碼在最底下,想知道有多爛了,就看到最後面),前兩段檢查不到PLANNING_PARTNER_SITE_ID,就會被第三段標示為 Error。

    看完程式碼才發現,Oracle 只處理 VMI 的 On Hand,根本沒有處理廠內的 On Hand,真是氣死人 .....。我問了顧問,顧問比對過 12.1 ASCP 的程式(我們是 12.0),認為這是 12.0 的 Bug。只有兩條路,改以 VMI 匯入,或者改 Oracle 的程式,最後,我選了前者,當作是 VMI On Hand 匯入。

    要當作 VMI 匯入,除了 VMI Flag 放 Y 之外,Planning Partner Site Code,Planning TP Type,Owning Partner Site Code,Owning TP Type 等四個欄位也要搭配修改(原本場內 On Hand 應該放 Null),同時,匯入 Suppliers 時,記得放一個虛擬供應商,來跟 VMI On Hand 做搭配。


    UPDATE  MSC_ST_SUPPLIES
     SET PLANNING_PARTNER_SITE_ID = 
                (SELECT local_id
                   FROM msc_local_id_setup
                  WHERE  char1 = sr_instance_code
                    AND    NVL(char2,NULL_CHAR) = NVL(company_name,NULL_CHAR)
                    AND    char4            = PLANNING_PARTNER_SITE_CODE
                    AND    number1          = G_VENDOR
                    AND    entity_name      = 'SR_TP_SITE_ID' )
    WHERE  sr_instance_code = v_instance_code
     AND    NVL(PLANNING_PARTNER_SITE_ID,NULL_VALUE) = NULL_VALUE
    AND    NVL(batch_id,NULL_VALUE)= p_batch_id
    AND    process_flag     = G_IN_PROCESS
    AND    PLANNING_TP_TYPE = 1
    AND    VMI_FLAG    = 'Y'
    AND    order_type=18;    --6773933



    UPDATE  MSC_ST_SUPPLIES
     SET PLANNING_PARTNER_SITE_ID = 
           (SELECT local_id
              FROM msc_local_id_setup
             WHERE  char1 = sr_instance_code
               AND    char3            = PLANNING_PARTNER_SITE_CODE
               AND    number1          = G_ORGANIZATION
               AND    entity_name      = 'SR_TP_ID' )
    WHERE  sr_instance_code = v_instance_code
     AND    NVL(PLANNING_PARTNER_SITE_ID,NULL_VALUE) = NULL_VALUE
    AND    NVL(batch_id,NULL_VALUE)= p_batch_id
    AND    process_flag     = G_IN_PROCESS
    AND    PLANNING_TP_TYPE = 2
    AND    VMI_FLAG    = 'Y'
    AND    order_type=18;    --6773933

    UPDATE  MSC_ST_SUPPLIES mss1
    SET     process_flag = G_ERROR_FLG,
            error_text   = lv_message_text
    WHERE   mss1.process_flag             = G_IN_PROCESS
    AND     mss1.sr_instance_code            = v_instance_code
    AND     NVL(mss1.planning_partner_site_id,NULL_VALUE) = NULL_VALUE
    AND     order_type=18;  

沒有留言: