在一個企事業單位中,可能布置有多種軟件,如財務軟件、OA系統、ERP系統、自主開發的應用系統等等。這些應用軟件各自都會積累大量的數據,若不能使它們彼此溝通整合起來,就會形成人們常說得“信息孤島”的現象 —— 一個企業中有多種系統在運行;各系統有各系統的數據,互相不能訪問;同一份數據要在不同的系統中重復錄入;各系統的數據之間經常出現不一致;哪里都有數據,領導需要數據時卻無法迅速找到,找到了也不知是否準確。
信息孤島問題的解決需要從多個方面著手,從技術上說,應當有使得不同的系統能夠互訪數據的能力。
Excel服務器提供了“外部數據源”的功能。其目的是使得Excel服務器能夠訪問和操作其它應用系統的數據庫中的數據。相對于Excel服務器而言,其它系統的數據庫稱為“外部數據源”。
Excel服務器目前支持的外部數據源類型有三種:SQL Server 2000、access、Sybase。Excel服務器僅提供利用外部數據的方法。若要實際利用外部數據源的數據,需要具備以下條件:
1)您既要有Excel服務器的系統治理員權限,也要有對外部數據源的系統治理員權限。
2)您了解外部數據源的位置和訪問方法。
3)您了解外部數據源中數據表和字段的含義。
現在以用友ERP-U8 為例,說明外部數據源的用法。您會看到,如何把用友ERP-U8的帳套數據庫定義為外部數據源;如何通過Excel服務器的模版訪問用友ERP-U8的數據。
本例子中所用的用友ERP-U8軟件,來自人民郵電出版社《用友ERP----財務軟件培訓教程(第二版)》的隨書附送V8.50演示版光盤。讀者可自行購買得到。本例中的數據為演示版中的示例帳套,例子中用到了用友數據庫中的兩個表,對表名及其中字段含義的解釋,為作者自行分析示例帳套中的數據所得,目的僅在于講解Excel服務器的外部數據源的使用,而非對用友數據庫的解讀,不代表用友公司,亦不保證正確。
用友ERP-U8 V8.50使用的是SQL Server數據庫。本章假設您具備關于SQL Server系統治理的一些基本知識,如SQL Server企業治理器的使用、表與視圖的概念、SQL Server帳戶及帳戶權限設置等。關于這方面內容,讀者可自行參考其它相關書籍。
安裝好演示版后,引入示例帳套“[999]演示帳套”。熟悉SQL Server的用戶可從SQL Server企業治理器中看到,出現了一個新的數據庫“UFDATA-999-2002”,如下圖所示:

若要在Excel服務器中引用“UFDATA_999_2002”中的數據,要經過兩個步驟,首先,要在Excel服務器中把數據庫“UFDATA_999_2002”登記為外部數據源。第二步,要指定“UFDATA_999_2002”數據庫中的哪些表或視圖可以在Excel服務器中被引用,這一步稱為“注冊數據表”。
這樣做了之后,外部數據源中被注冊過的表,就像通過Excel服務器模版定義的普通數據表一樣,可以在表間公式和回寫公式中使用。也可以讓模版上的數據項“對應”到這些外部數據表,使得通過Excel服務器填報表單,能將表單數據直接存入外部數據庫。
第一節 注冊外部數據源
1.以Admin賬戶(其它具有Administrators角色的帳戶亦可)登錄到治理臺。
2.在治理臺主界面左側樹型中選中“外部數據源”,點擊鼠標右間,選擇彈出菜單“新建à數據源”,彈出“注冊外部數據源”對話框,如下圖所示。

1)數據源類型選擇“SQL Server”,數據源名稱您任意起,這里輸入“用友”,服務器或數據文件處輸入用友數據庫所在的服務器名(不必和Excel服務器數據庫安裝在同一臺機器上),作者把用友數據庫安裝在自己的計算機上,名稱為Demo。數據庫名稱輸入用友演示帳套的數據庫名,為“UFDATA_999_2002”。
2)登錄賬戶指的是用于連接用友數據庫所在的數據庫服務器的SQL Server帳戶。作為系統治理員,您應當知道帳戶和密碼。在這里,我們輸入SQL Server的超級用戶sa,作者計算機的sa帳戶口令也是“sa”。
3)按[確定],完成外部數據源的注冊。對話框關閉,治理臺主界面右側窗格中出現已注冊的“用友”外部數據源,如下圖所示。

第二節 注冊外部數據源中的表
注冊了“用友”外部數據源后,還需要對其中要用到的數據表或視圖進行“注冊”,才能實際訪問其中的數據。在余下兩節的例子中,我們要通過Excel服務器訪問用友帳套數據庫中的三個表:科目表、憑證表和科目總賬表。所以先要對這三個表進行注冊。
1)在治理臺主界面左側樹型上展開“外部數據源”,選中“用友”,在右側窗格中顯示出所有用友演示帳套數據庫中的表和視圖。
2)選中表code,點擊鼠標右鍵,選擇彈出菜單“注冊數據表”。

3)彈出“數據表信息”對話框,將顯示名稱改為“用友_科目表”。
4)在“列信息”選項卡上修改若干列的“顯示列名”:cclassà類別,ccodeà科目編碼,ccode_nameà科目名稱,igradeà級次,cexch_nameà外幣幣種,并選中實際列名[ccode]為主鍵。
修改后的結果如下圖所示:

注:所謂數據表的“顯示名稱”和字段的“顯示列名”,目的是表達出數據表和字段的含義,使人更輕易理解。不改變也是可以的。
5)切換到“可讀權限”選項卡,選擇可讀部門和角色,如下圖:

6)按[確定]
用同樣方法,注冊用友帳套數據庫中的憑證表。
表名:gl_accvoUCh
顯示名稱:用友_憑證表
修改部分字段的顯示列名:
實際列名
顯示列名
主鍵
i_id
流水號
√
iperiod
期間
csign
憑證字
ino_id
憑證號
inid
明細行號
dbill_date
制單日期
cbill
制單人
ccheck
審核人
cbook
記賬人
ibook
是否記賬
iflag
作廢標志
cdigest
摘要
ccode
科目編碼
md
借方金額
mc
貸方金額
md_f
外幣借方金額
mc_f
外幣貸方金額
可讀權限:
部門:陽光乳業、財務部
角色:Administrators、會計、財務部經理
可寫權限:
部門:財務部
角色:會計
表名:gl_accsum
顯示名稱:用友_科目總賬表
修改部分字段的顯示列名:
實際列名
顯示列名
主鍵
i_id
流水號
√
ccode
科目編碼
iperiod
會計期間
cbegind_c
期初方向
mb
期初金額
md
借方金額合計
mc
貸方金額合計
cendd_c
期末方向
me
期末金額
可讀權限:
部門:陽光乳業、財務部
角色:Administrators、會計、財務部經理
可寫權限:無
第三節 表間公式引用外部數據
本節創建一個模版,從用友數據庫中查詢某科目在指定會計期間內的明細賬。
新建模版《用友明細賬查詢》,信息如下:
項目
內容
報表編號
FDS-001
報表名稱
用友明細賬查詢
初始填報權限
部門:陽光乳業、財務部
角色: Administrators 、財務部經理、會計
最終查閱權限
部門:無
角色:無
其它
接受默認值
表樣:

Excel 公式:
單元地址
公式
D7
=K7 & IF(L7=0,"",TEXT(L7,"0000"))
并復制到 D8:D17
H7
=IF(D7="","",IF(H6=" 平 ",IF(F7>0," 借 "," 貸 "),IF(H6=" 借 ",IF(J7>0," 借 ",IF(J7<0," 貸 "," 平 ")),IF(J7>0," 貸 ",IF(J7<0," 借 "," 平 ")))))
并復制到 H8:H17
J7
=IF(D7="",0,IF(H6=" 借 ",I6+F7-G7,I6+G7-F7))
并復制到 J8:J17
I7
=ABS(J7)
并復制到 I8:I17
F18
=SUM(F7:F17)
G18
=SUM(G7:G17)

表名
用友明細賬查詢_主表
所在工作表
Sheet1
樣式
單一數據項
是否創建
否
主鍵
區域
字段名
數據類型
必填
填寫規范
其它
C2
期間
整數
C3:E3
科目
文字(100字以內)
科目列表
G3
科目編碼
文字(20字以內)
B4
年
整數
H6
期初方向
文字(20字以內)
I6
期初余額
金額
F18
借方合計
金額
G18
貸方合計
金額
H18
期末方向
文字(20字以內)
I18
期末余額
金額
表名
用友明細賬查詢_明細
所在工作表
Sheet1
樣式
重復數據項、按行、可擴展
是否創建
否
主鍵
區域
字段名
數據類型
必填
填寫規范
其它
B7:B17
月
整數
C7:C17
日
整數
D7:D17
憑證號數
文字(100字以內)
E7:E17
摘要
文字(100字以內)
F7:F17
借方
金額
G7:G17
貸方
金額
H7:H17
方向
文字(20字以內)
I7:I17
余額
金額
K7:K17
憑證字
文字(20字以內)
L7:L17
憑證號
整數
M7:M17
流水號
整數
公式名稱:查詢科目編碼
應用方式:篩選條件改變后自動執行
公式內容:
提取<用友_科目表>中滿足下列條件的數據:
<數據篩選: 用友_科目表.科目名稱 = 本報表.Sheet1:科目>
按以下方式填入<用友明細賬查詢_主表>:
用友_科目表.科目編碼--->(填入值)科目編碼
公式名稱:查詢期初余額及方向
應用方式:篩選條件改變后自動執行
公式內容:
提取<用友_科目總賬表>中滿足下列條件的數據:
<數據篩選: 用友_科目總賬表.會計期間 = 本報表.Sheet1:期間
并且 用友_科目總賬表.科目編碼 = 本報表.Sheet1:科目編碼>
按以下方式填入<用友明細賬查詢_主表>:
用友_科目總賬表.期初方向--->(填入值)期初方向
用友_科目總賬表.期初金額--->(填入值)期初余額
公式名稱:查詢明細
應用方式:篩選條件改變后自動執行
公式內容:
提取<用友_憑證表>中滿足下列條件的數據:
<數據篩選: 用友_憑證表.期間 = 本報表.Sheet1:期間
并且 用友_憑證表.科目編碼= 本報表.Sheet1:科目編碼
并且 用友_憑證表.是否記賬 =1>
按以下方式填入<用友明細賬查詢_明細>:
用友_憑證表.流水號--->(填入值)流水號
月份值(用友_憑證表.制單日期)--->(填入值)月
日期值(用友_憑證表.制單日期)--->(填入值)日
用友_憑證表.摘要--->(填入值)摘要
用友_憑證表.借方金額--->(填入值)借方
用友_憑證表.貸方金額--->(填入值)貸方
用友_憑證表.憑證字--->(填入值)憑證字
用友_憑證表.憑證號--->(填入值)憑證號
1)填報《用友明細賬查詢》
2)期間輸入8、選擇科目,查詢出結果如下:

第四節 填報表單,數據寫入外部數據庫
除了能從外部數據源查詢數據以外,還可以通過填報表單,直接將數據保存到外部數據源中的表。比如,我們可以創建一個《憑證錄入》模版,定義數據項時不是創建新的數據表,而是“對應”到“用友_憑證表”。(參見下面的例子---多模板對應一個數據表),這樣通過Excel服務器所錄入的憑證將直接保存到用友數據庫。
例子:多模版對應一個數據表
我們知到,針對同一個模版填制的若干表單對應于數據庫中同一個表中的記錄。再進一步,我們還可以使針對不同模版填制的若干表單對應于數據庫中同一個表中的記錄。
舉例來說,我們可以定義兩種模版:《入庫單》和《發貨單》,它們的格式不同,權限也不同,但可以使它們都對應于數據庫中的同一個表----出入庫單。填入入庫單的結果是向“出入庫單”表中寫入數據,填發貨單的結果也是向“出入庫單”表中寫入數據。
下面我們具體實現這個例子,從中您會對上節所述“數據錄入與存儲的分離”有更深刻的理解。
新建模版《成品入庫單》,信息如下:
項目
內容
報表編號
INV-001
報表名稱
成品入庫單
初始填報權限
部門:陽光乳業、儲運部
角色:Administrator、保管員
最終查閱權限
部門:陽光乳業、儲運部
角色:Administrator、保管員
其它
接受默認值
表樣:

Excel公式:
單元地址
公式
H5:H7
=F5*G5
H8
=SUM(H5:H7)
定義兩個數據表:出入庫單_主表、出入庫單_明細:
表名
出入庫單_主表
所在工作表
Sheet1
樣式
單一數據項
是否創建
是
主鍵
區域
字段名
數據類型
必填
填寫規范
其它
√
H3
單號
文字(20字以內)
√
出入庫單號
C2
日期
日期
√
當前日期
C3
來源去向
文字(100字以內)
√
部門名稱
C9
制單人
文字(20字以內)
√
當前用戶姓名
C12
單據類型
文字(20字以內)
√
不清空
C13
出入標志
整數
√
不清空
C8:F8
備注
文字(100字以內)
表名
出入庫單_明細
所在工作表
Sheet1
樣式
重復數據項、按行循環、可擴展
是否創建
是
主鍵
區域
字段名
數據類型
必填
填寫規范
其它
B5:B7
物料編碼
文字(20字以內)
√
C5:C7
物料名稱
名稱或地址
√
產品列表
D5:D7
規格型號
文字(100字以內)
E5:E7
單位
文字(20字以內)
√
F5:F7
數量
小數
√
G5:G7
單價
價格
√
H5:H7
金額
金額
定義表間公式:
名稱
應用時機
內容
提取產品信息
篩選條件改變后自動執行
提取<物料表>中滿足下列條件的數據:
<數據篩選: 物料表.物料名稱=本報表.Sheet1:物料名稱>
按以下方式填入<出入庫單_明細>:
物料表.物料編碼--->(填入值)物料編碼
物料表.物料名稱--->(按行(列)匹配)物料名稱
物料表.規格型號--->(填入值)規格型號
物料表.計量單位--->(填入值)單位
物料表.計劃價--->(填入值)單價
定義回寫公式:(定義回寫公式的操作方法參見第9章)
名稱
應用時機
內容
保存時增加庫存量
保存時
完成任務 [] 后刷新 [物料表] 中滿足如下條件的數據:
物料表.物料編碼 = 本報表.Sheet1:物料編碼
刷新方法:
當前庫存 = 物料表.當前庫存 + 本報表.Sheet1:數量
刪除時減少庫存量
刪除時
撤銷任務 [] 后刷新 [物料表] 中滿足如下條件的數據:
物料表.物料編碼 = 本報表.Sheet1:物料編碼
刷新方法:
當前庫存 = 物料表.當前庫存 - 本報表.Sheet1:數量
新建模版《發貨單》,信息如下:
項目
內容
報表編號
INV-002
報表名稱
發貨單
初始填報權限
部門:陽光乳業、儲運部
角色:Administrator、保管員
最終查閱權限
部門:陽光乳業、儲運部
角色:Administrator、保管員
其它
接受默認值
表樣:
Excel公式:
單元地址
公式
按以下步驟操作定義數據項。
1)選中單元格H2,C3:E3,H3,C8:F8,C12,C13
2)右擊鼠標,選擇彈出菜單“定義單一數據項”。
3)按[左側單元命名],點擊[下一步],如圖:

4)選中“對應到以下數據表中字段”,點擊[下一步],如圖:

5)依次單擊每行的字段名欄,從下拉列表中選擇區域對應的字段名,結果如圖:

6)點擊[完成]。
7)選中C2單元格,右擊鼠標,選擇彈出菜單[定義單一數據項]。
8)選[左側單元命名],點擊[下一步]。
9)選擇“添加到以下數據表”、“出入庫單_主表”,如下圖所示:

10)單擊表格中最后一行的字段名欄,將“訂單編號”改為“相關單據編號”,數據類型選擇“文字(20字以內)”,如下圖:

11)點擊[完成]
12)選擇菜單“模版à治理數據表”,設置“出入庫單_主表”的字段“單據類型”和“出入標志”為不清空。
按以下方法操作定義重復數據項:
1)選中單元區域B5:H7,右擊鼠標,選擇彈出菜單“定義重復數據項”。
2)在彈出窗口中選擇標題模式“按行”,上方標題行數為1,數據區域可向下擴展,入下圖所示,點擊[下一步]。

3)選擇“對應到以下數據表中字段”、“出入庫單_明細”,如下圖,點擊[下一步]。

4)依次選擇各個單元區域所對應得字段名,如下圖:

5)點擊[完成]。
定義表間公式:
名稱
應用時機
內容
構造訂單編號下拉列表
打開后自動執行
(初始填報)
提取<訂單_主表>中滿足下列條件的數據:
<數據篩選: 訂單_主表.審批意見='同意'
并且 訂單_主表.已發貨='否'>
按以下方式填入<出入庫單_主表>:
訂單_主表.訂單編號--->(構造下拉選項) 相關單據編號
提取訂單客戶名稱
篩選條件改變后自動執行
提取<訂單_主表>中滿足下列條件的數據:
<數據篩選: 訂單_主表.訂單編號=本報表.Sheet1:相關單據編號>
按以下方式填入<出入庫單_主表>:
訂單_主表.客戶名稱--->(填入值) 來源去向
提取訂單明細
篩選條件改變后自動執行
提取<訂單_明細>中滿足下列條件的數據:
<數據篩選: 訂單_明細.訂單號=本報表.Sheet1:相關單據編號>
按以下方式填入<出入庫單_明細>:
訂單_明細.產品編碼--->(填入值) 物料編碼
訂單_明細.產品名稱--->(填入值) 物料名稱
訂單_明細.規格--->(填入值) 規格型號
訂單_明細.計量單位--->(填入值) 單位
訂單_明細.數量--->(填入值) 數量
提取計劃價
篩選條件改變后自動執行
提取<物料表>中滿足下列條件的數據:
<數據篩選: 物料表.物料編碼=本報表.Sheet1:物料編碼>
按以下方式填入<出入庫單_明細>:
物料表.物料編碼 --->(按行(列)匹配) 物料編碼
物料表.計劃價 --->(填入值) 單價
定義回寫公式:(定義回寫公式的操作方法參見第9章)
名稱
應用時機
內容
保存時更新訂單狀態
保存時
完成任務 [] 后刷新 [訂單_主表] 中滿足如下條件的數據:
訂單_主表.訂單編號 = 本報表.Sheet1:相關單據編號
刷新方法:
已發貨 = '是'
刪除時更新訂單狀態
刪除時
撤銷任務 [] 后刷新 [訂單_主表] 中滿足如下條件的數據:
訂單_主表.訂單編號 = 本報表.Sheet1:相關單據編號
刷新方法:
已發貨 = '否'
保存時減少庫存
保存時
完成任務 [] 后刷新 [物料表] 中滿足如下條件的數據:
物料表.物料編碼 = 本報表.Sheet1:物料編碼
刷新方法:
當前庫存 = 物料表.當前庫存 - 本報表.Sheet1:數量
刪除時增加庫存
刪除時
撤銷任務 [] 后刷新 [物料表] 中滿足如下條件的數據:
物料表.物料編碼 = 本報表.Sheet1:物料編碼
刷新方法:
當前庫存 = 物料表.當前庫存 + 本報表.Sheet1:數量
第五節 如何保證外部數據的安全
通過Excel服務器引用外部數據源,某些用戶或許有疑慮。比如在上面的例子中,財務人員可能就會發出這樣的疑問:難道用友財務軟件的數據能夠被任意訪問嗎。事實上,假如采用恰當的安全措施,這樣的擔心就完全是多余的。
這些恰當的安全措施包括:
1)用友數據庫中建立一個全新的SQL Server帳戶,比如說叫visitor,設置該帳戶僅對部分表或視圖有權限。
2)在Excel服務器治理臺中注冊外部數據源時,以visitor帳戶(而不是sa帳戶)作為到用有數據庫的登錄賬戶。
3)在用友數據庫中,可針對需要訪問的數據建立視圖,在Excel服務器中注冊這些視圖,而不是注冊數據表本身。
4)注冊數據庫表或視圖時,設定正確的可讀權限,盡量不要設定可寫權限。
新聞熱點
疑難解答