现象:最近有客户反馈总账结账初始化提示操作成功后,界面上依然显示为“未结束”状态。再次点击“结束初始化”菜单,却提示“初始化工作已经结束!”,但是界面上“初始化状态”列仍然显示“未结束”,刷新也不起作用,如下图所示,这导致账簿无法正常结束初始化,不能正常结账进入下一期。
原因分析:经后台数据查询分析发现,记录账簿初始化状态的表有两个,一个是系统配置表【T_BAS_SYSTEMPROFILE】,一个是账簿表【T_BD_ACCOUNTBOOK】,在结束初始化时这两个表正常会同时更新,保持一致,但当出现上述问题时,系统配置表【T_BAS_SYSTEMPROFILE】表中记录已更新,即更新为“已结束初始化”,但账簿表【T_BD_ACCOUNTBOOK】并未同时更新,这导致两表数据不一致。而界面上的表格中的数据是从账簿表【T_BD_ACCOUNTBOOK】中加载的,因此仍显示为“未结束”。
解决办法:可以注册一个Python脚本表单插件,放在官方插件之后。增加一个标识为【tbUpdateState】的“更新初始化状态”的菜单项,在点击“结束初始化”菜单项后,如果发现账簿的初始化状态不正常,再手动点一下这个更新菜单项,菜单项会自动调用Python插件来执行SQL脚本,对系统配置表【T_BAS_SYSTEMPROFILE】和账簿表【T_BD_ACCOUNTBOOK】中“初始化”状态不一致的账簿进行强制更新,相应的SQL脚本如下:
UPDATE A SET A.FINITIALSTATUS=B.FVALUE FROM T_BD_ACCOUNTBOOK A JOIN T_BAS_SYSTEMPROFILE B ON A.FBOOKID=B.FACCOUNTBOOKID AND B.FKEY='ISENDINITIAL' WHERE A.FINITIALSTATUS<>B.FVALUE
对应的Python脚本如下【注:脚本已更新,请以这段脚本为准,图片和附件中的脚本为旧版;脚本仅支持SQL SERVER】:
import clr clr.AddReference('Kingdee.BOS.App') from Kingdee.BOS.App.Data import * def BarItemClick(e): if e.BarItemKey=="tbUpdateState": sql = "/*dialect*/UPDATE A SET A.FINITIALSTATUS=B.FVALUE FROM T_BD_ACCOUNTBOOK A JOIN T_BAS_SYSTEMPROFILE B ON A.FBOOKID=B.FACCOUNTBOOKID AND B.FKEY='ISENDINITIAL' WHERE A.FINITIALSTATUS<>B.FVALUE"; DBUtils.Execute(this.Context,sql); this.View.ShowMessage("更新初始化状态成功,请点[刷新]查看最新状态!");
注意:该解决办法后台刷新账簿上的初始化状态后,界面还是没有刷新,因此,需要操作员手动点“刷新”后,才能看到更新后的状态。
总账结束初始化时刷新账簿状态.zip(0.66KB)
推荐阅读