已审核生产订单过滤条件案例张丽峰客户问题:U870sp3版本,用户咨询已审核生产订单修改界面点击定位,在过滤界面不录入过滤条件或录入任何过滤条件点击过滤后都提示:“表:salesorde中列customname的值为DBnull”分析思路:第一反应是查询此表的记录中是否存在字段是DBnull值的。•远程查看时,并未发现数据库中存在salesorder表,而customname字段出现在数据库字典中为而这2个视图分别为销售订单和出口订单的数据视图。怀疑还是字段出现问题再次分析客户的过滤条件,当在过滤条件输入生产订单号,日期等过滤条件时,并未出现报错,能够正常过滤出记录来。只是过滤条件中如果输入了出口订单号,系统就出现了报错。对比客户客户处出口订单号的过滤条件的设置,和870sp3测试机上的出口订单号的过滤条件客户处此过滤条件的内容和本地测试机的内容一致,应该不是这里的问题而客户是在过滤条件中输入了出口订单时,才出现报错的,为什么本地测试机没有此报错呢?•本地测试机继续测试,发现问题所在:当过滤条件中只输入出口订单号时,过滤并不报错,但是过滤出来的单据却不是对应这张出口订单的生产订单记录,而是与之没有关系的一张销售订单对应的生产订单的记录为什么会出现这样的情况呢?进行数据跟踪,定位问题可能出现的地方分析过滤条件的语句•selectmax(mom_order.moid)asIDFROMmom_orderinnerjoinmom_orderdetailon•mom_orderdetail.MoId=mom_order.MoIdinnerjoinmom_morderonmom_morder.MoDId=mom_orderdetail.MoDId•innerjoinInventoryonInventory.cInvCode=mom_orderdetail.InvCodeleftouterjoinmom_motype•onmom_motype.MoTypeId=mom_orderdetail.MoTypeId•where1=1andmom_order.mocode<'0000000063'and(1=1And•((mom_orderdetail.sotype=0ormom_orderdetail.sotype=1ormom_orderdetail.socode>=N'0000000004')•And(mom_orderdetail.sotype=0ormom_orderdetail.sotype=1ormom_orderdetail.socode<=N'0000000004')))•Andmom_orderdetail.status=3再次仔细核对本地测试机和客户方测试机的不同处,发现过滤条件中有一个销售定单类别的字段再次进行跟踪,分析过滤条件的语句•selectmax(m.om_ordermoid)asIDFROMmom_orderinnerjoinmom_orderdetailonmom_orderdetail.MoId=mom_order.MoIdinnerjoinmom_morderonmom_morder.MoDId=mom_orderdetail.MoDIdinnerjoinInventoryonInventory.cInvCode=mom_orderdetail.InvCodeleftouterjoinmom_motypeonmom_motype.MoTypeId=mom_orderdetail.MoTypeIdwhere1=1andmom_order.mocode<''0000000037''and(1=1And(mom_orderdetail.sotypeIN(N''3''))And((mom_orderdetail.sotype=0ormom_orderdetail.sotype=1ormom_orderdetail.socode>=N''0000000004'')And(mom_orderdetail.sotype=0ormom_orderdetail.sotype=1ormom_orderdetail.socode<=N''0000000004'')))Andmom_orderdetail.status=3•sotype:销售订单/预测订单/出口订单(1/2/3),此时系统考虑sotype为3,即出口订单的记录了。此时确认问题出现在了过滤条件中的销售订单类型的选择上。而客户的过滤条件中没有销售订单类型。把客户自己设置的缺省的过滤条件删除,重新设置了一个新的过滤条件,和客户确认,在进行过滤时,如果过滤出口订单时,请客户在销售订单类型中选择“出口订单”即可。谢谢大家!