亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        記賬憑證輸入模塊的設(shè)計(jì)與實(shí)現(xiàn)

        2007-12-31 00:00:00李國紅
        中國管理信息化 2007年12期

        [摘 要] 本文以Microsoft Visual FoxPro 6.0為關(guān)系數(shù)據(jù)庫管理系統(tǒng),分析探討了記賬憑證輸入模塊設(shè)計(jì)與實(shí)施的過程與方法,并提供了相應(yīng)的程序代碼。

        [關(guān)鍵詞] 管理信息系統(tǒng);記賬憑證;信息輸入;VFP程序設(shè)計(jì)

        [中圖分類號]F232[文獻(xiàn)標(biāo)識碼]A[文章編號]1673-0194(2007)12-0003-06

        記賬憑證輸入是電算化會計(jì)信息系統(tǒng)的一種極為重要的操作,輸入數(shù)據(jù)的正確性將直接關(guān)系到登記明細(xì)賬、現(xiàn)金日記賬、銀行存款日記賬及總賬的正確性,是保證正確輸出會計(jì)報(bào)表、賬簿數(shù)據(jù)的關(guān)鍵。本文將以Microsoft Visual FoxPro 6.0(以下簡稱VFP)數(shù)據(jù)庫管理系統(tǒng)為系統(tǒng)開發(fā)環(huán)境,闡明記賬憑證輸入模塊的設(shè)計(jì)與實(shí)現(xiàn)方法,本文所述程序已在VFP中運(yùn)行通過。本文的設(shè)計(jì)在功能上有如下特點(diǎn):①程序運(yùn)行后立即顯示數(shù)據(jù)庫中最后一張記賬憑證,以便確定下一張待輸入憑證的憑證號;②記賬憑證輸入界面與實(shí)際單據(jù)相似,符合用戶習(xí)慣;③輸入憑證號立即顯示數(shù)據(jù)庫中已存在的對應(yīng)憑證,如顯示為空白則表示憑證號可作為新憑證的憑證號進(jìn)行輸入;④可以在同一輸入界面輸入和顯示一借一貸、一借多貸、多借一貸、多借多貸等憑證;⑤未審核的憑證允許修改,但已審核憑證禁止修改;⑥同一憑證輸入時,憑證號只需輸入一次,日期自動取憑證輸入當(dāng)天的系統(tǒng)日期,“科目”與“借貸”項(xiàng)目可通過下拉組合框中的列表項(xiàng)選??;⑦命令按鈕在必要時呈灰色(無效狀態(tài));⑧借貸不平衡的輸入信息不允許保存;⑨輸入不符合要求或操作失誤時會有必要的信息提示。

        1 設(shè)計(jì)與建立數(shù)據(jù)表

        記賬憑證中的數(shù)據(jù)包括憑證號、日期、摘要、科目、借貸、金額、附件張數(shù)、審核、制單等信息。為保證記賬憑證信息完整有效和降低數(shù)據(jù)冗余,使信息存儲結(jié)構(gòu)更加合理,需在指定目錄或默認(rèn)目錄下建立記賬憑證附表jzpzfb.dbf和記賬憑證主表jzpzzb.dbf。這兩個數(shù)據(jù)表的結(jié)構(gòu)為jzpzfb.dbf{pzh(C4),rq(D8),fjzs(N2.0),sh(C8),zd(C8)}、jzpzzb.dbf{pzh(C4),zy(C20),km(C9),jd(C2),je(N12.2)}。其中,字段pzh、rq、fjzs、sh、zd分別對應(yīng)于憑證號、日期、附件張數(shù)、審核、制單,字段zy、km、jd、je對應(yīng)于摘要、科目、借貸、金額,C、D、N分別表示字符型、日期型、數(shù)值型,數(shù)字表示字段寬度,小數(shù)點(diǎn)右邊的數(shù)字表示小數(shù)位數(shù)。例如,je(N12.2)表示“金額”字段je,寬度為12位,小數(shù)位占2位。

        另外,由于記賬憑證中的科目(字段km的值)必須是會計(jì)科目表中存在的科目,在輸入科目時必須以會計(jì)科目表為依據(jù)。假設(shè)會計(jì)科目表的文件名為kjkm.dbf,其表結(jié)構(gòu)為kjkm.dbf{kmbh(C9),kmmc(C36),jdfx(C1),qcye(N12.2)},其中,字段kmbh、kmmc、jdfx、qcye分別表示科目編號、科目名稱、借貸方向、期初余額,表中已保存有全部科目的相關(guān)信息。應(yīng)確保文件kjkm.dbf與jzpzfb.dbf、jzpzzb.dbf在同一文件夾內(nèi)。

        2 設(shè)計(jì)與建立用戶輸入界面

        2. 1設(shè)計(jì)與創(chuàng)建表單

        按照輸入設(shè)計(jì)的原則和要求設(shè)計(jì)記賬憑證輸入界面,并用VFP建立與輸入界面對應(yīng)的表單,如圖1所示。輸入界面的格式與實(shí)際的記賬憑證格式基本一致(或相似),Text1至Text6是各文本框的Name屬性,其中Text1至Text5文本框分別對應(yīng)于jzpzfb中的各字段,Text6文本框用于接收從鍵盤輸入的憑證號數(shù)據(jù),Text1中的憑證號在程序運(yùn)行時自動取值為Text6中的數(shù)據(jù);表格(默認(rèn)Name屬性為Grid1)中各欄對應(yīng)于jzpzzb中的各字段,表格中的憑證號在程序運(yùn)行時自動取值為Text1中的數(shù)據(jù);命令按鈕“新增憑證”、“輸入分錄”、“確定”、“取消”、“關(guān)閉”用于輸入過程中實(shí)現(xiàn)相應(yīng)的操作。

        2. 2建立關(guān)聯(lián)

        2. 2. 1創(chuàng)建數(shù)據(jù)環(huán)境并建立表間聯(lián)系

        建立數(shù)據(jù)環(huán)境(Name屬性默認(rèn)為Dataenvironment),將數(shù)據(jù)表文件jzpzfb.dbf、jzpzzb.dbf、kjkm.dbf添加至數(shù)據(jù)環(huán)境,這時數(shù)據(jù)環(huán)境中這3個表的Alias屬性分別為jzpzfb、jzpzzb、kjkm,通過屬性窗口將它們的Name屬性分別設(shè)置為Cursor_JZPZFB、Cursor_JZPZZB、Cursor_KJKM(以便在后面的程序代碼中使用)。然后在數(shù)據(jù)環(huán)境窗口按住鼠標(biāo)左鍵不放,將jzpzfb的pzh字段拖動到j(luò)zpzzb的pzh字段,可建立兩表之間的永久關(guān)系。

        這樣,在表單啟動后,數(shù)據(jù)環(huán)境中的數(shù)據(jù)表jzpzfb、jzpzzb和kjkm將自動打開(表單關(guān)閉時這些數(shù)據(jù)表也會自動關(guān)閉),同時,數(shù)據(jù)表jzpzzb中的記錄指針將隨著jzpzfb中指針的移動而移動,jzpzzb中的指針指向與jzpzfb的pzh(憑證號)相匹配的記錄。

        2. 2. 2表單各文本框與相應(yīng)數(shù)據(jù)表的字段建立對應(yīng)關(guān)系

        為使表單上各文本框與jzpzfb中各字段建立關(guān)聯(lián),將文本框Text1、Text2、Text3、Text4、Text5的ControlSource屬性分別設(shè)置為:jzpzfb.pzh、jzpzfb.rq、jzpzfb.fjzs、jzpzfb.sh、jzpzfb.zd。這樣,表單運(yùn)行后,這些文本框?qū)⒎謩e顯示jzpzfb中當(dāng)前指針?biāo)傅挠涗浶畔ⅰ?/p>

        2. 2. 3表格控件與相應(yīng)數(shù)據(jù)表建立對應(yīng)關(guān)系

        為使表格與jzpzzb建立關(guān)聯(lián),應(yīng)將表格控件(默認(rèn)的Name屬性為Grid1)的RecordSourceType屬性設(shè)置為“1-別名”(不包括引號),同時將表格的RecordSource屬性設(shè)置為jzpzzb。用鼠標(biāo)右鍵單擊Grid1表格,在彈出的快捷菜單中單擊“生成器”,再在彈出的“表格生成器”對話框中設(shè)置成如圖1所示的表格欄目及其標(biāo)題。這樣,表格中各欄對應(yīng)的ControlSource屬性自動設(shè)置成為jzpzzb中相應(yīng)的字段,如表1所示。為便于后面的程序引用,將表格各欄對應(yīng)的Name屬性也按表1進(jìn)行設(shè)置。

        表格中的“科目”及“借貸”欄的組合框控件是按下述方法添加上去的:①用鼠標(biāo)右鍵單擊表格,在出現(xiàn)的快捷菜單中選擇執(zhí)行“編輯”項(xiàng),則表格四周出現(xiàn)粗框,表明處于編輯狀態(tài)。②用鼠標(biāo)左鍵單擊選中“表單控件”工具欄的組合框控件,然后再單擊表格中的“科目”欄,就在屬性窗口出現(xiàn)了一個Combo1組合框?qū)ο?,其ControlSource屬性自動設(shè)置為jzpzzb.km。③為便于理解和使用,將Combo1的Name屬性改為ComboKM,這樣ComboKM的ControlSource屬性就自動成為jzpzzb.km。④在屬性窗口將科目欄column_KM的CurrentControl屬性設(shè)置為ComboKM,就可以看到在表格的“科目”欄添加了組合框ComboKM。用同樣方法在表格的“借貸”欄添加一個Name屬性為ComboJD的組合框控件,借貸欄column_JD的CurrentControl屬性為ComboJD,而ComboJD的

        ControlSource屬性為jzpzzb.jd。表格中各欄的屬性設(shè)置如表1所示。

        表單啟動后,在輸入或修改憑證時,單擊“科目”欄的組合框,在下拉列表中應(yīng)顯示kjkm表中的全部科目編號與對應(yīng)的科目名稱,可以選擇輸入相應(yīng)的科目編號(輸入的科目必須是在kjkm表中存在的科目);單擊“借貸”欄的組合框,可在下拉列表選擇輸入“借”或“貸”。為達(dá)此目的,在設(shè)計(jì)時,應(yīng)在屬性對話框按表2進(jìn)行相應(yīng)屬性的設(shè)置。其中,Name屬性指定了在代碼中用于引用的組合框控件的名稱,RowSourceType屬性指定組合框控件中數(shù)據(jù)值的源的類型,RowSource屬性指定組合框控件中數(shù)據(jù)值的源,而ColumnCount屬性指定組合框的下拉列表中列的數(shù)目,它應(yīng)與RowSource屬性所做的設(shè)置相對應(yīng)。

        為便于后面的程序引用,將表格“憑證號”欄、“摘要”欄及“金額”欄的文本框控件對應(yīng)的Name屬性分別設(shè)置為TextPZH、TextZY、TextJE,如表3所示。

        經(jīng)過上述設(shè)置后,圖1所示的表單在運(yùn)行時,表格內(nèi)將顯示jzpzzb中與jzpzfb的當(dāng)前記錄相匹配的所有記錄,表單其余部分將顯示jzpzfb中當(dāng)前指針?biāo)赶虻挠涗?,如果記錄指針指向文件尾,則表單中不顯示任何記錄。

        2. 3日期型及數(shù)值型文本框的處理

        Text2中的數(shù)據(jù)應(yīng)為輸入憑證的當(dāng)天日期,數(shù)據(jù)類型為日期型,需要在“屬性”對話框?qū)⑵銿alue屬性設(shè)置為“=date()”(不含引號),這樣,Text2就被設(shè)置為日期型文本框,并且運(yùn)行時自動顯示為系統(tǒng)當(dāng)前日期。

        Text3中的數(shù)據(jù)是憑證的附件張數(shù),數(shù)據(jù)類型為數(shù)值型,且對應(yīng)于數(shù)據(jù)表jzpzfb的fjzs字段,數(shù)據(jù)位數(shù)不超過兩位。可以使用鼠標(biāo)右鍵單擊Text3控件,在出現(xiàn)的快捷菜單中選擇執(zhí)行“生成器”項(xiàng),再利用彈出的“文本框生成器”對話框?qū)?shù)據(jù)類型設(shè)置成為“數(shù)值型”,并將輸入掩碼設(shè)置為“99”(不含引號)。這樣就將Text3的數(shù)據(jù)類型設(shè)置成“數(shù)值型”,并且只允許在其中輸入1位或2位的整數(shù)值。

        3 輸入功能的實(shí)現(xiàn)

        3. 1設(shè)置表單緩沖方式

        在屬性窗口將表單的BufferMode屬性設(shè)置為:2-開放式,可將緩沖方式指定為開放式更新記錄方式。這種緩沖方式可使編輯時記錄不鎖定,而當(dāng)使用tableupdate()將記錄寫向磁盤時,VFP試圖鎖定記錄。這樣設(shè)置,才能保證3.5.3節(jié)所述單擊“確定”按鈕以保存憑證、3.5.4節(jié)所述單擊“取消”按鈕以取消憑證輸入或更新的程序在運(yùn)行時不會出錯。

        3. 2建立命令按鈕狀態(tài)方法程序

        為盡可能避免誤操作,應(yīng)將運(yùn)行過程中不必使用的命令按鈕設(shè)置為無效,命令按鈕只有需要使用時才設(shè)置為有效。根據(jù)對不同運(yùn)行階段各按鈕有效與無效狀態(tài)的分析可知,本輸入模塊共有3種不同的命令按鈕組合狀態(tài),這3種組合狀態(tài)在程序中多處使用。為減少程序代碼,提高代碼的重用性,可新建3個方法程序,每個方法程序代表一種命令按鈕組合狀態(tài),可以作為方法在程序中被使用。通過執(zhí)行VFP“表單”菜單下的“新建方法程序”,分別建立buttonstatus1、buttonstatus2和buttonstatus3命令按鈕方法程序,再在屬性窗口分別雙擊buttonstatus1、buttonstatus2、buttonstatus3,在彈出的代碼編輯窗口輸入相應(yīng)功能的過程代碼即可。為便于引用各命令按鈕,在輸入代碼前先將“新增憑證”、“輸入分錄”、“確定”、“取消”、“關(guān)閉”按鈕的Name屬性分別設(shè)置為xzpz、srfl、qd、qx、gb。命令按鈕狀態(tài)方法程序的3個過程代碼及效果如表4所示。

        3. 3表單初始化

        表單啟動時,完成初始化設(shè)置,包括關(guān)閉會話方式并設(shè)置為精確比較方式;表單釋放時,恢復(fù)其默認(rèn)的設(shè)置。分別在表單的Load、Unload過程中輸入相應(yīng)的代碼即可,如表5所示。

        表單啟動后,應(yīng)使“新增憑證”、“關(guān)閉”按鈕呈有效狀態(tài),使“輸入分錄”、“確定”、“取消”按鈕呈無效狀態(tài),可利用thisform.buttonstatus1實(shí)現(xiàn);同時,如數(shù)據(jù)表有記錄,則表單顯示最后一條記錄,以便輸入新記錄時確定一個新的不重復(fù)的憑證號(輸入記錄時,一般按憑證號由小到大的順序輸入),可選擇jzpzfb所在的工作區(qū),指針指向末記錄。為達(dá)此目標(biāo),可在表單的Init過程中輸入相應(yīng)的VFP代碼。表單的Init過程代碼對應(yīng)如下,其中表示行后注釋,注釋可以不出現(xiàn)在程序中。

        thisform.buttonstatus1“新增憑證”、“關(guān)閉”按鈕有效,其余按鈕無效

        sele(thisform.dataenvironment.cursor_JZPZFB.alias)

        選擇jzpzfb所在工作區(qū)

        go bott指針指向末記錄

        3. 4Text6文本框內(nèi)容變化的處理

        Text6文本框中的內(nèi)容(憑證號)任何時候發(fā)生變化,都應(yīng)在jzpzfb所在的工作區(qū)查找有無與Text6中的憑證號匹配的記錄,如有匹配,則立即在表單中顯示出匹配的記賬憑證;如無匹配的記錄則表單上相應(yīng)的文本框及表格控件中將不顯示任何值,這時可將Text6中的內(nèi)容作為憑證號進(jìn)行新憑證的輸入。為實(shí)現(xiàn)這種功能,可在Text6的Interactive Change過程中輸入相應(yīng)的代碼,Interactive

        Change過程在用戶利用鍵盤或鼠標(biāo)更改控件的值時發(fā)生。由于按2.2.1節(jié)進(jìn)行設(shè)置后,jzpzzb中的記錄指針將隨著jzpzfb中指針的移動而指向相匹配的記錄,因此用refresh方法刷新表單即可顯示出匹配的憑證,而無匹配記錄時則顯示為空白。Text6文本框的InteractiveChange過程代碼如下:

        sele( thisform.dataenvironment.cursor_JZPZFB.alias )選擇jzpzfb所在工作區(qū)

        locate for allt(pzh)=allt(thisform.text6.value)定位到與Text6中匹配的記錄或文件尾

        thisform.refresh刷新表單

        3. 5輸入憑證處理

        3. 5. 1單擊“新增憑證”按鈕以增加一個憑證

        單擊“新增憑證”按鈕,如果Text6文本框中無輸入憑證號,則提示“請輸入新增憑證的憑證號!”;如果輸入Text6中的憑證號已存在于jzpzfb中,則提示“已存在此憑證號的憑證!”;如果輸入至Text6中的憑證號是一個新的憑證號(在jzpzfb中尚不存在該憑證號),則在jzpzfb中增加一條空白記錄,然后使Text1中的值自動變?yōu)門ext6中的值,再將Text6中的內(nèi)容清空并將Text6的ReadOnly屬性設(shè)置為

        .t.,使Text2中的日期自動成為當(dāng)前系統(tǒng)的日期,刷新表單即可。應(yīng)注意各命令按鈕的有效和無效狀態(tài)?!靶略鰬{證”按鈕的Click事件對應(yīng)的VFP程序代碼如下:

        if len(allt(thisform.text6.value))<>0如果Text6中輸入了憑證號

        sele ( thisform.dataenvironment.cursor_JZPZFB.alias ) 選擇jzpzfb所在工作區(qū)

        locate for allt(pzh)=allt(thisform.text6.value) 查找jzpzfb中是否有匹配的憑證號

        if .not.found() 如果輸入至Text6中的憑證號是一個新的憑證號

        thisform.buttonstatus2“輸入分錄”、“取消”按鈕有效,其余按鈕無效

        append blank在jzpzfb中追加一條空記錄

        thisform.text1.value=thisform.text6.value Text1文本框自動取Text6中的值

        thisform.text6.value=space(0) Text6中的內(nèi)容清空

        thisform.text6.readonly=.t. Text6的ReadOnly屬性設(shè)置為.t.

        thisform.text2.value=date() Text2中自動取值為系統(tǒng)當(dāng)前日期

        thisform.refresh刷新表單

        else如果輸入Text6中的憑證號已存在于jzpzfb中

        thisform.buttonstatus1“新增憑證”、“關(guān)閉”按鈕有效,其余按鈕無效

        =messagebox(\"已存在此憑證號的憑證!\",48)提示對話框

        thisform.text6.setfocus Text6文本框獲得焦點(diǎn)

        endif

        else如果Text6中還未輸入憑證號

        thisform.buttonstatus1“新增憑證”、“關(guān)閉”按鈕有效,其余按鈕無效

        =messagebox(\"請輸入新增憑證的憑證號!\",48)提示對話框

        thisform.text6.setfocus Text6文本框獲得焦點(diǎn)

        endif

        3. 5. 2單擊“輸入分錄”按鈕以進(jìn)行憑證的輸入

        如果Text6文本框中已輸入符合要求的憑證號,再單擊“新增憑證”按鈕,那么“輸入分錄”和“取消”按鈕呈有效狀態(tài),其他按鈕為無效按鈕。這時,如果單擊“輸入分錄”按鈕,程序應(yīng)選擇jzpzzb所在的工作區(qū),并追加一條空白記錄,然后將pzh字段的值用表單上Text1控件中的值替換,刷新表格Grid1,以便通過鍵盤輸入此表格所示的其余字段的值,最后使各命令按鈕呈buttonstatus3所確定的狀態(tài)(“輸入分錄”、“確定”、“取消”有效;“新增憑證”、“關(guān)閉”無效)?!拜斎敕咒洝卑粹o的Click事件對應(yīng)的VFP代碼如下:

        sele (thisform.dataenvironment.cursor_JZPZZB.alias)

        appe blank

        replace pzh with thisform.text1.value

        thisform.grid1.refresh

        thisform.buttonstatus3

        3. 5. 3單擊“確定”按鈕以保存憑證

        輸入至表單上的數(shù)據(jù),需要單擊“確定”按鈕保存至jzpzzb.dbf和jzpzfb.dbf文件,或者單擊“取消”按鈕放棄數(shù)據(jù)的輸入或更新操作。

        單擊“確定”按鈕,應(yīng)充分考慮數(shù)據(jù)輸入的容錯功能,即輸入至表單的數(shù)據(jù)不符合要求時,不能進(jìn)行保存操作,并應(yīng)當(dāng)有相應(yīng)的提示信息,只有符合要求的數(shù)據(jù)才真正保存在jzpzzb.dbf和jzpzfb.dbf文件。單擊“確定”按鈕執(zhí)行的操作過程如圖2所示。

        “確定”按鈕的Click事件對應(yīng)的VFP代碼如下:

        sele (thisform.dataenvironment.cursor_JZPZZB.alias)

        set filter to allt(pzh)=allt(thisform.text1.value)

        locate for len(allt(km))=0

        if .not. found()

        locate for len(allt(jd))=0

        if .not. found()

        locate for je=0.00

        if .not. found()

        store 0.00 to je_jie,je_dai

        sum je to je_jie for allt(jd)='借'

        sum je to je_dai for allt(jd)='貸'

        if je_jie=je_dai

        if len(allt(thisform.text5.value))<>0

        sele (thisform.dataenvironment.cursor_JZPZFB.alias)=tableupdate(.t.)

        sele (thisform.dataenvironment.cursor_JZPZZB.alias)=tableupdate(.t.)

        thisform.refresh

        thisform.buttonstatus1

        thisform.text6.setfocus

        thisform.text6.readonly=.f.

        else

        =messagebox(“請輸入制單人!”,48)

        thisform.text5.setfocus

        thisform.buttonstatus3

        thisform.text6.readonly=.t.

        endif

        else

        =messagebox(“借貸不平衡!”,48)

        thisform.grid1.column_JE.setfocus

        endif

        else

        =messagebox(“金額不能為0!”,48)

        thisform.grid1.column_JE.setfocus

        endif

        else

        =messagebox(“指定借或貸!”,48)

        thisform.grid1.column_JD.setfocus

        endif

        else

        =messagebox(“請指定科目!”,48)

        thisform.grid1.column_KM.setfocus

        endif

        3. 5. 4單擊“取消”按鈕以撤銷憑證的輸入或更新

        單擊“取消”按鈕,將不允許以表單上顯示的輸入數(shù)據(jù)對jzpzfb.dbf和jzpzzb.dbf文件進(jìn)行更新。應(yīng)分別在jzpzfb和jzpzzb所在的工作區(qū)用tablerevert(.t.)來撤銷對當(dāng)前記錄的更改,然后用refresh方法刷新表單,并使各按鈕呈buttonstatus1所確定的狀態(tài)(就是使“新增憑證”、“關(guān)閉”有效以便增加新的憑證或關(guān)閉表單,使其余按鈕無效),再將Text6的ReadOnly屬性設(shè)置為.f.,并使Text6獲得焦點(diǎn),以便于輸入新的憑證號。這些操作的代碼應(yīng)體現(xiàn)在“取消”按鈕的Click事件中,“取消”按鈕的Click事件對應(yīng)的VFP代碼如下:

        sele (thisform.dataenvironment.cursor_JZPZFB.alias)

        =tablerevert(.t.)

        sele (thisform.dataenvironment.cursor_JZPZZB.alias)

        =tablerevert(.t.)

        thisform.refresh

        thisform.buttonstatus1

        thisform.text6.readonly=.f.

        thisform.text6.setfocus

        3. 6關(guān)閉操作

        全部輸入操作完成后,需單擊“關(guān)閉”按鈕以退出表單。退出前可用messagebox()函數(shù)提示“真的想退出嗎?”,在彈出的包含“是”和“否”按鈕的提示對話框中單擊“是”按鈕完成退出功能,退出用release方法實(shí)現(xiàn)?!瓣P(guān)閉”按鈕的Click事件對應(yīng)的VFP代碼如下:

        if messagebox(“真的想退出嗎?”,4+48,“提示”)=6

        thisform.release

        endif

        4 進(jìn)一步討論

        4. 1防止手工修改Text1、Text2、Column_PZH和Text4中的值

        為降低輸入出錯率和提高輸入的容錯性,從鍵盤輸入的憑證號顯示在Text6文本框,當(dāng)單擊“新增憑證”按鈕時,Text1文本框中自動變?yōu)門ext6中的值,Text2中自動顯示為系統(tǒng)的當(dāng)前日期(即輸入憑證的日期),而單擊“輸入分錄”按鈕時,表格中憑證號欄(Column_PZH)的文本框(TextPZH)應(yīng)自動變?yōu)門ext1文本框中的值,以保證同一輸入界面中輸入的是同一憑證的數(shù)據(jù)。為防止誤操作,需將Text1、Text2、Column_PZH的ReadOnly屬性設(shè)置為:.T.-真。同樣,Text4中為審核人姓名或代碼,由于輸入憑證時不允許輸入審核人(表示憑證未審核),修改憑證時也不能修改其中的內(nèi)容,只有在審核模塊中才允許更改其中的值,所以在該輸入模塊中還應(yīng)將Text4的ReadOnly屬性也設(shè)置為:.T.-真。

        4. 2防止對已審核憑證進(jìn)行更改

        4. 2. 1定義Text3、Text5、Grid1的When過程

        在Text6中輸入憑證號時,如果輸入的憑證號在數(shù)據(jù)庫中已存在,則對應(yīng)的記賬憑證會在表單中顯示出來。如果顯示出的是已審核憑證(即Text4中的值為非空),則不能對其進(jìn)行有意或無意的修改,可通過設(shè)置相關(guān)控件的ReadOnly屬性實(shí)現(xiàn)。如果text4中的內(nèi)容不為空(表明為已審核憑證),則Text3、Text5收到焦點(diǎn)前將其ReadOnly屬性設(shè)置為.t.,表格Grid1控件收到焦點(diǎn)前將其Enabled屬性設(shè)置為.f.,并提示“已審核憑證不能修改”;否則,Text3、Text5收到焦點(diǎn)前將其ReadOnly屬性設(shè)置為.f.,Grid1收到焦點(diǎn)前將其Enabled屬性設(shè)置為.t.。為實(shí)現(xiàn)此功能,可分別在Text3、Text5、Grid1的When過程中輸入如表6所示的代碼,When過程代碼在控件對象收到焦點(diǎn)前發(fā)生。(注:Text1、Text2、Text4的ReadOnly屬性已按4.1節(jié)設(shè)置為:.T.-真。如未進(jìn)行此設(shè)置,則應(yīng)在Text1、Text2、Text4的When過程中輸入與Text3、Text5相同的When過程代碼)。

        4. 2. 2允許正常的輸入與修改操作

        通過用戶操作或以代碼方式使Text6文本框獲得焦點(diǎn)時,表示可能要輸入憑證號,并允許輸入新的憑證。但為了減少誤操作,在4.2.1節(jié)所述程序代碼中出現(xiàn)了將Text3和Text5的Readonly屬性設(shè)置成.t.、將Grid1的Enabled屬性設(shè)置成.f.的情況,從而限制了對Grid1及Text3、Text5中數(shù)據(jù)的后續(xù)輸入和修改操作。因此,為便于后續(xù)輸入及修改操作的執(zhí)行,還需要在Text6文本框的GotFocus過程中將Grid1的Enabled屬性設(shè)置為.t.、將Text3(附件張數(shù))和Text5(制單)的Readonly屬性設(shè)置為.f.,同時有必要將Text6中的內(nèi)容清空(如果已有內(nèi)容的話),GotFocus過程在一個對象通過用戶操作或以代碼方式獲得焦點(diǎn)時發(fā)生。Text6的GotFocus過程對應(yīng)的VFP代碼如下:

        thisform.grid1.enabled=.t.

        thisform.text3.readonly=.f.

        thisform.text5.readonly=.f.

        this.value=space(0)

        4. 3防止修改狀態(tài)下執(zhí)行“新增憑證”和“關(guān)閉”操作

        當(dāng)使用鍵盤或鼠標(biāo)更改文本框Text3、Text5及表格Grid1的TextZY、ComboKM、ComboJD、TextJE中的值時,表明可能要對相應(yīng)的數(shù)據(jù)進(jìn)行修改,程序進(jìn)入修改狀態(tài),必須單擊“確定”或“取消”按鈕以便決定是否真正執(zhí)行數(shù)據(jù)修改操作。單擊“確定”或“取消”按鈕前,也允許根據(jù)需要輸入新的分錄,所以應(yīng)使“確定”、“取消”、“輸入分錄”按鈕同時有效,而這種情況下的“新增憑證”和“關(guān)閉”按鈕應(yīng)呈無效狀態(tài),可用thisform.buttonstatus3實(shí)現(xiàn)。另外,在數(shù)據(jù)修改狀態(tài)下,Text6文本框中不可輸入新值,需將其ReadOnly屬性設(shè)置為.t.。實(shí)現(xiàn)這種功能的程序代碼應(yīng)包含在相應(yīng)控件的InteractiveChange過程中,Text3、Text5、TextZY、ComboKM、ComboJD、TextJE的InteractiveChange過程代碼對應(yīng)如下。

        thisform.buttonstatus3

        thisform.text6.readonly=.t.

        4. 4使輸入憑證號更方便

        有時,Text6中輸入了一些字符,希望利用鼠標(biāo)單擊能夠立即清空,以便重新輸入,可以在Text6文本框的Click過程中輸入以下代碼:this.value=space(0)。

        主要參考文獻(xiàn)

        [1] 李國紅.管理信息系統(tǒng)數(shù)據(jù)輸入模塊的設(shè)計(jì)與實(shí)現(xiàn)——兼論會計(jì)科目的輸入設(shè)計(jì)[J]. 中國管理信息化,2006,(11):19-22.

        [2] 朱順泉,姜靈敏.管理信息系統(tǒng)理論與實(shí)務(wù)[M]. 北京:人民郵電出版社,2004.

        凹凸在线无码免费视频| 白色橄榄树在线阅读免费| 亚洲av本道一本二本三区| 美女视频黄是免费| 午夜亚洲精品视频在线| 免费a级毛片在线播放不收费| 性无码专区无码| 精品国产一区二区三区av片| 无码的精品免费不卡在线| 51精品视频一区二区三区| 日韩中文字幕无码av| 亚洲一区二区三区视频免费 | 激情五月婷婷一区二区| 久久偷看各类wc女厕嘘嘘偷窃| 免费无码毛片一区二区app| 99re6热在线精品视频播放6| 超高清丝袜美腿视频在线| 青青草成人免费在线视频| 精品香蕉一区二区三区| 国产男女猛烈视频在线观看| 午夜AV地址发布| 亚洲啊啊啊一区二区三区| 女人被躁到高潮嗷嗷叫免| 久久久www成人免费精品| 福利一区二区三区视频午夜观看| 日韩一区二区,亚洲一区二区视频| 日本在线精品一区二区三区| 一个人看的视频www免费| 精品一区二区三区免费爱| 国产一区二区三区小向美奈子| 亚洲色图片区| 亚洲综合一区无码精品| 国产一区二区激情对白在线| 亚洲av男人免费久久| 亚洲国产中文字幕在线视频综合| 人妻精品久久久久中文字幕69| 小荡货奶真大水真多紧视频 | 色欲综合一区二区三区| 97se在线观看| 大又黄又粗又爽少妇毛片| 成人无码av免费网站|