如何調試SAP的校驗(validation)

校驗 (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

回車,系統直接進入程序,可以在這裏設置斷點。這種方法不需要記程序名稱。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章