导读
INTRODUCTION
OPT函数:SAP HCM工资核算是很多函数的汇总集,原有有兴趣问过SAP的人为什么SCHEMA需要这样设计,SAP的人说是用汇编的逻辑设计的,当时是尽可能用机器语言加速速度读取,每个函数都有对应的业务逻辑代码,但是有几个函数中的源代码只有几行,看不出对应的业务逻辑,正好遇到一个朋友说P2010函数无法读取到数据,发现是函数OPT 中TIME被注释,,今天分析下OPT函数后面的参数是如何赋值。
-
OPT函数代码
opt函数是dummy,但是看源代码的时候没有任何有含义的业务代码,感觉OPT函数并没有赋值的语句,所以无法找到TIME、NRC、INFT、ENQ、DEC参数对应的具体逻辑。
2 使用debug技术找到P2010是在什么位置赋值,发现rp_read_all_time_ity pn-begda pn-endda的宏可以把数据写入到对应的信息类型中。此处有个特别重要的点就是moden N的含义,如果在前面P2010 MODEN N的地方,默认是不会加载(可以参考我另外一篇文章《SAP HCM 逻辑数据 动态加载INFOTYPES》),只有执行rp_read_all_time_ity宏的时候才会填充到内表
3 OPT的TIME参数与这个如何关联
在上图中找到23行,变量fc-sw_readpz,感觉这个参数与OPT的time有关联,现在关键是怎验证他们有关联。
以此类推继续去看fields内表好似什么时候赋值的,通过代码发现,此处会读取宏数据,这个宏的源代码就是读取PCL2的(PS)数据,也就是说当pe01保存自定义的薪酬核算公式的时候,数据会保存到PCL2中,relid是ps
然后分析下看看这几个内表的数据,内表的数据都是从簇表中读取。
4 总结:
下图是根据代码总结出这几个逻辑之间的关联关系。