EBS 11i的接收事务处理器是不公开源代码的,你不知道它的内部处理逻辑。在利用接口来衔接不同的系统时,我们只能相信文档所言。但是有时候,答案往往又令人困惑。
接收开放接口 RCV_TRANSACTIONS_INTERFACE 中有个字段:VALIDATION_FLAG,该字段告诉接收开放接口是否在处理数据之前进行验证。它接受”Y”和”N”。接收开放接口该字段默认为”Y”。
重现交货时分配数量计算错误的BUG(Oracle一度坚持说这是特性):
1, 创建一个PO,五个分配行,数量分别为5327,2003,3555,11830,359,15。
2, 对PO做接收(交货路线为要求检验),实际接收数量为7420.98(小于可接收数量),并检验。
3, 此时会出现奇怪的现象,见截图:

留意第三个交货行数量。如果第一行和第二行被交货,则地三行会是90.98。Oracle唯一的解释就是,当第1、2个分配行交货后,该数值被四舍五入了,但是为何如此,他给不出解释,而是转而问我对业务影响有多大。
通过接口处理:
1,将配置文件 RCV: Processing Mode 设置为 Batch
2,接收事务处理选择之前的记录(第3条),数量修改为90.98
3,保存
4,修改接口数据,VALIDATION_FLAG 默认为空,将其修改为 Y
5,手工执行接收事务处理器。
6,返回接口表,显示错误信息:此事务处理没有要处理的数量。
7,重新将 VALIDATION_FLAG 修改为空,并执行接收事务处理器。
8,返回接口表,发现记录已被正常处理。
利用这个BUG可以发现,VALIDATION_FLAG 实际上并非如文档所言默认为“Y”。