关于销售订单的状态
眾所周知,在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為何系統決定出來的狀態是處理中。
總結
- 上一篇: 获取Domain中Value Range
- 下一篇: FI功能增强业务说明书