考勤系统报错案例用友软件股份有限公司张睿2010年9月19日具体问题情况:872版本,用户之前安装了SP1补丁,考勤管理系统使用正常,现在用户使用自动更新工具更新并安装了最新的考勤系统补丁,补丁编号为:CP-U872-3101-100809-TM,现在发现再进入考勤系统做考勤计算,软件就会报错。错误提示很长:执行select……时出错,错误信息:列名’nFormulaWithPara’无效,初步判断应该是数据库某表中少该字段了。问题情况分析:起初以为用户安装补丁的时候没有升级数据库脚本,但是指导用户在补丁更新工具中对该账套执行脚本升级,升级成功后再做考勤计算问题依旧。卸载补丁重新安装问题依旧。后在本地测试机上测试,安装CP-U872-3101-100809-TM补丁后,也出现同样的问题了,如果卸载该补丁,就正常了。难道是补丁有问题?经过反复测试终于找到了问题的原因。下面详细说一下具体情况。首先在自动更新工具中安装编号为:CP-U872-3101-100809-TM的考勤系统补丁。安装好后,登录考勤管理系统,双击考勤计算,软件报错,提示:执行select……时出错,错误信息:列名’nFormulaWithPara’无效,无法执行考勤计算,如下图:同时查看考勤算法,也出现问题,计算公式设置都变成了1111111111111111111111111正常情况应该如下图显示:报错脚本如下:SelectHR_TM_ArithFormula.ckey,HR_TM_ArithFormula.cArithStep,HR_TM_ArithFormula.cDesc,HR_TM_ArithFormula.cItem,hr_sys_itemdict.vItemName,hr_sys_itemdict.iitemtype,HR_TM_ArithFormula.bUsed,HR_TM_ArithFormula.iCalcOrder,HR_TM_ArithFormula.iType,HR_TM_ArithFormula.iJoinMethod,HR_TM_ArithFormula.bRepeat,HR_TM_ArithFormula.iStatWay,HR_TM_ArithFormula.nContent,HR_TM_ArithFormula.nFormulaDesc,HR_TM_ArithFormula.iXmlID,HR_TM_ArithStep.cArithmetic,HR_TM_Arithmetic.cAimTable,hr_sys_setdict.vMainKey,HR_TM_Arithmetic.cQueryClass,HR_TM_ArithFormula.nFormulaWithParafromHR_TM_ArithFormulaleftjoinHR_TM_ArithSteponHR_TM_ArithStep.cArithStep=HR_TM_ArithFormula.cArithStepleftjoinHR_TM_ArithmeticonHR_TM_ArithStep.cArithmetic=HR_TM_Arithmetic.cArithmeticleftjoinhr_sys_setdictonHR_TM_Arithmetic.cAimTable=hr_sys_setdict.ctablecodeleftjoinhr_sys_itemdictonHR_TM_ArithFormula.cItem=hr_sys_itemdict.citemcodeandhr_sys_itemdict.ctablecode=hr_sys_setdict.ctablecodewhere1=1andHR_TM_ArithFormula.bused=1andHR_TM_Arithmetic.cArithmeticin(‘01’,‘02’)orderbyHR_TM_ArithStep.iorder,HR_TM_ArithFormula.itype,HR_TM_ArithFormula.iCalcOrder时出错,错误信息:列名'nFormulaWithPara'无效。分析报错脚本,HR_TM_ArithFormula.nFormulaWithParafromHR_TM_ArithFormula,这是一个视图打开该视图,发现是从HR_TM_ArithFormula_base和HR_TM_ArithFormula_lang两个表取字段,该视图里没有‘nFormulaWithPara’字段,所以程序执行之前的语句会报错分别打开该视图调用的两个表,HR_TM_ArithFormula_base和HR_TM_ArithFormula_lang,同样也没找到’nFormulaWithPara’列,看来不单纯是视图有问题,应该是安装补丁后,数据库少了相应的字段了。但是安装补丁的时候已经升级脚本了,并且没有报错,操作方面应该没有问题,而且卸载补丁后软件操作正常,难道是补丁有问题?后经过反复测试,才发现是和另一个补丁有关,需要先安装编号为:KB-U872-2919-100408-201003100194的补丁,该补丁安装后,会在HR_TM_ArithFormula_base表中增加’nFormulaWithPara’字段,并且修改HR_TM_ArithFormula视图,同样增加该字段。在自动更新工具中安装编号为:KB-U872-2919-100408-201003100194的补丁。安装好后,再登录考勤管理系统,双击考勤计算,已经正常了。同时查看考勤算法,也正常了。打开HR_TM_ArithFormula视图,‘nFormulaWithPara’字段已经加上了。打开HR_TM_ArithFormula_base表,‘nFormulaWithPara’列也已经加上了。总结该问题出现的原因,是补丁依赖关系没有设置,导致在不安装KB-U872-2919-100408-201003100194补丁直接安装CP-U872-3101-100809-TM补丁的情况下,数据库中少字段。