网站首页博客首页 ┆欢迎光临 ERP顾问最热爱的网络——金蝶社区 登录注册帮助
松间居
泰山之松的技术博客
日志

实用程序《K3模块占用情况一览表》制作过程

想让用户自己解决模块不足的问题吗?那就让用户自己看到谁在占用哪个模块,内部沟通解决!

下面就是《K3模块占用情况一览表》的制作过程,分享如下:

   (整理自本人2004年工作手记)
 

对于一个K/3管理员来说,掌握用户使用状况是重要方面之一,特别是当用户数比较紧张的情况下,要用的用户进不去,不要用的用户却不退出来,给K/3的使用效果额外地打了折扣;而如果用户使用调度合理,则可以在不追加投次的情况下,提高K/3系统的使用效率。
然而,K/3系统不提供在客户端查看用户使用情况的功能,要想知道当前用户的使用情况,就只能到中间层服务器上查看。然而,k/3管理员不能总守着服务器,同时也占用了不必要的时间。所以能从客户端看到用户在用情况就显得相当必要。
幸好的是,K/3系统提供了丰富的LOG记录,对于用户进入系统、进入模块、退出模块、保存单据等动作都作了详细的记录。这样,我们只要分析LOG记录,应可以得到当前在用用户的情况。当然,这个办法得到的数据可能存在这样的垃圾,那就是由于用户死机或异常退出时,不能记录模块退出事件,故如果该用户没有再次进入K/3或进入后再退出K/3系统,则从LOG记录看,该用户上次的动作是正常使用,最后不是退出事件,因此只能判定该用户在线,这样计算出来的用户闲置时间是不正确的。然而,好在这种情况不是很严重,所以这样统计得到的结果基本上还是可信的。
下面的程序只处理了在应用中涉及部门较多的物流各模块,这些模块在应用中是最易成为瓶颈的部分,且价格较高。
程序的基本思路是:建立一个存储过程,找到当天的记录中,每个用户最后使用系统的LOG记录,其中使用时间距当前时间的分钟数在指定分钟数以上的记录;去掉其中事件为退出的用户(这些用户已经退出系统了),以此为依据显示使用情况与闲置时间。源代码如下:
create  procedure sps_no_use_user @mnt int
as
--本过程用户得到金蝶K/3系统的当前在用用户情况
--@mnt表示只列出闲置时间超过此分钟数的在用户用户。
select top 100 fuserid,left(ffunctionid,3) as fid,max(fdate) as rq,max(flogid) as lid into #l  from  t_log
where fdate>=convert(varchar(8),getdate(),112) and ffunctionid like 'K0%' group by fuserid,left(ffunctionid,3) having getdate()-max(fdate)>1.0/24/60*@mnt
--去掉是退出事件的:
delete #l
   from #l l,t_log lg where lg.flogid=l.lid and lg.ffunctionid like 'K0_999'
--列出清单:
select u.fname as 用户名,u.fdescription as 用户说明,f.ffunctionname 最后使用功能,cast(getdate()-l.fdate as money)*24.0*60  as 闲置分钟数,
  FDATE AS 最后操作时间,fmachinename as 最后操作用电脑,fipaddress as 最后操作IP地址
  from t_log l,t_user u,t_logfunction f,#l ll
  where f.ffunctionid=*l.ffunctionid and u.fuserid=l.fuserid and ll.lid=l.flogid order by l.ffunctionid,u.fname
 

把这个过程挂接到前端的方法大家就比较熟悉了,简述如下:
1. 通过数据库工具创建此存储过程;
2. 打开K/3系统的客户端“万能报表”;
3. 通过数据菜单的“字段”,定义存储过程返回的结果字段;
4. 通过数据菜单的“sql语句描述”,打开自定义描述对话框,选自定义查询,语句为:exec hmcp2001.dbo.sps_no_use_user [<^闲置分钟数^,^integer^,^20^>];
5. 设置报表项目,并保存报表

这样,我们即可得到一张用户在用报表。

 
已经公开 2007年1月16日 18:55 作者: 泰山之松
所属归类:
附件下载: 系统在用用户表制作界面.gif

评论

avatar 
不错,自己建一个程序查看系统使用情况也不错啊,省得再用网络控制去看了.
2007-01-17 8:14
 
avatar 
不错啊,试试看.
先谢谢了 
2007-01-17 8:40
 
avatar 
收藏,找时间我也试试看.
2007-02-09 14:57
 
avatar 
我吧,是个菜鸟,没看明白,又想尝试一下。所以您能不能说得更详细些,或者配合些图片。万分感谢!
QQ:11436430
mail:wxf405@sohu.com
2007-03-09 17:50
 
avatar 
没看懂,以后还要多学习啊
2007-03-16 10:13
 
avatar 
# zjj
我试过几次,但好象我已退出,但还会显示在其中。另有死进程,在网络控制中可看见,但这里却看不见。
2007-04-06 10:14
 
avatar 
这好像只能计算一个帐套的问题,多帐套就解决不了咯!
2007-04-14 9:44
 
avatar 
我问下: K/3 目前能作到自动清除多少分钟不使用的记录数吗?而不是强制清除管你有没有使用,都全部清除 !
2007-04-16 10:34
 
avatar 
在SQL查询分折器中执行最后exec mcp2001.dbo.sps_no_use_user [<^闲置分钟数^,^integer^,^20^>];
返回的错误信息是
服务器: 消息 8114,级别 16,状态 4,过程 sps_no_use_user,行 0
将数据类型 nvarchar 转换为 int 时出错。
 
请问这是怎么回事呀。
我的信箱是yong_chen@kingdee.com, 望博主不吝赐教。
2007-08-14 10:31
 
avatar 
呵呵,有创意,我也来玩玩.
2007-09-03 18:40
 
请登录后再发表评论以赚取更多积分

About 泰山之松

从自主开发到维护K3再到SAP