客户通过BOS平台开发的一套会员管理系统,其中有一张单据一直运行的好好的,没有出过问题。但是今天却只在某台机器上跳出错误提示,具体内容:错误13,类型不匹配。该错误提示是在点击单据的“保存”按钮后出现的,因此排错检查代码就只检查m_billInterface_BeforeSave和AfterSave两个事件,AfterSave事件很简单,因此没有写容错语句,故此错误提示不可能是该事件产生,只剩下BeforeSave事件了。
在BeforeSave事件里,有一个比较复杂的操作是遍历单据体,将单据上的商品按上级组汇总统计数量,然后根据订单情况(同样也是按上级组汇总出来的数据,包括大类数量,大类的定购金、优惠金,相同大类的订购金、优惠金相同)与该单据进行对比,在大类订购数量内,冲抵定购金,然后扣减优惠金,最后算出实际金额,超出定购部分则按正常价格销售。
这个功能虽然运行起来效率比较低,但一直以来都很稳定,没有出过问题。再三检查代码,并多次调试,错误没有在调试用的电脑上重现。后来无意中将光标点到一个空行,然后再点击保存,立刻跳出了错误13的提示。
于是恍然大悟,遍历单据体时,首先读取商品内码,再根据内码查找上级组内码。而空行在遍历时,读取到的商品内码是个空字符串,而插件里将商品内码定义为Long型,一定会产生类型不匹配的错误了。首先将商品内码定义为Variant类型,然后再遍历单据体时,一旦商品内码为空字符串,则跳出遍历。如此,插件报错的情况解决了。
那么,究竟是什么原因导致这台电脑的单据在保存前,光标总是自动跳到空行呢?原来客户在K/3里设置了“按回车键自动跳转到下一行”,当在单据上录完数据后,习惯性的按回车键,光标于是跳到下一行。如果这个下一行正好是个空白行,而插件中有没有处理空白行的语句,那么就会产生错误了。
更多技术问题请咨询:湖北微信科技有限公司 027-84233202