今天遇到一个很奇怪的问题,就是使用逻辑数据库的时候,PROVIDE分割的多条数据不正确,自动会拆分出开始日期大于结束日期。
现在可以看看下图是PA000与PA0001的数据存储的格式,没有开始日期大于结束日期,所以数据源是没问题的,那么肯定就是出现在代码层的问题,找半天没发现原因,后来想想薪酬核算的WPBP函数也是有这样分段的例子,用同一个人核算下工资,然后debug看看会不会拆分出开始日期大于结束日期。但是发现SAP标准程序拆分是正确的,所以还是出现在自己的代码层上。
先看看错误的代码执行分析截图,注意,此处的代码只是截图provide没没有截全部循环体的代码
这时候发现数据有异常,因为p0000-begda一下就跳到2022年,所以切分就有问题,后来认真分析代码发现,内表p0000每次执行完一次provide的时候,发现内表的开始日期的顺序有改变,
所以猜测可能是因为因为排序打乱拆分逻辑。现在把循环体的代码注释下,把里面的代码全部注释,然后把断点打到红色方框里面。
发现数据是正确的,具体循环的结果如下图:
现在修改下代码,把取字段换成*号
provide的每次循环截图如下:
所以可以看出*号与输入多个字段的结果不一样,是因为底层有逻辑把数据相同的合并,如果是*号,就要匹配所有字段是否相同才合并,如果是输入字段,只会匹配几个字段。