通过接口传递采购接收信息时有个小小的陷阱,这个陷阱会导致交货数量匹配混乱,但并没有在Oracle任何公开的文档中说明。
这里假设一个情景:做一个标准采购订单,交货路线为要求检验。分配行1数量为500,分配行2数量为500。可以猜测到做检验后,RCV_SUPPLY中的DESTINATION_TYPE_CODE将可能是SINGLE或者MULTIPLE。
做两笔接收:接收号1数量为400,接收号2数量为600。所有插入接口的数据完全按照《Oracle Manufacturing APIs and Open Interface Manual》中要求的必须字段来。
数据传到RCV_TRANSACTION_INTERFACE后,接收事务处理器(无法看到源码,是个黑盒子)会根据对应的分配行分配数量进行动态判断。
如果先对接收号1做检验,则目的地类型判断为SINGLE,同时该接收数量给分配行1。再对接收号2做检验,则目的地类型判断为MULTIPLE,同时该接收数量给分配行1的数量为100,给分配行2的数量为500。
如果先对接收号2做检验,则目的地类型判断为MULTIPLE,同时该接收数量给分配行1的数量为300,给分配行2的数量为300。再对接收号1做检验,则目的地类型判断为MULTIPLE,同时该接收数量给分配行1的数量为200,给分配行2的数量为200。
也就是说,接收事务处理器是根据PO_LINE_LOCATION_ID来动态计算每个发运行对应分配行此次分配的数量。先计算第一个分配行的数量,再计算第二个分配行的数量。如果第一笔交货和第二笔交货同时插入接口进行处理,则很有可能本来应该SINGLE的交货数量,被后面的MULTIPLE的交货数量给填充了,这按理是不应该发生的。这样就会导致第一笔SINGLE的交货无法被正常处理。造成这个问题的原因估计是,接收事务处理没有判断此次交货是针对哪个接收的。
