×

綁定賬號(hào)

您的微信還未綁定賬號(hào),請(qǐng)使用您的手機(jī)號(hào)綁定現(xiàn)有賬號(hào)或創(chuàng)建新賬號(hào)

微信登錄

掃碼登陸

使用微信掃一掃登錄

二維碼已失效

刷新

使用微信掃一掃登錄

登錄即表示已閱讀并接受《用戶協(xié)議》《隱私政策》

未注冊(cè)用戶掃碼即可成功注冊(cè)

登陸 注冊(cè) 忘記密碼

用友財(cái)務(wù)軟件教程-U8備份文件的批量導(dǎo)入

發(fā)布時(shí)間:2019-08-26 11:06來(lái)源:會(huì)計(jì)教練

關(guān)注公眾號(hào)
掃碼關(guān)注公眾號(hào)
領(lǐng)免費(fèi)福利
初級(jí)公眾號(hào)

用友財(cái)務(wù)軟件教程:U8備份文件的批量導(dǎo)入

用友財(cái)務(wù)軟件是目前國(guó)內(nèi)財(cái)務(wù)領(lǐng)域中使用得最廣泛的一種,審計(jì)署下發(fā)的AO軟件中,就可以直接導(dǎo)入用友多個(gè)版本的數(shù)據(jù),給審計(jì)人員帶來(lái)極大的方便。但有時(shí)審計(jì)人員會(huì)面對(duì)幾十甚至上百個(gè)賬套,如果逐個(gè)處理,未免費(fèi)時(shí)費(fèi)力。本文針對(duì)用友8.51的一個(gè)備份文件作一點(diǎn)分析,對(duì)其中各關(guān)鍵步驟給出一個(gè)程序處理的辦法,最后給出一個(gè)解決用友8.51備份文件批量導(dǎo)入的流程。一點(diǎn)粗淺想法,拋磚引玉,同時(shí)也希望能給大家一點(diǎn)啟示。

一、分析過(guò)程

用友8.51在備份的時(shí)候,一般會(huì)產(chǎn)生兩個(gè)文件:UFDATA.BA_和UfErpYer.Lst.其中UfErpYer.Lst比較小,不到1K,而UFDATA.BA_通常比較大。由此,我們判斷,財(cái)務(wù)數(shù)據(jù)應(yīng)該在UFDATA.BA_中。

我們用UltraEdit軟件打開UfErpYer.Lst文件,發(fā)現(xiàn)它其實(shí)就是一個(gè)文本文件,保存著備份相關(guān)的一些信息,如軟件版本、備份日期、賬套年度、文件路徑等。而打開UFDATA.BA_文件時(shí),我們發(fā)現(xiàn)是一堆亂碼,甚至找不到常見的一些文件頭的信息。因此我們初步判斷它有可能是壓縮過(guò)的文件。而且,從常理講,考慮到磁盤空間的問(wèn)題,數(shù)據(jù)文件備份的時(shí)候通常也會(huì)壓縮處理。

嘗試用WinRar打開UFDATA.BA_,成功。解壓后,得到一個(gè)文件:UFDATA.文件沒(méi)有后綴名,因此我們還是先用UltraEdit打開。在文件頭部,我們看到有“TAPE”、“Microsoft SQL Server”等字樣,因此我們初步判斷它跟SQL Server有關(guān)。

根據(jù)以上思路,我們反過(guò)來(lái)比較,查看SQL Server數(shù)據(jù)庫(kù)的各種文件的頭部,看是否有與UFDATA 文件頭相似的文件。SQL Server數(shù)據(jù)庫(kù)中,與數(shù)據(jù)相關(guān)的文件,我們平時(shí)接觸比較多的主要有數(shù)據(jù)文件和備份設(shè)備文件。新建一個(gè)空的數(shù)據(jù)庫(kù),用UltraEdit查看它的數(shù)據(jù)文件的頭部,未發(fā)現(xiàn)相關(guān)字樣,而創(chuàng)建一個(gè)備份設(shè)備后,查看該文件的頭部,正好跟UFDATA文件的頭部是一樣的。因此我們初步判定UFDATA文件為SQL Server數(shù)據(jù)庫(kù)的備份設(shè)備文件。并且,我們知道TAPE是磁帶的意思,而SQL Server中跟磁帶相關(guān)的通常與數(shù)據(jù)庫(kù)的備份有關(guān)系。

接下來(lái)我們就分析UFDATA文件中的內(nèi)容。打開SQL Server的企業(yè)管理器,新建一個(gè)備份設(shè)備,并將文件名指定我我們解壓后得到的UFDATA文件。確定后,查看新建立備份設(shè)備的內(nèi)容,發(fā)現(xiàn)它其實(shí)是一個(gè)(或多個(gè))數(shù)據(jù)庫(kù)的完全備份。將它還原后,我們可以看到,這是用友的一個(gè)賬套數(shù)據(jù)庫(kù)。

對(duì)一個(gè)本地的數(shù)據(jù)庫(kù),我們就可以根據(jù)自己的需要,進(jìn)行相關(guān)的查詢和操作了。到此為止,我們其實(shí)已經(jīng)完成了將一個(gè)用友U8.51的備份文件轉(zhuǎn)換成我們可操作數(shù)據(jù)庫(kù)的過(guò)程。但如果僅僅如此,那么本文其實(shí)是沒(méi)有什么意義的,因?yàn)檫@個(gè)步驟我們可以很容易地利用AO軟件來(lái)實(shí)現(xiàn)。

在實(shí)際工作中,我們遇到的往往不是單個(gè)的賬套。由于很多企業(yè)有很多獨(dú)立核算的分公司,并且每個(gè)公司每年都要建一套賬,因此,我們面對(duì)的往往是十幾個(gè)、幾十個(gè)賬套,有時(shí)甚至?xí)鎸?duì)上百個(gè)賬套,而AO中又沒(méi)有提供批量導(dǎo)入的辦法,如果一個(gè)一個(gè)導(dǎo)入的話效率太低?;谶@種情況,本文就利用上述分析的結(jié)果,給出一個(gè)解決的辦法,能讓我們批量導(dǎo)入用友的備份數(shù)據(jù)。

二、解決辦法

要實(shí)現(xiàn)批量導(dǎo)入,必須編寫程序,實(shí)現(xiàn)上述分析過(guò)程中的解壓、添加備份設(shè)備、還原數(shù)據(jù)庫(kù)、抽取數(shù)據(jù)等步驟。我們首先對(duì)每一個(gè)關(guān)鍵步驟給出相應(yīng)的解決辦法,最后再給出一個(gè)總體的流程。

文件解壓:利用Win32的API:ShellExecuteEx,調(diào)用WinRar將壓縮文件解壓到指定的臨時(shí)文件夾下,并得到解壓程序的句柄(前提是已經(jīng)安裝了WinRar軟件)。其中要用到SHELLEXECUTEINFO這個(gè)結(jié)構(gòu),用來(lái)指定WinRar的路徑以及相應(yīng)的解壓參數(shù)。具體可以查閱Win32 API幫助。

添加設(shè)備:利用SQL Server 2000的存儲(chǔ)過(guò)程sp_addumpdevice添加設(shè)備文件。

還原數(shù)據(jù)庫(kù):利用SQL Server 2000的命令Restore DATABASE,從設(shè)備中的備份還原數(shù)據(jù)庫(kù)。另外,查看備份文設(shè)備中的備份數(shù)據(jù)庫(kù)信息可以使用命令:RESTORE HEADERONLY.

刪除備份設(shè)備:可以使用存儲(chǔ)過(guò)程:sp_dropdevice.詳細(xì)信息可以查閱SQL Server 2000的幫助文檔。

接下來(lái)我們就給出批量導(dǎo)入用友8.51備份文件的主要流程:

定義SHELLEXECUTEINFO類型的變量:SI

指定SI的相關(guān)參數(shù):動(dòng)作為“Open”、文件為WinRar的執(zhí)行文件(指定長(zhǎng)文件名)

對(duì)每個(gè)備份文件UFDATA.BA_,循環(huán)處理(循環(huán)1)

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

指定SI的參數(shù)為:x sFile *.* sTemp

(注:sFile為備份文件的長(zhǎng)文件名,sTemp為一個(gè)臨時(shí)文件夾)

調(diào)用:ShellExecuteEx SI

獲取SI的狀態(tài)直到它執(zhí)行完畢

在數(shù)據(jù)庫(kù)服務(wù)器上執(zhí)行:sp_addumpdevice disk,U8Back,physical_name

(注:U8Back為我們?yōu)樵O(shè)備取的名,physical_name為解壓后得到的UFDATA文件的長(zhǎng)文件名)

執(zhí)行:RESTORE HEADERONLY From U8Back,得到設(shè)備中的備份列表記錄集

(注:一條記錄對(duì)應(yīng)于一個(gè)備份)

對(duì)備份列表記錄集的每條記錄,循環(huán)處理(循環(huán)2)

根據(jù)列表記錄集中的內(nèi)容,得到數(shù)據(jù)庫(kù)的某些信息(如賬套年份)

Restore DATABASE UF8 From U8Back with File=file_number,Move Ufmodel

To DataFile,MOVE Ufmodel_LOG TO LogFile, replace

(注:file_number為從備份列表記錄集中得到的要還原的備份集編號(hào),DataFile與LogFile分別為還原后數(shù)據(jù)文件與日志文件的長(zhǎng)文件名)

抽取數(shù)據(jù)庫(kù)中相應(yīng)的數(shù)據(jù)

(注:如果把多個(gè)賬套數(shù)據(jù)合并到一起,需要根據(jù)前面得到的賬套信息將數(shù)據(jù)進(jìn)行區(qū)分,例如:將各表加入賬套的年份、公司、地區(qū)等字段或是能區(qū)分各賬套的一個(gè)關(guān)鍵字字段進(jìn)行區(qū)分)

結(jié)束循環(huán)1

在數(shù)據(jù)庫(kù)服務(wù)器上執(zhí)行:sp_dropdevice U8Back,刪除設(shè)備

結(jié)束循環(huán)2

善后工作,如刪除臨時(shí)文件等

  • 會(huì)計(jì)教練

    掃一掃關(guān)注會(huì)計(jì)教練官方公眾號(hào),免費(fèi)領(lǐng)取1000套財(cái)會(huì)學(xué)習(xí)知識(shí)庫(kù)。

  • 會(huì)計(jì)教練線上平臺(tái)

    掃一掃關(guān)注微信小程序,免費(fèi)看每天會(huì)計(jì)做賬講解直播課。

京ICP備16061061號(hào)-1 | 北京天華在線教育科技有限公司 | 會(huì)計(jì)培訓(xùn)
京公網(wǎng)安備11010802044865