总账结账初始化时提示“初始化工作已经结束!”的解决办法原创
金蝶云社区-战斗的凯文
战斗的凯文
1人赞赏了该文章 774次浏览 未经作者许可,禁止转载编辑于2023年09月05日 11:46:15

        现象:最近有客户反馈总账结账初始化提示操作成功后,界面上依然显示为“未结束”状态。再次点击“结束初始化”菜单,却提示“初始化工作已经结束!”,但是界面上“初始化状态”列仍然显示“未结束”,刷新也不起作用,如下图所示,这导致账簿无法正常结束初始化,不能正常结账进入下一期。


image.png        原因分析:经后台数据查询分析发现,记录账簿初始化状态的表有两个,一个是系统配置表【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("更新初始化状态成功,请点[刷新]查看最新状态!");

image.png

         注意:该解决办法后台刷新账簿上的初始化状态后,界面还是没有刷新,因此,需要操作员手动点“刷新”后,才能看到更新后的状态。


图标赞 1
1人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!