2012年3月5日 星期一

[COST] PO 收料與入庫分錄金額不符

有一張 0 單價的 PO,收料交易的分錄,金額是 0,但入庫交易的分錄,金額卻不是 0
又開始不順了 ...,上個月來一次沒鳥他,這個月,竟然又來了 ...。

反覆檢查 PO_LINES_ALL, PO_LINE_LOCATIONS_ALL,只要跟 $$ 有關的欄位,都是 0。已經收過料的 PO Line,是不可能改單價的,收料時金額是 0,入庫時的金額,就應該是 0。

我查了幾天,然後,熊熊想到,阿 PO 模組不是有 Archive Table 嗎?(實際上,也可以從 PO Change History 功能去查)。被我這麼一瞧,好樣的,最後的 PO_LINE_LOCATIONS_ARCHIVE_ALL 的 PRICE_OVERRIDE 並不是 0 阿!!

我們的 PO 限制要從 BPA Reference Price 過來,所以正常來說,單價不會是 0,但某個特定的 PO Line Type 時,我們會有客製程式將單價改為 0,所以可能跟客製程式有關。

不過,從 Archive Table 來看,PO Rev. 0 的時候,Line的 Unit Price 與 Shipment 的 price_override 都是 0,但 PO Rev. 1 的時候,不知為何 PO_LINES_ARCHIVE_ALL 的 Unit Price 雖然是 0,但 PO_LINE_LOCATIONS_ARCHIVE_ALL 紀錄到的 price_override 卻不是 0,他是有 $$ 的。正常來說 Standard PO 的 price_override 應該都會跟 PO Line 的 Unit Price 相同才對(還是此 PO 有踩到過 Oracle 的 Unit Price <> Price Override 的 Bug 呢,Metalink ID# 1269492.1)。

更妙的是,Oracle 在切 Receiving 分錄時,看的是 Base Table,也就是 PO_LINE_LOCATIONS_ALL 的 price_override,但在切 Deliver 分錄時,卻是看 PO_LINE_LOCATIONS_ARCHIVE_ALL 的 price_override,於是導致收料與入庫分錄金額不同的怪現象(可參考 Metalink Doc# 985024.1)。

雖然或許客製程式也有問題,但 Oracle 也真的很妙,明明是成對的交易(RI 分錄才能沖掉),卻從不同的 Table 去抓取欄位值,起肖 .....


1 則留言:

Unknown 提到...

您好:

我也遇到這狀況,剛好搜尋到您的張貼。請問您是寫Trigger在PO_LINE_LOCATIONS_ARCHIVE_ALL 直接更新PRICE_OVERRIDE, FROM_HEADER_ID, FROM_LINE_ID嗎??