今天遇到一个比较奇怪的问题,就是ger pernr在2月的时候能找到员工主数据,但是在3月的时候无法找到员工主数据。首先SE36:逻辑数据库页面,看看标准逻辑数据库执行,是否能获取数据。
从上述标准的逻辑书而言,系统是能取到相关数据的,但是为什么自开发的报表却无法获取到数据,首先排查的是看报表的逻辑数据库选的pnp还是其他,发现和无异常,代码中也看的是ger pernr,所以比较奇怪,然后只有debug看看标准的逻辑数据库,se36执行的时候和自定义开发的时候get pernr里面的代码有什么区别.逻辑数据库debug的时候有一个比较困难的,就是debug有的系统核心代码,需要debug设置的时候选择内核代码两个沟,所以需要设置。要不然看不到核心代码。逻辑数据get pernr的上一层是put pernr,所以研究相关代码要倒着一层一层找,核心的代码都在put pernr中。经过一段代码分析DBPNP001DE 56行,发现有个900的判断,如果等于900系统就会去校验工资结果目录数据,也就是164行,有个if的判断逻辑。
如果工资目录没有数据,系统就会跳过后面的检查,get pernr开始获取到的数据不会传递到后面,也就是为什么se36能查到数据,但是自定义报表无法查询到数据的问题。原来一直没认真研究这块,以为只要选择PNP,即是没有工资结果,但是人员还是能查询到的,所以这个900就是关键,系统单独判断900,那后台肯定有相关的配置界面,所以找到这个900就是关键,900换掉选其他可能就有数据,后来仔细想想,900是数字,数字关联的只有逻辑数据库的选择屏幕,因为选择屏幕可以配置屏幕需要出现哪些字段,哪些字段必输等信息,所以下图最右边选的是900,900屏幕控制薪酬数据是否为空的信息。所以逻辑数据库有权限标准程序能找到人员数据,自定义报表无法查询的数据可以看看这个选择屏幕的编号。