最近几天帮一家医院升级用友软件从U8.21升级到T6 3.3碰到一些问题,现在把问题记录总结一下,以免以后这类问题又花时间去分析解决。

环境描述:一家医院,用友U8.21,总帐、工资、应收应付、报表。与两款医院软件进行数据接口导入,导入到应付模块形成采购发票。

1.数据升级过程中,提示应收应付XML(控件)失败!

UpdateError-1

通过事件探查器跟踪SQL语句发现在AP_Detail表中的记录有错误,仔细分析这些记录后发现同一个单据号的这些记录金额有正有负,而且金额总数也是负数,但是“csign”单据正负标志的值为“Z”,试着把它改成“F”;接着找存储这张发票的表PurBillVouch和PurBillVouchs中相关记录的信息是否也有同样的错误,通过查询分析器查询后发现这些记录的“bNegative”(负发票标志)的值都为“0”,把值改成“1”后重新升级,升级过程中又发生了错误,不过却是同一个地方不同的单据号,按同样的方法校验后发现是同样的错误在不同的单据号,没办法改一个单据号再升级,再错再改再升,幸好只错了前面三个年份,每个年份出错的单据也就两三张。后来经过询问原来是这些发票是通过与一款医院软件做接口导入的,前面三年可能没发现接口的问题忽略了用友单据结构的类型。

2.工资帐套升级完成后,发现修改人员信息点确定后出现了这样一个错误

GZ-UpdatePerson-Err1

在人员附加信息设置中增加一项“公积金账号”后,再修改人员信息出现另一个错误

GZ-UpdatePerson-Err2

查了银行名称设置中的参数账号长度等与人员信息的账号长度都是符合的,又查AccInfomation中关于工资模块的参数也都是相符的。跟踪了SQL语句从进工资模块到人员信息修改的完成确认的所有语句都过滤了一下,有关银行的参数的也就是“WA_BankName”表和“AccInformation”表但这些参数都是与人员信息的银行设置值相符的,google一下,搜了一份《工资管理使用手册》里面有说明:

GZ-UpdatePerson-Explain

这里银行代发的银行账号长度是根据软件自身的设置来判断的,与用户设置的银行名称及账号长度无关,银行代发的设置只与软件默认规则有关系,所以这里人员信息中的银行代发中国建设银行的账号长度必须是16位或是把“中国建设银行”的名称改成多一个或少一个字只要不相同就可以,这样就没有账号长度是16位的默认规则了。

3.使用总帐时发现没有往来帐查询功能,在总帐选项中启用应收应付往来帐查询,查询过程中发现应收应付科目的年初数明细帐全是空的,没有相关记录。虽然软件本身提供了“引入”功能,但这个引入的是所有明细的记录,记录越多发生错误的几率越大,查找起来相当麻烦,启用了应收应付往来帐查询功能后想取消也取消不了,只能平静下来慢慢查。猜想因为U8.21本身没有提供应收应付往来帐查询,而所有的应收应付的帐只能在应收应付模块查询,所以升级后新提供的这一块功能的数据是全白的,纯属猜测。所以以后碰到U8.21升上来的帐套,可以不启用这个功能就尽量不启用,引入期初数据实在是太麻烦了。

4.在总帐做凭证时,科目代码发现不太对,有几个科目大类看不见了,后经过跟踪查询发现软件每次登录总帐后自动把“是否新行业性质”改成TRUE(update Accinformation set cValue='True' Where cSysID='AA' and cName='bNewCodeFlag'),致使科目行业性质发生变化,在软件致命错误的情况下分析了一下这个是由数据参数控制的,还是有修改的余地的,修改行业性质表,来个偷龙转凤就OK了。