校驗 (validation) 是 SAP FI 模塊常用的憑證檢查技術,這個術語在國內也常被稱作確認,但確認似乎辨識度太低,不適合作爲術語來用。
本文詳細說明 validation 的調試方法。SAP 提供的 validation,本質上也是基於規則生成的程序,只不過將規則抽象爲 prerequisite、check 和 message 三個方面,提供了更加友好的界面而已。
假設我們需要這樣一個憑證的校驗規則:如果公司代碼爲 Z900 並且憑證類型爲 SA,則憑證的擡頭文本不能爲空。因爲是對憑證擡頭校驗,所以使用 1 作爲 calling point。
用 OB28 ( 或者 GGB0 ) 設置校驗規則如下:
因爲校驗需要提示消息,使用 SE91 維護消息號 ZSTONE-001: Document header cannot be blank!
調試方法 1
在左邊的導航區,定位到 validation (Z900-1),然後通過菜單 Extras -> Activate trace 激活跟蹤。
錄入一張會計憑證,故意將 Document header text 留空。
回車後觸發了 trace,進入如下界面:
在這個界面中,condition 就是我們設置的 prerequisite (前提)。條件爲 True,Check 爲 False (意思是檢查沒過),所以觸發了錯誤消息。但這種跟蹤還是比較粗略。
調試方法 2
鑑於上面的方法沒有看到細節,我們推薦第二種方法,直接查看 validation 生成的程序的源代碼,然後可以在代碼中設置斷點等方法來調試,關鍵是 validation 後 SAP 系統生成的程序名稱。對於 validation (也適用於替代 substituion), SAP 自動生成的程序名爲 GBTmmaa0
(GBT 和末尾的 0 是固定的,中間 mm 和 aa 是變化的)
- mm: 兩位數的 client 代碼,需要使用函數
G_CLIENT_ENCODE
獲取。比如我的系統 client 爲 001。通過 SE37 測試運行,得到兩位數的 client 爲 01.
- aa: 表示 application area,對於 FI 來說,就是 FI
由此我們知道,剛纔創建的 validation,系統生成的程序名爲:GBT01FI0
。通過代碼後面的註釋,我們知道 Validation 的代碼在 include GBT01FID
中,如下圖。
雙擊進入代碼,不難找到下面的代碼,對步驟 001 進行校驗的子程序。
G_STEP
對應 validation 中的 step, 校驗的代碼在子程序 VALCOND_1Z900_#001
中,感興趣的話,繼續查看代碼,還是比較直觀的:
剛纔的截圖我們已經設置了斷點。F-02 錄入憑證即可進入斷點來調試代碼了。
以上方法很管用,但稍嫌麻煩,因爲程序名稱不太好記住。其實, SAP 提供了一種快速定位代碼的方法。在 OB28 界面中,導航菜單中選擇 validation (Z900-1),在 command window 中輸入 =shcd
,回車後即可進入程序 GBT01FID
。
回車,系統直接進入程序,可以在這裏設置斷點。這種方法不需要記程序名稱。