找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 5501|回复: 9

[技巧] 用友U8备份文件浅析

[复制链接]
发表于 2011-11-18 08:15:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
本帖最后由 stonys 于 2011-11-18 08:47 编辑

一、引言

<P align=left p

align=center>  用友财务软件是目前国内财务领域中使用得最广泛的一种,审计署下发的AO软件中,就可以直接导入用友多个版本的数据,给审计人员带来极大的方便。但有时审计人员会面对几十甚至上百个帐套,如果逐个处理,未免费时费力。本文针对用友8.51的一个备份文件作一点分析,对其中各关键步骤给出一个程序处理的办法,最后给出一个解决用友8.51备份文件批量导入的流程。一点粗浅想法,抛砖引玉,同时也希望能给大家一点启示。


  二、分析过程

<P align=left p

align=center>  用友8.51在备份的时候,一般会产生两个文件:UFDATA.BA_和UfErpYer.Lst.其中UfErpYer.Lst比较小,不到1K,而UFDATA.BA_通常比较大。由此,我们判断,财务数据应该在UFDATA.BA_中。


<P align=left p

align=center>  我们用UltraEdit软件打开UfErpYer.Lst文件,发现它其实就是一个文本文件,保存着备份相关的一些信息,如软件版本、备份日期、帐套年度、文件路径等。而打开UFDATA.BA_文件时,我们发现是一堆乱码,甚至找不到常见的一些文件头的信息。因此我们初步判断它有可能是压缩过的文件。而且,从常理讲,考虑到磁盘空间的问题,数据文件备份的时候通常也会压缩处理。


<P align=left p

align=center>  尝试用WinRar打开UFDATA.BA_,成功。解压后,得到一个文件:UFDATA.文件没有后缀名,因此我们还是先用UltraEdit打开。在文件头部,我们看到有“TAPE”、“Microsoft

SQL Server”等字样,因此我们初步判断它跟SQL Server有关。


  根据以上思路,我们反过来比较,查看SQL Server数据库的各种文件的头部,看是否有与UFDATA

文件头相似的文件。SQL

Server数据库中,与数据相关的文件,我们平时接触比较多的主要有数据文件和备份设备文件。新建一个空的数据库,用UltraEdit查看它的数据文件的头部,未发现相关字样,而创建一个备份设备后,查看该文件的头部,正好跟UFDATA文件的头部是一样的。因此我们初步判定UFDATA文件为SQL

Server数据库的备份设备文件。并且,我们知道TAPE是磁带的意思,而SQL Server中跟磁带相关的通常与数据库的备份有关系。


  接下来我们就分析UFDATA文件中的内容。打开SQL

Server的企业管理器,新建一个备份设备,并将文件名指定我我们解压后得到的UFDATA文件。确定后,查看新建立备份设备的内容,发现它其实是一个(或多个)数据库的完全备份。将它还原后,我们可以看到,这是用友的一个帐套数据库。


<P align=left p

align=center>  对一个本地的数据库,我们就可以根据自己的需要,进行相关的查询和操作了。到此为止,我们其实已经完成了将一个用友U8.51的备份文件转换成我们可操作数据库的过程。但如果仅仅如此,那么本文其实是没有什么意义的,因为这个步骤我们可以很容易地利用AO软件来实现。


<P align=left p

align=center>  在实际工作中,我们遇到的往往不是单个的帐套。由于很多企业有很多独立核算的分公司,并且每个公司每年都要建一套帐,因此,我们面对的往往是十几个、几十个帐套,有时甚至会面对上百个帐套,而AO中又没有提供批量导入的办法,如果一个一个导入的话效率太低。基于这种情况,本文就利用上述分析的结果,给出一个解决的办法,能让我们批量导入用友的备份数据。


  三、解决办法

<P align=left p

align=center>  要实现批量导入,必须编写程序,实现上述分析过程中的解压、添加备份设备、还原数据库、抽取数据等步骤。我们首先对每一个关键步骤给出相应的解决办法,最后再给出一个总体的流程。


<P align=left p

align=center>  文件解压;利用Win32的API:ShellExecuteEx,调用WinRar将压缩文件解压到指定的临时文件夹下,并得到解压程序的句柄(前提是已经安装了WinRar软件)。其中要用到SHELLEXECUTEINFO这个结构,用来指定WinRar的路径以及相应的解压参数。具体可以查阅Win32

API帮助。


  添加设备;利用SQL Server 2000的存储过程sp_addumpdevice添加设备文件。

  还原数据库;利用SQL Server 2000的命令Restore

DATABASE,从设备中的备份还原数据库。另外,查看备份文设备中的备份数据库信息可以使用命令:RESTORE HEADERONLY.


  删除备份设备;可以使用存储过程:sp_dropdevice.详细信息可以查阅SQL Server

2000的帮助文档。


  接下来我们就给出批量导入用友8.51备份文件的主要流程:

  定义SHELLEXECUTEINFO类型的变量:SI

  指定SI的相关参数:动作为“Open”、文件为WinRar的执行文件(指定长文件名)

  对每个备份文件UFDATA.BA_,循环处理(循环1)

   得到文件路径和文件名,以及某些帐套信息(公司、年份等等)

   指定SI的参数为:x sFile *.* sTemp

  

(注:sFile为备份文件的长文件名,sTemp为一个临时文件夹)


   调用:ShellExecuteEx SI

   获取SI的状态直到它执行完毕

   在数据库服务器上执行:sp_addumpdevice disk,U8Back,physical_name

   (注:U8Back为我们为设备取的名,physical_name为解压后得到的UFDATA文件的长文件名)

   执行:RESTORE HEADERONLY From U8Back,得到设备中的备份列表记录集

   (注:一条记录对应于一个备份)

   对备份列表记录集的每条记录,循环处理(循环2)

   根据列表记录集中的内容,得到数据库的某些信息(如帐套年份)

    Restore DATABASE UF8 From U8Back with File=file_number,Move

Ufmodel

To DataFile,MOVE Ufmodel_LOG TO LogFile, replace


  

(注:file_number为从备份列表记录集中得到的要还原的备份集编号,DataFile与LogFile分别为还原后数据文件与日志文件的长文件名)


   抽取数据库中相应的数据

  

(注:如果把多个帐套数据合并到一起,需要根据前面得到的帐套信息将数据进行区分,例如:将各表加入帐套的年份、公司、地区等字段或是能区分各帐套的一个关键字字段进行区分)


   结束循环1

   在数据库服务器上执行:sp_dropdevice U8Back,删除设备

   结束循环2

   善后工作,如删除临时文件等

  四、结束语

<P align=left p

align=center>  本文是作者的一次实际经历的总结。在一次企业审计中,审计人员拿到了一百六十多个备份文件,并且任务要求将这些帐套中的有关数据进行合并,以便分析。最后我们以本文所述办法进行处理,代码写完后,用了不到一个晚上的时间,就将所有帐套处理完成。想法比较粗浅,做法也比较简单,在这里总结一下,也希望大家批评与指点。

发表于 2011-11-18 09:46:56 | 显示全部楼层
楼主的文章太好了           
发表于 2011-11-18 14:17:28 | 显示全部楼层
{:soso_e142:}值得学习的技术文章。

谢谢楼主分享。
发表于 2011-11-19 07:58:51 | 显示全部楼层
不错啊,楼主继续努力,顶一下。
发表于 2011-11-19 08:06:59 | 显示全部楼层
不易呀!!
太专业了!!!!!!!!!!1
发表于 2011-11-19 09:22:16 | 显示全部楼层
领教了  就是有点点的繁琐
发表于 2011-11-19 09:50:46 | 显示全部楼层
好文章 值得学习!!!
发表于 2012-8-1 10:15:14 | 显示全部楼层
太专业了 有空好好研究研究
回复 点赞 拍砖

使用道具 举报

发表于 2012-8-8 13:49:31 | 显示全部楼层
楼主辛苦了,学习学习
回复 点赞 拍砖

使用道具 举报

发表于 2013-7-19 22:47:55 | 显示全部楼层
有没有工具直接把U8的备份数据导入到本地数据库,我也有做审计,遇到这个问题,以前T3产品很好导入,U8总是玩不来,我用的是中普审计软件.谢谢
回复 点赞 拍砖

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-5-31 12:05 , Processed in 0.048135 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表