2014年 第 5 期
总第 681 期
财会月刊(上)
会计电算化
巧用DOS批处理解除用友软件数据锁定

作  者
胡志宙

作者单位
(嘉应学院经济与管理学院 广东梅州 514015)

摘  要
      【摘要】在用友ERP网络版的实践教学中经常发生数据锁定,由于数据锁定不仅涉及应收、应付和总账等各模块,而且涉及不同数据库中的多个数据表,传统的数据锁定解除的方法操作繁琐且并非对所有的锁定都行之有效。本文巧用DOS批处理文件可执行多条命令的特点,结合SQL命令,实现用友软件各种类型数据锁定的一键解除。
【关键词】用友ERP   数据锁定   DOS批处理   SQL语言用友ERP网络版较单机版具有的优势为:由于网络版的数据存储和运算在服务器上,可省去学生每次重复备份、保存和恢复数据等繁琐的操作;客户端计算机无需安装用友软件和SQL数据库,提高了实验计算机的性能;方便学生课余时间在宿舍使用远程服务登录实验室的服务器来自行练习或开展开放式实验。但网络版非常容易出现工作站互斥、单据数据锁定等问题。
一、数据锁定的现象与原因
数据锁定是在用友ERP软件运行过程中,相关的数据表被锁定,造成操作中无法对其数据进行录入或修改。数据锁定后有以下类似的操作提示:[会计科目编辑]功能暂时不能执行!您只能以[会计科目查询]功能进入;科目(112101)正在被机器(erp33@0)上的用户(145)进行(期初余额录入)操作锁定,请稍候再试;站点[EMC]正在运行功能[(DP)reg系统注册],年度级独占任务[GL0209恢复记账前状态]申请不成功。
数据锁定的原因主要有:①SQL事务数据锁,在多用户、网络版下,用友软件为保证数据的独占性而对部分数据表进行锁定。②客户端的非法操作死机、网络故障或瞬间不畅。③多用户同时接入造成服务器超负载。
用友ERP中数据锁定有工作站、科目、单据等多种类型,主要涉及数据锁定的数据表有:①ua_task和ua_tasklog的数据表,在用友软件Ufsystem系统数据库中,是功能操作、网络控制和站点操作网络控制的数据表,用于记录客户端登录账套、工作站等进程的记录。②账套ufdata_001_2012(假定001为账套ID号,会计期间为2012年,下同)数据库中易发生锁定的数据表有:有关应收应付系统的客户和供应商的Lockvouch表;涉及总账科目并发控制的GL_mccontrol表;涉及总账凭证控制的GL_mvcontrol表;应收应付的填制证并发的Ap_Lock控制表和存货核算的ia_pzmutex制凭证并发表。
在客户端退出后,上述数据表应无记录,但因SQL事务锁、网络或客户端的原因,有些进程记录会驻留在上述表中造成数据锁定,有时即便重启服务器后,其记录仍驻留在锁定表中,无法解除数据的锁定。
通常解决数据锁定的方法有:①在服务器上的系统管理程序中执行清除异常任务和单据锁定。②找到提示锁定的工作站,在总账一级菜单下按下“CTRL+F6”键解除锁定记录。事实上,此类方法非但操作不便且不能解决其他类型的锁定问题。
二、快速解除锁定方法
1. 基于SQL图形管理界面的解除方法。在SQL Server Management Studio图形化工具依次打开锁定数据表所在的数据库和锁定的数据表,找到锁定的客户端或账套ID记录后删除该记录。这是解除锁定的最有效的方法,但前提必须先根据用友软件锁定的操作提示,正确判断该锁定所涉及的是哪个数据表,然后在用友服务器上的SQL数据管理工具中进行操作。不过以上方法的操作步骤繁多而且费时,不适合在因上机人数很多造成服务器超负载而导致很多锁定的情况下使用。
2. 基于SQL命令的解除锁定方法。图形化SQL数据管理工具的操作步骤繁多,使用SQL命令直接删除有关锁定记录更加简便和快捷。可先在教师用机上安装SQL2005的客户端,然后在教师用机的DOS状态下运行Sqlcmd工具,使用SQL语言的Delete命令来删除记录。例如,在UFsystem数据库中的ua_task和ua_tasklog表中会生成很多进程和工作日志的记录,当ID号为001的账套发生锁定时,为了不影响其他账套,只需从ua_task和ua_tasklog表中删除账套ID为001和锁定工作站机器名(假定为erp50)的记录就可以解除锁定了。SQL命令如下: sqlcmd -S ufs -U sa -P sa -d ufsystem  //使用sqlcmd工具登录ufs服务器上的UFsystem数据库,假定ufs为用友服务器名,sa为数据库密码,下同。
delete from ua_task where cacc_id=’001’//删除账套ID为001的所有记录。
delete from ua_tasklog where cstation=’erp50,// 删除工作站名为erp50的记录。
3. 基于DOS批处理命令解除锁定的方法。SQL命令避免了图形化工具的操作不便,但由于数据锁定的类型和涉及的数据表比较多,当遇到数据锁时需要用户根据经验判断涉及的数据表后,再输入SQL命令来删除锁定记录。该操作仍然不简便且要求老师熟悉SQL命令,另外如果判断锁定的数据表错误,也会造成解锁失败。
DOS批处理是以bat为扩展名的文本型可执行文件,可使用Windows的记事本程序将多条DOS命令写在文本文件后另存为bat可执文件,一次执行多条DOS命令。可采用DOS批处理的方法来实现数据的快速解锁,使用sqlcmd工具的-Q"cmdline query"参数来执行删除多个数据表记录的SQL命令。DOS的批处理文件如下:
echo 请输入账套
set/p zt=锁定的账套ID为=
sqlcmd -S uf -U sa -P sa  -d ufsystem -Q "declare @cs varchar(256);select @cs=cstation from ua_task where cacc_id=%zt%;delete from ua_task where cacc_id=%zt%;delete from ua_tasklog where cstation=@cs"
sqlcmd -S ufs -U sa -P sa -d ufdata_%zt%_2012 -Q"delete from LockVouch;delete from GL_mccontrol;delete from GL_mvocontrol;delete from Gl_mvcontrol;delete from Fa_control;delete from FD_LOCKS;delete from  AP_LOCK"
当发生账套锁定时,实验老师只需简单地双击运行该批处理文件并输入锁定账套的ID就可快捷地解除任何类型的数据锁定。此外,还可在服务器上安装用友远程接入服务,通过远程服务把该DOS批处理脚本以程序的方式发布在WEB网页上,权限为只允许执行。当学生发生数据锁定问题时,可登录远程服务的网页后执行该文件来自行解锁。
主要参考文献
1. 何日胜.会计电算化系统应用操作(第四版).北京:清华大学出版社,2011
2. 余芳.中文SQL Server2005数据库管理与开发.北京:冶金工业出版社,2006