
■ 陽 杰 黃昌勇
--------------------------------------------------------------------------------
《財(cái)會通訊》 2006年第11期
一、數(shù)據(jù)表化指令的理論基礎(chǔ)——三庫理論
對報(bào)表模塊而言,“三庫”即“三表”,即數(shù)據(jù)表、指令表和指標(biāo)表。數(shù)據(jù)表是提供編表所需數(shù)據(jù)源的表文件,主要是中央數(shù)據(jù)表,憑證月表有時(shí)也可以作為少數(shù)報(bào)表的數(shù)據(jù)源表,報(bào)表模塊可從中采集數(shù)據(jù)編表,而不必另行加工;指令表是編制會計(jì)報(bào)表的方法,表結(jié)構(gòu)固定有七個(gè)字段,其記錄就是編表指令,實(shí)現(xiàn)編表指令數(shù)據(jù)表化,以增強(qiáng)指令的可讀性和可擴(kuò)充性,指令可自行定義和編輯;指標(biāo)表提供報(bào)表上的指標(biāo)數(shù)據(jù),是報(bào)表模塊加工產(chǎn)生的目的數(shù)據(jù),其表結(jié)構(gòu)和記錄均由用戶自己定義和編輯。其中,數(shù)據(jù)表不必另行設(shè)計(jì),只要設(shè)計(jì)指令表和指標(biāo)表。為利于編表指令的定義、編輯和檢錯(cuò),每一個(gè)報(bào)表分別設(shè)計(jì)兩個(gè)表文件,即一個(gè)指令表和一個(gè)指標(biāo)表。
報(bào)表指令的數(shù)據(jù)表化設(shè)計(jì)思路,就是運(yùn)用“三庫理論”將編表指令存放在指令表中,使指令獨(dú)立于指標(biāo),同時(shí)又獨(dú)立于編表過程。所有報(bào)表的編制過程都是相同的,即所有報(bào)表的編制都執(zhí)行一個(gè)編表程序。數(shù)據(jù)表化指令認(rèn)為,各種報(bào)表結(jié)構(gòu)上的差異體現(xiàn)在各自的指標(biāo)表中,而編制方法上的差異則體現(xiàn)在指令上,其編制過程是完全相同的。因此,可以開發(fā)出全通用的報(bào)表模塊。
二、數(shù)據(jù)表化指令的工作原理和設(shè)計(jì)原則
指令表有七個(gè)字段,即“要求”、“類型”、“找數(shù)條件”、“源表字段”、“計(jì)算”、“報(bào)表記錄號”和“報(bào)表欄目”,分別反映打開源表、采集數(shù)據(jù)方法、運(yùn)算方法和填表位置。
無論是到源表還是到指標(biāo)表本身采集數(shù)據(jù),都相當(dāng)于執(zhí)行了一條SUM命令,“找數(shù)條件”字段將提供SUM命令中FOR條件短語的參數(shù),而“源表字段”則提供了SUM命令中被求和的N型字段名。即:
SUM ALL源表字段TO TBSI FOR找數(shù)條件
根據(jù)指令的填表位置參數(shù)將產(chǎn)生填表行動(dòng),相當(dāng)于執(zhí)行了一條REPLACE命令,“報(bào)表記錄號”字段提供了指標(biāo)表記錄指針移動(dòng)的準(zhǔn)確位置,“報(bào)表欄目”則提供了REPLACE命令指定的N型操作字段,采集的數(shù)據(jù)還提供了REPLACE命令中的表達(dá)式。即:
GOTO報(bào)表記錄號
REPLACE報(bào)表欄目WITH TBSI
可以看出,這七個(gè)字段相互配合可實(shí)現(xiàn)很強(qiáng)的編表功能,編制高難度會計(jì)報(bào)表;可完成費(fèi)用分配、成本計(jì)算等;還可配合采用表格輸入法進(jìn)行憑證數(shù)據(jù)的自動(dòng)錄入;上級主管部門甚至可以對所屬單位同結(jié)構(gòu)的報(bào)表匯總;還可利用表中指令執(zhí)行命令或運(yùn)行自定義函數(shù)采集數(shù)據(jù)編表,這實(shí)際上包括了程序化指令的設(shè)計(jì)思路。數(shù)據(jù)表化指令的可讀性較強(qiáng),用戶可以自行定義和編輯,自主擴(kuò)充新的報(bào)表編制。相對傳統(tǒng)報(bào)表指令設(shè)計(jì)思路,數(shù)據(jù)表化指令在指令的可讀性、可擴(kuò)充性等方面較為優(yōu)越。
指令設(shè)計(jì)必須遵循三大原則:一是指令要獨(dú)立,不能與程序或函數(shù)代碼混在一起,也不能存放在其他數(shù)據(jù)表中;二是指令要有賴以表達(dá)的附著物,該附著物要十分有利于指令的定義、編輯、檢錯(cuò)、執(zhí)行和閱讀,憑證表、命令程序和自定義函數(shù)等都不是理想的附著物;三是指令要具有高度的可讀性,使用戶容易看懂,從而掌握靈活運(yùn)用報(bào)表模塊的主動(dòng)權(quán)。
三、指令表結(jié)構(gòu)設(shè)計(jì)
(1)“要求”字段。類型為N,寬度為2.0,賦值范圍是數(shù)值0到14.各數(shù)值代表的含義如下:“0”表示無要求;“1到12”是指定月份才使用的指令;“13”是每次填表都要使用的指令;“14”字段指定打開源表,表名放入“源表字段”,如源表是余額表,可放人余額樣板表“YE.DBF”,其“找數(shù)條件”字段可增加對源表進(jìn)行篩選的邏輯條件;利“I”類型的Visual FoxPro的拷貝命令生成新的源表,然后再用要求14將其打開,從中取數(shù)填表,以提高編表速度。
(2)“類型”字段。類型為C,寬度為l,賦值范圍為A/B/C/D/E/F/G/H/I/J十種填表類型。各填表類型的含義如下:
A——對指標(biāo)表中指定的填列字段清零,即清除表中上次填列的數(shù)值,以便本次重新填列;
B——要求14指定打開的源表中采集數(shù)據(jù)填表,主要用于指標(biāo)表中那些原始填列項(xiàng)目;
C——到指標(biāo)表本身采集數(shù)據(jù)填表,主要用于指標(biāo)表中那些以表填表的填列項(xiàng)目;
D——將指標(biāo)表中已經(jīng)填上去年的數(shù)值變號,相當(dāng)于乘以-1;
E——對指標(biāo)表進(jìn)行平衡或相等檢查;
F——對指標(biāo)表的某些填列字段進(jìn)行橫向求和,主要用于需要橫向計(jì)算填列的項(xiàng)目;
G——將數(shù)值表達(dá)式的值填到指標(biāo)表的指定位置,主要用于配合調(diào)用自定義函數(shù)編表;
H——將指標(biāo)表指定字段的上期數(shù)據(jù)累加本期數(shù)據(jù),然后填入本期指標(biāo)表;
I——執(zhí)行Visual FoxPro命令,如GOTO、COPY等,可用該類型調(diào)用自定義函數(shù);
J——填列指標(biāo)表中的上年同期數(shù)據(jù)。
(3)“找數(shù)條件”字段。類型為C,寬度為30,賦值邏輯表達(dá)式或“*”號開頭的注釋內(nèi)容。B類型的邏輯條件針對源表;A/C/D/E類的邏輯條件針對指標(biāo)表本身;F類型和G類型的邏輯條件中為一個(gè)數(shù)值表達(dá)式;I類型的邏輯條件為一條VFP的命令。邏輯條件可用分號作續(xù)行標(biāo)志;還可用“*”號開頭作注釋。
(4)“源表字段”字段。類型為C,寬度為12,賦值提供數(shù)據(jù)的N型字段名。B類型的源表字段是打開源表中的一個(gè)數(shù)值型字段;C類型的源表字段是指標(biāo)表本身的一個(gè)數(shù)值型字段變量,其余類型可不賦值。
(5)“計(jì)算”字段。類型為C,寬度為1,賦值范圍是“+”、“-”、“*”、“/”或“=”運(yùn)算符,表示上一條指令找到的數(shù)將與本指令找到的數(shù)進(jìn)行計(jì)算,默認(rèn)計(jì)算為“+”。上一條指令采集的數(shù)是被減數(shù)或被除數(shù),本指令采集的數(shù)是減數(shù)或除數(shù);或本指令找到的數(shù)要與指標(biāo)表中指定的數(shù)據(jù)相等。檢查E類型指令相等用“=”。可用若干指令連續(xù)進(jìn)行計(jì)算,再將最終計(jì)算結(jié)果填入表中。
(6)“報(bào)表記錄號”字段。類型為N,寬度為4.0,賦值指標(biāo)表中的一個(gè)記錄號,用來指定填表的記錄號位置。當(dāng)指定的報(bào)表記錄號大于零時(shí),就產(chǎn)生一次填表行動(dòng),填到“報(bào)表欄目”指定的字段;等于零時(shí)則不填表,并配合“計(jì)算”進(jìn)行運(yùn)算,為后面的填表指令作準(zhǔn)備。
(7)“報(bào)表欄目”字段。類型為C,寬度為12,賦值指標(biāo)表中的一個(gè)數(shù)值型字段變量,用于指定填表的字段位置?!皥?bào)表記錄號”和“報(bào)表欄目”相配合可唯一指定指標(biāo)表中的一個(gè)填表位置。
每一個(gè)報(bào)表指令表中的記錄一般都比較多,這些指令在表中的存放位置具有一定的規(guī)則,報(bào)表項(xiàng)目的相互依存性決定了指令記錄的存放順序。一般而言,以“*”號開頭的注釋指令可放在表中的任意位置;要求“14”要放在有關(guān)指令之前;要求“1”到“13”一般按順序存放;在此基礎(chǔ)上再按A、B、C、D、E等類型指令排列??偟脑瓌t是:先填數(shù)或先操作的指令要放在先,后填數(shù)或后操作的指令要放在后,一個(gè)指令表只存放一個(gè)指標(biāo)表的編表指令。
四、數(shù)據(jù)表化指令工作流程
數(shù)據(jù)表化指令在執(zhí)行時(shí)一般使用三個(gè)工作區(qū):一號工作區(qū)打開指令表,以便順序執(zhí)行表中的所有指令,執(zhí)行時(shí)會跳過注釋指令;根據(jù)要求“14”指令,在二號工作區(qū)打開源表,為采集數(shù)據(jù)作好準(zhǔn)備;執(zhí)行指令采集數(shù)據(jù),填在三號工作區(qū)打開的指標(biāo)表內(nèi)。對某些需要填列上年同期數(shù)的報(bào)表,還可在四號工作區(qū)打開上年同期的指標(biāo)表,該指標(biāo)表是在編制上年同期報(bào)表時(shí)由系統(tǒng)自動(dòng)生成,然后從中采集數(shù)據(jù)填到三號工作區(qū)的指標(biāo)表中。
(編輯 熊年春)