参照MRP计划生成采购订单,无法按供应商过滤用友软件股份有限公司姓名:牛春艳2011年06月20日问题描述分析过程总结问题描述问题:890SP1。客户咨询:参照MRP计划生成采购订单时,过滤条件中,按供应商过滤时,过滤不出任何内容;但是不选择任何供应商时,可以过滤出该供应商的相关记录。客户咨询原因?补充知识:MRP计划参照界面的供应商,取自存货档案的主要供货单位。问题再现分析过程通过SQL数据跟踪:分析过程分析SQL语句:SELECTdemandidinto[pu_mrptocgdd_ERIC0]fromcopymrplistwhereconvert(decimal(20,4),copymrplist.iplanqty)>convert(decimal(20,4),copymrplist.icrdqty)AND1=1And((copymrplist.cVencode>=N'9')And(copymrplist.cVencode<=N'9'))Andcopymrplist.cinvcodein(selectcinvCodefromVenAndInvwherecVenCodeBetweenN'9'ANDN'9'ORcVenCodelikeN'9%')andSupplyType=1分析过程分析SQL语句:判断条件:((copymrplist.cVencode>=N'9')And(copymrplist.cVencode<=N'9'))Andcopymrplist.cinvcodein(selectcinvCodefromVenAndInvwherecVenCodeBetweenN'9'ANDN'9'ORcVenCodelikeN'9%')分析:系统默认先判断视图copymrplist的供应商编码cVencode,满足过滤条件;同时,又要求视图数据的存货编码,满足:供应商存货对照表VenAndInv中,要过滤的供应商有对应的存货编码。分析过程总结:查看供应商存货对照表,供应商9中没有需要的存货编码8。因此按供应商9过滤MRP计划时,过滤不出任何数据。检查供应商存货对照表:解决方案方法1:增加供应商存货对照表:这样,就过滤出供应商9的相关记录解决方案没有设置供应商存货对照关系方法2:增加新的过滤条件:根据数据源copymrplist.cinvcode设置的过滤条件,也可以按供应商9过滤出数据来。深入分析我们发现:供应商供货控制--要求严格控制。过滤条件中,为什么供应商要检查供应商存货对照表?查看采购选项,发现:深入分析对比三种情况:1、供应商供货控制:严格控制。后台条件:((copymrplist.cVencode>=N'9')And(copymrplist.cVencode<=N'9'))Andcopymrplist.cinvcodein(selectcinvCodefromVenAndInvwherecVenCodeBetweenN'9'ANDN'9'ORcVenCodelikeN'9%')2、供应商供货控制:检查提示。后台条件:((copymrplist.cVencode>=N'9')And(copymrplist.cVencode<=N'9'))Andcopymrplist.cinvcodein(selectcinvCodefromVenAndInvwherecVenCodeBetweenN'9'ANDN'9'ORcVenCodelikeN'9%')3、供应商供货控制:不检查。后台条件:((copymrplist.cVencode>=N'9')And(copymrplist.cVencode<=N'9'))总结:通过对比发现,当检查或控制了供应商供货关系,系统在按供应商过滤时,会自动检查copymrplist中存货,需要满足所过滤供应商与该存货有对照关系。不检查供应商供货控制,系统不检查供应商存货对照表。实际进一步分析,系统如此设置是正确的,如果控制供应商存货对照关系,必须在过滤时,就考虑双方对应关系。深入分析扩展问题:进一步分析SQL语句:copymrplist.cinvcodein(selectcinvCodefromVenAndInvwherecVenCodeBetweenN'9'ANDN'9'ORcVenCodelikeN'9%')在过滤供应商存货对照表时,后台在where语句中,判断供应商编码时,使用了区间条件BetweenN‘9’ANDN‘9’;另外,还有一个或者条件:供应商编码开头以9开头的供应商也可以。展现在前台是:供应商存货对照表中,并没有供应商9与存货编码8的对应关系,不过有供应商91与存货8的对应仍然过滤出供应商9的记录问题总结问题:参照MRP计划生成采购订单,无法按供应商过滤??原因:控制或者检查供应商存货对照关系。解决方案:1、取消供应商存货控制检查。2、如果一定要检查供应商存货对照关系:(1)那么在供应商存货对照表中,设置该供应商与存货的对照关系。(2)根据数据源copymrplist.cinvcode设置一个新的过滤条件。题外话:如果其它供应商编码开头与该供应商编码一致,并且其它供应商设置了供应商存货对照关系,也能过滤出数据,这应该属于一个系统BUG。因为系统中控制供应商存货对照关系时,是完全对应,不存在模糊对应的要求。