1. 程式人生 > >如果沒有了SAP我們還會什麼?

如果沒有了SAP我們還會什麼?

眾所周知,在SD的流程中,很多處理是跟訂單的狀態息息相關的,比如參照一張銷售訂單來做發貨單的時候,系統需要檢查銷售訂單裡面的交貨狀態是否是A(沒有處理)或者B(部分處理),如果是空白(不相關)或者已經是C(完全處理)了,那麼系統會報錯來通知使用者這張銷售訂單的明細已經不能用來做發貨了。那麼在這篇日誌中,我們就主要討論一下狀態管理中的常見問題。

如果覺得一張銷售訂單的狀態不正確,如何來證實呢?
在標準系統裡有一個報表叫做SDVBUK00,這個報表是用來修正銷售訂單的錯誤資訊的,在它的執行介面上有一個專案叫“測試執行未更新”,如果選擇上這個專案,就只會顯示重新計算的狀態,而不會修正。也就是說,我們可以用這個報表來驗證我們的猜想,如果執行結果跟我們的判斷一致,那就可以把專案“測試執行未更新”留空,正式執行這個報表來修正銷售訂單的狀態。還有一個方法可以重新觸發狀態的再次計算,就是VA02修改一個訂單的時候,選擇專案,轉到-〉專案-〉狀態,然後儲存這張訂單。

需要注意的是SDVBUK00是用來修正某一個特定的有錯誤的銷售訂單的,這個報表不應該被作為每天執行的報表。
Note 67742是關於SDVBUK00的說明文件,如果是出具發票計劃相關的訂單請看Note88633,如果是表頭狀態相關的問題,請看一下Note84272,如果是不完全狀態,請參照Note 88511.

那麼如果SDVBUK00顯示這張訂單的狀態沒有問題,那麼就證明當前的狀態是正確的,就要進一步分析為何系統會計算出這樣的狀態。
Debug是分析狀態決定的最好的方式,下面是相關的表和程式:


VBUP 專案狀態
VBUK 表頭狀態

Function module:
RV_XVBUP_MAINTAIN 決定專案狀態
RV_XVBUK_MAINTAIN 決定表頭狀態

我們更關注RV_XVBUP_MAINTAIN,因為表頭的狀態都是各個專案狀態的彙總。
那麼每一個狀態都有決定它的subroutine,命名規則是

VBUP-XXXXX_ERMITTELN 是決定專案狀態XXXXX的subroutine
VBUK-XXXXX_ERMITTELN 是決定表頭狀態XXXXX的subroutine

此篇日誌我們來說一下使用者常見的一些狀態相關的問題以及分析方法。

問題一,為什麼一張銷售訂單專案已經全數發貨,但是發貨狀態(VBUP-LFSTA)還是未處理?

回答:請開啟銷售訂單,轉到->專案->裝運->
檢查”部分交貨/專案”是否被設定成了”D”. 如果是的話,那麼這個現象就是正常的。
除非設定“拒絕原因”,不然這個專案永遠都不會變成“已完成”。

如果此專案沒有被設定成D,請參照上一篇日誌,執行報表SDVBUK00.

問題二,我在T-code VOV7中更改了專案類別的”出具發票相關”的值,但是舊的銷售憑證還是保留了原來的值,怎麼辦?

回答:在建立訂單的時候,VOV7中的值會被拷貝到VBAP-FKREL當中並且儲存在資料庫表上。也就是說客戶化的改動是不會影響已經建立的訂單的。
如果先跟更新舊訂單當中的值,請參照Note 127514來建立並執行報表ZZFKREL0。
請在執行此報表之後執行SDVBUK00以確保訂單中的狀態得到更新。

問題三,當給訂單專案設定拒絕原因以後,我發現不同的訂單的整體狀態和專案狀態有所不同,我希望知道標準系統正常的現象是怎樣的?

回答:“出具發票相關”的值會影響設定拒絕原因以後專案以及訂單的狀態。拒絕原因的定義(T-code OVAG)中”BLC”的設定也會影響最終結果。
具體請參照Note 203182  和 210885。

問題四,我係統裡存在一些銷售訂單,明明後續的交貨和開票都進行完了,整個訂單的狀態還是處理中,為什麼?

回答:最有可能的原因就是使用者錯誤的給訂單中的專案類別設定了“完成規則”。請檢查T-code VOV7。
“完成規則”只是為契約型別的訂單,例如報價單,數量合同之類的訂單型別設計的,請把銷售訂單中用到的專案型別的“完成規則”設定成空,這樣新建的銷售訂單就不會有問題了。對於舊訂單,請參照Note 323048進行修正。

如果在您的系統中並沒有設定“完成規則”,那麼請您參照上一篇日誌來執行報表SDVBUK00. 或者進入T-code VA02,來debug為何系統決定出來的狀態是處理中。