销售订单无法弃审原因小析cc133engineer2009/12/28问题描述872,LP件的销售订单审核正常,弃审时提示错误信息:排查升级疑点首先确认环境,用户处刚打完补丁,也升级过脚本,升级过程中未有报错,是不是之前的升级不够完整,再次使用补丁工具做下升级看看:升级后续确认升级成功后,排除脚本执行错误,再次进入销售订单审核界面操作,发现仍然报错,会是什么原因呢?检查新增订单是否有问题,发现审核成功,是不是订单的数据错误?后台直接检查出错单据前台及后台检查该报错订单的代表记录核查信息Select*fromso_somainwherecSOCode=‘BHB901207’确认Id=61主子表通过Id值关联。Select*fromso_sodetailswhereid=‘61’核查该报错的错误记录正常,且后续没有被引用。数据跟踪确认报错继续分析,是不是后台的其他校验没有通过,其他单据的错误影响了该张单据的处理?跟踪检查,发现后台执行有报错:Error:8114,Severity:16,State:5declare@P1bitset@P1=NULLexecSA_CheckSoUsedN'106',@P1outputselect@P1分析报错检查报错的核心是execSA_CheckSoUsed这个存储过程没有通过检查。分析该存储过程校验逻辑:ifexists(selectnamefromsysobjectswhereid=object_id(N'SA_CheckSoUsedByPu')andOBJECTPROPERTY(id,N'IsProcedure')=1)execSA_CheckSoUsedByPu@isosid,@blnUsedoutputif@blnUsed=1returnifexists(selectnamefromsysobjectswhereid=object_id(N'SA_CheckSoUsedByOM')andOBJECTPROPERTY(id,N'IsProcedure')=1)execSA_CheckSoUsedByOM@isosid,@blnUsedoutputif@blnUsed=1returnifexists(selectnamefromsysobjectswhereid=object_id(N'SA_CheckSoUsedByMO')andOBJECTPROPERTY(id,N'IsProcedure')=1)execSA_CheckSoUsedByMO@isosid,@blnUsedoutputif@blnUsed=1return分析StorageProcess分别对SA_CheckSoUsed里的下级StorageProcess分别进行分析SA_CheckSoUsedByPuSA_CheckSoUsedByOMSA_CheckSoUsedByMO发现在SA_CheckSoUsedByOM里赋值执行有错误产生selectnamefromsysobjectswhereid=object_id(N'SA_CheckSoUsedByOM')select1frommom_orderdetailwheresotype=1andsodid=61错误:服务器:消息245,级别16,状态1,行1将nvarchar值'BHB801204'转换为数据类型为int的列时发生语法错误。继续分析下级错误根据报错继续分析,发现是在对生产订单的校验中出现值‘BHB801204’异常,该值应该对应mom_orderdetail.Sodid,定位到问题出错点!!下一步:排查单据里该字段值是否有报错值,修正后确认。问题点处理在数据表里检查selectsocode,sodid,modid,invcode,*frommom_orderdetailwheresodid=‘BHB801204‘,果真有记录。正确的该sodid应该来源于对应的销售订单子表的isosid确认该生产订单里销售订单号为'BHB901204‘根据该单号找到主表的Idselectid,*fromso_somainwherecsocode='BHB901204'selectisosid,*fromso_sodetailswhereid=‘40‘andcinvcode=‘1010’确认isosid值为61正确的该sodid应该来源于对应的销售订单子表的isosid确认该生产订单里销售订单号为'BHB901204‘根据该单号找到主表的Idselectid,*fromso_somainwherecsocode='BHB901204'selectisosid,*fromso_sodetailswhereid=‘40‘andcinvcode=‘1010’确认isosid值为61问题解决修改订单里的sodid与相应的销售订单子表的isosid值一致后,审核确认,通过!!问题总结1.涉及到类型转换错误的先从升级角度分析,排除脚本执行不完整原因。2.新增数据验证之前的数据是否有误,对数据有误的情况在后台无法直接找到原因的前提下跟踪确认后台的报错,并从报错点进行定位展开分析。希望对大家遇到此类问题时能拓展下思路。