解决方案: |
1、对于所提到的3张生产订单'010740318011','011340318009','121640318010',产成品入库单参照过滤时可以成功参照010740318011生单,对于后两张订单无法过滤出来;
2、通过sql事件跟踪器捕获参照订单的sql过滤语句: Select * From v_st_mom_orderdetail where mocode in ('010740318011','011340318009','121640318010') and ISNULL(QCFLAG,0)=0 and ISNULL(Status,0) = 3 and (case when ISNULL(SfcFlag,0)=1 then iquantity+QualifiedInQty else 1 end)<>0 and (ISNULL(iQuantity,0))>0 对where查询条件进行分解执行,发现当不加入最后两个涉及iquantity的条件时,可以过滤3张订单,但加上条件后无法过滤。 为更直观分析查询数据,调整修改所捕获的sql语句 select mocode,qcflag,status,sfcflag,iquantity,qualifiedinqty from ...(后面同) 由于是后两个where条件影响过滤结果,应重点分析记录上字段sfcflag,iquantity,qualifiedinqty的值: mocode sfcflag,iquantity, qualifiedinqty,qcflag,status 010740318011 1 40.000000 10.000000 0 3 011340318009 1 .000000 .000000 0 3 121640318010 1 .000000 .000000 0 3 根据where条件可发现问题原因在于所查记录上iquantity=0,不符合最后两个条件。
3、下一步需跟踪、分析iquantity的数据来源,其来源于视图v_st_mom_orderdetail,可编辑视图以进一步查询: 该视图由3个select查询Union运算而来,加上订单号过滤条件分别执行3个select查询,第2个查询返回结果集中包含该3笔订单记录,可缩小查询范围: select BalQualifiedQty as iQuantity,* from v_mom_orderdetail A left join v_sfc_moroutingdetail B on A.MoDId = B.MoDId and B.LastFlag = 1 left join UFSystem..UA_User on A.maker =UFSystem..UA_User.cUser_Id where A.SfcFlag = 1 and byproductflag=0 and mocode in ('010740318011','011340318009','121640318010') 数量来源于视图v_sfc_moroutingdetail的BalQualifiedQty字段上。
4、下一步需跟踪、分析视图v_sfc_moroutingdetail的BalQualifiedQty字段值来源,可编辑视图以进一步查询得知 v_sfc_moroutingdetail.BalQualifiedQty=sfc_moroutingdetail.BalQualifiedQty 数据表sfc_moroutingdetail为生产订单工序转移单的一部分,字段BalQualifiedQty表示合格数量。 库存系统产成品入库单参照生产订单时只判断末道工序上合格数量! 如对于订单121640318010,存在两道工序0010、0020,应做工序转移,当存在移入工序行号为0020,且合格数量不为0的工序转移单时才能做产成品入库。 |