运用MS SQL视图+存储过程+作业计划功能实现自动定时清除金蝶K3非正常使用记录
本篇文章是2023年7月20日《运用MS SQL作业自动定时清除金蝶K3非正常使用记录》文章的改进,实现了运行过程的全自动化。
在日常使用K3系统的过程中,经常在打开单据、凭证或过账、结账等操作时,会有以下两类情况出现
第一类情况:“当前用户使用的功能与其他用户存在冲突,目前无法使用”的提示,我们通常的解决方案是:
1、软件左上角【系统】→【客户端工具包】,打开【客户端工具包】窗口;
2、单击【系统工具】→【网络控制工具】,登陆报错的帐套,弹出【网络控制】窗口;
3、单击选中需要清除的记录;
4、单击菜单【控制】→【清除当前任务】,即清空网络控制工具中选中的记录。
第二类情况:实际登录使用的用户数没有超过最大站点数,但系统会有类似“未检测到加密狗或已经达到最大站点数,并且该账套已使用超过三个月。”的提示,我们通常的解决方案通常是:
登录账套管理,打开【系统】→【系统使用状况】→清除超时在线的用户记录
上述两类问题产生的原因通常是:
1、K3用户被强制退出;
2、K3使用过程中出错,导致进程中断;
3、因用户电脑断电、非正常重新启动、系统崩溃导致原有记录不能退出;
上述问题的重复出现,让人不堪其扰,在这篇文章https://wenku.my7c.com/article/469987012330414848?productLineId=7,我写了一个简单的执行语句,然后利用数据库的作业机制,自动定时清除K3的非正常使用记录,尽可能的减少人工删除非正常使用记录的烦恼。
但在实际运用时,如果有账套增加或减少,还需要每次手工去调整作业步骤的内容,不然就会有错误提示导致作业无法完全执行,因此我有了改进的想法,具体如下:
第1步、通过视图直接调取账套管理表的数据库实体名称;
第2步、通过存储过程把视图中数据库实体对应的账套的超时使用记录进行清理;
第3步、通过作业机制定时执行存储过程;
通过以上三步完成清除非正常使用记录的自动化。
以下内容已通过测试并已实际运行多日,
操作系统环境:WINDOWS SERVER 2008R2 x64
数据库环境:MS SQL SERVER 2008R2 x64
金蝶软件:K3
具体语句如下:
第1步在KDAcctDB数据库中创建视图的SQL语句:
CREATE VIEW ZZVW_RegAcctAis AS
SELECT row_number () OVER (ORDER BY t1.FAcctID) AS FNo --这里给查询出的记录自动加上序号列
, t1.FAcctID --这里是账套数据库实体的管理内码
, t1.FDBName --这里是账套数据库实体名
, t1.FAcctName --这里是账套名称
, 'DELETE FROM ' + t1.FDBName + '.dbo.t_FuncControl' AS FSQLDeleUsingRec --这里是后期执行用的语句
, '--' + t1.FAcctNumber + ',' + t1.FAcctName AS FSQLAcctAisMark --这里是账套名称,与金蝶软件账套名称一致
FROM KDAcctDB.dbo.t_ad_kdAccount_gl t1
第2步在KDAcctDB数据库中创建存储过程的SQL语句:
CREATE PROCEDURE [dbo].[ZZProc_DeleUsingRec]
AS
SET NOCOUNT ON
DECLARE @sql VARCHAR(100)
DECLARE @num INT
--以下开始为账套管理数据库【删除超时占用许可记录】
DELETE FROM KDAcctDB.dbo.t_ad_UsingRec
WHERE Getdate() > Fupdatetime --账套管理数据库
--以上已完成账套管理数据库【删除超时占用许可记录】
--以下开始为各账套【删除非正常退出记录】
SELECT @num = Count(FAcctID)
FROM ZZVW_RegAcctAis
WHILE @num >= 0
BEGIN
SELECT @sql = FSQLDeleUsingRec
FROM ZZVW_RegAcctAis
WHERE FNo = @num
EXECUTE (@sql)
SET @num=@num - 1
END
--以上已完成各账套【删除非正常退出记录】
SET NOCOUNT OFF
第3步创建定时执行的作业
以上步骤中的SQL语句:EXEC ZZProc_DeleUsingRec
按以上步骤执行即可完成目标任务。
注1:金蝶K3软件的账套管理数据库名称为KDAcctDB;
注2:金蝶KIS软件的账套管理数据库名称为AcctCtl,只需要把语句中的KDAcctDB替换即可;
注3:金蝶GKIS软件的账套管理数据库名称为AcctOEM,只需要把语句中的KDAcctDB替换即可;
注4:因SQL语句中个别函数不支持MS SQL SERVER 2000,因此数据库版本至少是MS SQL SERVER 2005及以上,建议使用MS SQL SERVER 2008R2。
***本文档到此结束***
运用MS SQL视图+存储过程+作业计划功能实现自动定时清除金蝶K3非正常使用记录
本文2024-09-16 16:25:01发表“k3wise知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3wise-9092.html