一个在 Returns Form 里面找不到 serial number 的bug

      这是一个客户的bug, 问题是在 Returns form上面, 客户查找一个PO, 然后可以看见一条记录, 数量是8个, 然后点开输入serial number 的界面, 想要在LOV 里面选择. 但是问题是这个LOV 里面只有3 个serial 可以选. 其他的5 个呢?

      我们看了客户的 mtl_unit_transactions  这个表的数据, 发现其他5 个serial 已经被别人return 回去了; 当然再次return 的时候就选不到了.

      原来, 这个form 上的record 是根据RT 的记录计算出来的. 以deliver 的那一条记录为准, return 多少个回去就减去几个. 客户原本deliver 了34 个进来, 接着这条RT_id return 了26 个回去, 所以数量还剩下8 个. 但是问题是, 客户return的时候没有return 他deliver 进来的对应的serial number, 而是return 的其他的serial number. 同样的, return 其他deliver 的RT_id 的时候, 把这个RT deliver 进来的serial 给return 回去了. 这就造成了虽然数量显示是8 个, 但是却只能选到3 个.

      现在客户想要return 库存里面还剩下的serial number, 怎么才能选到呢?

      serial input 的界面全部是继承的RCVCOTRX 这个form, 我们看RCVCOTRX.pld 里面关于LOV 使用的SQL:

      首先做了一件事:

select 1 from mtl_material_transactions mmt, mtl_unit_transactions mut,mtl_serial_numbers msn
            where mut.transaction_id = mmt.transaction_id
            and msn.current_status = 3
            and mmt.rcv_transaction_id = x_from_transaction_id
            and msn.serial_number = mut.serial_number

      这个SQL 把无关的条件都去掉了, 剩下的条件我们可以看出来, 这是通过RT 的记录去找MUT 的记录, 如果能够找到, 那么就给参数x_serial_count 赋值.

      说白了, 选择serial number 的LOV 使用了两个SQL, 到底用哪个, 靠上面这个参数来判断.

      如果上面的SQL 能够选到记录, 那么LOV 使用的SQL 就用绑定RT 的那一个:

SELECT DISTINCT mut.serial_number
FROM mtl_material_transactions mmt,
  mtl_unit_transactions mut,
  mtl_serial_numbers msn,
  rcv_transactions rt
WHERE mut.transaction_id    = mmt.transaction_id 
AND mmt.rcv_transaction_id  = rt.transaction_id 
AND msn.serial_number       = mut.serial_number 
AND msn.current_status      = 3
AND rt.transaction_id       = 24362063 

      我们可以看到, 这里绑定了RT 的transaction_id. 为什么用这个SQL 呢? 因为之前的参数有返回值, 所以这个SQL 必然能够选到记录.

      通过这个SQL, 客户就能选中8 个里面的3 个serial number了.

      另外5 个怎么办? 我们看到了如果之前的记录没有选到记录, 那么使用下面的SQL:

select msn.serial_number 
from mtl_material_transactions mmt,
mtl_unit_transactions mut, 
mtl_serial_numbers msn 
where mmt.transaction_source_type_id in (12,13,3,6)

      PO 的transaction_source_type 是1.  3 代表的是杂入杂出. 这就意味着, 如果根据RT 已经选不到serial number, 还可以去选择杂入的serial, 或者其他方式进入库存的serial.

      于是问题就变得比较明白了. 只要把库存里面的serial number 先杂出, 再杂入进入库存, 那么就可以在Returns form 选到了;

      在杂入的时候输入serial 可能碰到的问题, 说"invalid serial number", 这是你需要设置一个profile: INV: Restrict Receipt of Serials 设置成No.

      感谢我的老大帮我弄明白这个问题. 虽然我也看了段代码, 但是没有很透彻. 经他一指点, 一切都明朗了.

你可能感兴趣的:(return,number,LOV,serial,receiving,选不到)