[摘 要]本文通過對設計環境、批命令程序編制及執行過程的描述,系統說明了怎樣在用友U8.70版本下,通過設計批命令,快速靈活地實現跨年多月調取不同層級會計科目的對應數據,以及對程序執行效果有影響的相關注意事項。
[關鍵詞]設計環境;批命令;字段 注釋
doi:10.3969/j.issn.1673-0194.2009.16.005
[中圖分類號]F232[文獻標識碼]A[文章編號]1673-0194(2009)16-0016-03
在用友財務系統中,當涉及提取幾年數據或多個月份數據時,無論是進入系統逐期輸出數據,還是在UFO表中定義公式取數都不是很容易處理。怎樣才能實現快速靈活地在不同賬套跨年多月取數呢?設計批命令是一個不錯的選擇。
一、設計環境
(1)財務系統是用友U8.70版本。
(2)財務系統中會計科目編號中損益類編號第一位數是5,資產類編號第一位數是1, 成本類編號第一位數是4, 負債類編號第一位數是2, 權益類編號第一位數是3。
(3)編制名為“科目表”的Excel表格,建立KMB(見圖1)、 2005、 2006、 2007、2008(見圖2)5張報表(KMB是程序引用字段出處,后4張表中內容是從006賬套中輸出的2005-2008每年的1~6級全部會計科目編碼及科目名稱,KMB中字段需要從后4張表中復制,直接輸入字段不能使用)。
(4)當擬取不同賬套數時,會計科目編碼及名稱應從相應賬套輸出,表中編碼從006賬套輸出,只能用于006賬套取數。“科目表.XLS”保存路徑為C:\\\\ 科目表.XLS。
(5)批命令的設計取數年數為2005-2008年,可根據實際對程序及“科目表”字段進行改變。
(6)批命令可在Excel中結合文本函數CONCATENATE()和查找替換命令編制,然后拷貝到UDEDIT中,非常快捷。


二、程序設計
在用友U8.70財務系統UFO表中打開UFEDIT,輸入以下命令(//后是注釋):
LET PASSWORD=GETSTR(\"請輸入口令:\")
IF PASSWORD=\"000\"http://第一個IF語句,進入口令
DESIGN//格式狀態
FREE ALL
INSERT G,30//在G列后插入30列,據實可調
INSERT #5,500
TYPE A1:A500, S//注意定義成字符格式,否則會出錯
TYPE B1:B500, S
TYPE c1:AD3, S
TYPE C4:AD500,D//定義數字格式
DRAW A1:AD500,D
VAREA S,#4//定義行可變區
DATA//進入數據狀態
LET ZTH=GETSTR(\"請輸入賬套號006或其他:\")//選取賬套,賬套對應字段應在科目表已定義
LET YEAR=GETINT(\"請選擇輸入年份2005-2008:\") //第二個IF語句,選擇年份
IF YEAR=2005
LET KMBMC=\"2005科目名稱\"
LET KMBBH=\"2005編號\"
ELSE
IF YEAR=2006
LET KMBMC=\"2006科目名稱\"
LET KMBBH=\"2006編號\"
ELSE
IF YEAR=2007
LET KMBMC=\"2007科目名稱\"
LET KMBBH=\"2007編號\"
ELSE
LET KMBMC=\"2008科目名稱\"
LET KMBBH=\"2008編號\"
END
END
END
LET A1=\"取數表\" //設計取數表,效果圖見圖3
LET A2=\"月份\"
LET A3=\"項目月份\"
LET B3=\"科目名稱\"
let c2=\"1\"
let d2=\"1\"
let e2=\"2\"
let f2=\"2\"
………//按順序在G2:X2中賦值3至11,表示月份,見圖3,此處略
let y2=\"12\"
let z2=\"12\"
let c3=\"數量\"
let d3=\"金額\"
…………//按順序在G2:X2中賦值”金額”、“數量”,效果見圖3,此處略
let y3=\"數量\"
let z3=\"金額\"
LET COL=2//將初始列定為2
LET ROW=4//將初始行定為4
LET HANGSHU=GETINT(\"請輸入取數行數:\")
LET YUEFEN=GETINT(\"請輸入取數月數1至12:\")//確定需取數月份
WHILE ROW<(HANGSHU+4)//第一個WHILE語句,主要控制行標
LET BIANN=ROW-3
LET !COL#ROW= INDB(\"C:\\\\科目表.xls\",\"KMB$\",KMBMC,BIANN,)//從科目表取科目名稱字段
LET !(COL-1)#ROW=INDB(\"C:\\\\科目表.xls\",\"KMB$\",KMBBH,BIANN,)//取編號字段
LET KMBH=TRIM(!(COL-1)#ROW )
LET YUE=4
WHILE YUE<(YUEFEN*2+4)//取數列變化
let y=val(!YUE#2)//取數月份變化
IF SUBSTR(KMBH,1,1)=\"5\"http://損益類發生數,第三個IF語句
let !YUE#ROW=FS(KMBH,y,\"借\",ZTH,YEAR,,,) //方向為借,記賬后取數
let !(YUE-1)#ROW=sFS(KMBH,y,\"借\",ZTH,YEAR,,,)
ELSE
IF SUBSTR(KMBH,1,1)=\"1\" //資產類取期末數,第4個IF語句
let !YUE#ROW=QM(KMBH,y,\"\",ZTH,YEAR,,,)//不填取數方向
let !(YUE-1)#ROW=SQM(KMBH,y,\"\",ZTH,YEAR,,,)
ELSE
IF SUBSTR(KMBH,1,1)=\"4\" //成本類取期末數,第5個IF語句
let !YUE#ROW=QM(KMBH,y,\"\",ZTH,YEAR,,,)
let !(YUE-1)#ROW=SQM(KMBH,y,\"\",ZTH,YEAR,,,)
ELSE
let !YUE#ROW=QM(KMBH,y,\"\",ZTH,YEAR,,,)
let !(YUE-1)#ROW=SQM(KMBH,y,\"\",ZTH,YEAR,,,)
END //第5個IF結束
END//第4個IF結束
END //第3個IF結束
let YUE=YUE+2
END
LET ROW= ROW+1//行標增加
END//第一個WHILE結束
DISPLAY\"取數成功!\"
LET BAOCHUN=GETSTR(\"是否保存表,是Y,否N:\")//保存表
IF BAOCHUN=\"Y\"
SAVE AS \"取數表\"
ELSE
BREAK
END
ELSE
DISPLAY\"密碼錯誤!\"
BREAK
END//第一個IF語句結束
三、程序執行
把此批命令保存名為“取數程序.SHL”,保存。
測試:在UFO中打開一個新報表,從執行對話框中選中“取數程序.SHL”,輸入口令000,賬套006,年份2008,行數輸入1,即實現取數。
