用友年结时存货核算总账结转失败解决方法

 

已经N年没做ERP软件了,近日在帮一个老客户做用友软件年结时,在等了大半小时的时候,竟然弹出提示说结转失败!除此外无任何提示,郁闷啊!哭

 

没办法,只好操起MSSQL的屠龙宝刀-事件探查器,监控用友软件年结时所执行的操作,发现在年转时对存货核算总账表IA_Summary进行结转时,竟然无故中止了。连插入失败都失败?将最后一条语句执行了一下,无任何报错,看来问题不是在插入这里,往上查看,发现用友在做年转时,是把年末数据先查询出来,然后一条一条插入到新账套中去(怪不得要等这么久,惊讶效率够低啊,真应该把他们的开发人员培训一番才行)。看来问题可能是出现就查询年末数据上面,一直往上查找,发现以下语句,证实自己的猜想


 SELECT 0, IA_Summary.cWhCode as cwhcode, IA_Summary.cInvCode,
cast(str(IA_Summary.iNum,20,5) as float) as iNum,
IA_Summary.iDif,
IA_Summary.iDifRate,
cast(str(iMoney,20,2) as money) as iMoney,
(case cast(str(iNum,20,5) as float) when 0 then Null
else cast(str(iMoney/cast(str(iNum,20,5) as money) ,20,4) as float) end ) as Cost,
fMinInCost,fMaxInCost FROM IA_Summary WHERE (((IA_Summary.iMonth)=12))

该句就是将存货总账期末数据查询出来,将该语句放在查询分析器中执行,出现被零除错误,真相终于大白奋斗。从以上语句上,用友已经是对数量iNum字段为零时做了判断处理,为啥还会出现除数0的错误?经调查发现,原因在于iNum字段出现极小的数据,而上面的语句只判断了小数前面5位都为零的情况,如果iNum字段的内容小于0.000001情况下,问题就发生了。

原因找到,解决的方法也很简单,删除有问题的记录,因为iNum是存货的结存数量,当结存数量为零或极小时,完全可以删除掉该记录,无需结转,执行以下语句

delete IA_Summary where abs(iNum)<0.000001 and iMonth=12

执行后重新做年转,顺利通过!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值