如何调试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

回车,系统直接进入程序,可以在这里设置断点。这种方法不需要记程序名称。

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