![秋葵軟件OA-ERP高級設(shè)計_第1頁](http://file4.renrendoc.com/view/cf5e48ace321ca05f56d07980706e550/cf5e48ace321ca05f56d07980706e5501.gif)
![秋葵軟件OA-ERP高級設(shè)計_第2頁](http://file4.renrendoc.com/view/cf5e48ace321ca05f56d07980706e550/cf5e48ace321ca05f56d07980706e5502.gif)
![秋葵軟件OA-ERP高級設(shè)計_第3頁](http://file4.renrendoc.com/view/cf5e48ace321ca05f56d07980706e550/cf5e48ace321ca05f56d07980706e5503.gif)
![秋葵軟件OA-ERP高級設(shè)計_第4頁](http://file4.renrendoc.com/view/cf5e48ace321ca05f56d07980706e550/cf5e48ace321ca05f56d07980706e5504.gif)
![秋葵軟件OA-ERP高級設(shè)計_第5頁](http://file4.renrendoc.com/view/cf5e48ace321ca05f56d07980706e550/cf5e48ace321ca05f56d07980706e5505.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 C/C+語言開發(fā)指南PAGE PAGE 118秋葵軟件OA-ERP高級設(shè)計C/C+語言開發(fā)指南目錄 1 新版本CC/C+語語言變更說明明2 OA-EERP與用戶戶程序的交互互 示例一一審核事件 示例二二:保存事件件 示例三三:保存事件件 示例四四:下拉列表表控制記錄事事件Evennt_DroopDownn 清單數(shù)數(shù)據(jù)轉(zhuǎn)移的設(shè)設(shè)置選項:庫庫存參考,自自動清除數(shù)量量 示例五五:記錄選擇擇后的事件EEvent_Selecction 示例六六:建立選擇記錄錄的事件Evvent_DDropDoownSettItemss 示例七七:表單顏色色事件Eveent_GrridCollor 示例八八:數(shù)據(jù)查詢處
2、處理事件Evennt_Rettrive 示例九九:綜合示例例,禁售產(chǎn)品品的業(yè)務(wù)規(guī)劃劃3 OA-EERP虛擬機(jī)機(jī)數(shù)據(jù)集的工工作模式 數(shù)據(jù)集集工作模式 使用SSQL語句返返回數(shù)據(jù)集完完整示例 取得樹樹形節(jié)點的數(shù)數(shù)據(jù)集4 C/ CC+語言代代碼解決特殊殊業(yè)務(wù)示例示例一:外貿(mào)費費用的計算示例二:部分清清單行的計算算示例二:采購付付款金額的控控制結(jié)果字段值的控制練習(xí)一個復(fù)雜的報價價計算5 代碼邏輯輯故障分析6 表單自動動轉(zhuǎn)換事件示例一:7 查詢結(jié)果果轉(zhuǎn)換清單事事件附錄1. OAA-ERP虛虛擬機(jī)C/CC+數(shù)據(jù)工工作模式附錄2. OAA-ERP支支持的數(shù)據(jù)類類型附錄3. OAA-ERP事事件類型一覽覽表附
3、錄4. C/C+基礎(chǔ)礎(chǔ)附錄5. 更多多示例 8 函數(shù)指針、與與動態(tài)鏈接庫庫9 產(chǎn)生提成成表的程序23447910111315161718182022232327313233343536383940424350545758引言為了滿足大量未未知的、以及及特殊的需求求,系統(tǒng)內(nèi)置置了虛擬機(jī)。由由于是C+虛擬機(jī),因因此理論上應(yīng)應(yīng)該是能滿足足任何功能擴(kuò)擴(kuò)充。本文件件僅僅是對如如何使用這個個技術(shù)做一個個概覽性介紹紹。 OA-ERP允許許用戶全面開開發(fā)自定義需需求功能. (1) 自自定義表單,并并且給它增加加字段. (2) 給系統(tǒng)原原來自帶的表表單增加新的的字段. (3) 完全自定定義報表. (4) 全全面
4、控制業(yè)務(wù)務(wù)處理過程.所謂全面控制業(yè)業(yè)務(wù)處理過程程,就是在新新增單據(jù)、審審核單據(jù)、處處理完畢單據(jù)據(jù),用戶錄入入數(shù)據(jù)過程中中的控制。給每個字段增加加代碼,就是是處理“錄入數(shù)據(jù)過過程中的控制制”。本文主要講講述用程序編編寫功能強(qiáng)大大的業(yè)務(wù)處理理功能。 初學(xué)者者理解這些內(nèi)內(nèi)容的順序如如下 (1) C/C+的基基本工作方式式. (2) 數(shù)據(jù)集的的概念.(3) 事件的的概念.(4) 附錄.1.新版本CC/C+語語言變更說明明(2007.12.044)(自學(xué)請勿跳過過,這里是觀觀念的轉(zhuǎn)變,如如何從C語言言進(jìn)入到C+。)下面函數(shù)不再使使用 (1)BegginReppeatEndRepeeat 這對函函數(shù)主要目
5、的的是在窗口錄錄入狀態(tài)下(模式II),切換到清清單,計算清清單行的數(shù)據(jù)據(jù): 新的版版本中,使用用數(shù)據(jù)集的概概念,不再需需要切換。例例子原來C語語言程序(老老版本)為 intt r=GeetRow();int j=BBeginRRepeatt(Iteems);float SSum=0;while(jj0 & j0) doouble x1=dss1.Callculatte2(AAmountt*CoPrrice); doouble x2=dss1.newwGetTaax(x1,0); Suum=Summ+x2; r11= ds11.NextRRow();newSet22(NULLL,Sum);新版本
6、中,不再再需要切換,操操作代表清單單的數(shù)據(jù)集合合ds1就可可以了。這個個例子也是說說明如何從CC語言程序過過度到C+程序。請查看系統(tǒng)自帶帶的其它示例例程序。(2)newGGetX3 這個函函數(shù)主要目的的是是返回字字段的字符串串值: 新的版版本中,使用用newGeetX4直接接獲得這個目目的。例如原來的代碼碼是char buuff1228;newGetXX3(xEExtraFFieldss_C01,128,buff)if(bufff0=R & bufff0=M & buuff0=B) double X2=neewGet22(Prooduct.LTimeetblPuurchcoontr);newS
7、et22(Priice,XX2); 新版本代碼如下下string s1=neewGetXX4(xEExtraFFieldss_C01)if(s1=RMB) double X2=neewGet22(Prooduct.LTimeetblPuurchcoontr);newSet22(Priice,XX2); 可以看到處理復(fù)復(fù)雜問題時使使用C+代代碼,較C語語言更容易接接近人的思維維的直觀性。2. C/CC+事件OA-ERP目目前開放的允允許用戶自己己控制的地方方是新增單據(jù)審核單據(jù)處理完畢單據(jù)用戶錄入數(shù)據(jù)過過程。下拉框事件 由于用用戶處理數(shù)據(jù)據(jù)的對象有所所不同,因此此OA-ERRP系統(tǒng)將他他們分為三大
8、大類:記錄窗口編輯框清單 記錄指指內(nèi)存或數(shù)據(jù)據(jù)庫中的一條條記錄,或多多條記錄; 窗口編輯框框是用戶交互互的輸入位置置;清單指窗窗口中的清單單.當(dāng)系統(tǒng)處于記記錄處理狀狀態(tài)是,系統(tǒng)統(tǒng)狀態(tài)為;窗口編輯輯框狀態(tài)為為;清單狀狀態(tài)為我我們可以用CCurrenntModee()獲得當(dāng)當(dāng)前狀態(tài)的值值示例一,審核事件裁床明明細(xì)窗口中中的一段代碼碼是:* 556.3 Amoount *int M=CCurrenntModee();if(M=22) Suum2AnddSet(NNULL,Itemss,Ammount);這段代碼是加載載到主單據(jù)Amounn字段的,僅僅僅在模式III中工作,合合計Itessm清單Amm
9、ount字字段。示例二,保保存事件用戶定義了一個個全新的窗口口,用于調(diào)整整結(jié)算價。而而結(jié)算價則是是用戶自己定定義的,貫穿穿全部清單的的一個字段uuPricee 標(biāo)識幾個個特別的價格格。在這個窗口中,用用戶自己設(shè)計計了錄入信息息的方式,從從庫存中選擇擇剩余庫存,錄錄入新的結(jié)算算價uPriice,然后后希望單據(jù)審審核時,修改改庫存中的結(jié)結(jié)算價uPrrice。代碼應(yīng)該加加載到審核函函數(shù),設(shè)置方方式是:代碼清單是int i=0,ii1,ic11,j1;doubble prrice1;striing s11;gDattaSet ds1(tthis,11,Iteems);for(i=0;+i) i1=ds
10、s1.MovveTo(ii); if(i110) rreturnn 0; 10 pricce1=dss1.newwGet2(uPriice);11 ic1=(int)ds1.nnewGett2(JIInstocckItemmsCodee);12 if(iic1=00)13 gStriingArrray SAA1(thiis);14 s1=我我要顯示一些些信息:Liines CContaiin No leagaal Infformattion ,line=;15 s1+=(i+1);16 SA1.AAppendd(s1);17 SA1.AAppendd(按鈕11);18 SA1.AAppendd
11、(按鈕22);19 SA1.AAppendd();20 j1=SAA1.ShoowMesssage();21 if(j11=1)22 rreturnn -1;23 34 25 elsee26 s1=UUpdatee tblIInstocckItemms sett uPriice=;27 s1+=pprice11;28 s1+= Wherre Codde=;29 s1+=iic1;30 SQL(ss1);31 3233 rreturnn 0;說明:我們希望獲得清清單行,然后后將每行的JInsttockIttemsCoode字段段值取出來,這這個數(shù)據(jù)是庫庫存清單的序序號,然后獲獲得uPrrice字
12、字段的值,將將這個值更新新到數(shù)據(jù)庫中中去。審核單據(jù)時,系系統(tǒng)傳給我們們的操作對象象是單據(jù)本身身,那么如何何獲得清單行行?如何操作作清單行呢?Line 4完成了這這個工作,整整個清單我們們封裝在gDDataSeet這個數(shù)據(jù)據(jù)結(jié)構(gòu)中的,為為了構(gòu)造這個個數(shù)據(jù)集合,我我們傳給了它它個參數(shù),第第一個參數(shù)是是當(dāng)前工作對對象(記錄、窗窗口、或清單單),第二個個參數(shù)是,即即我們希望的的模式I集合合;第三個參參數(shù)是清單字字段名稱“Itemss”.從Line 110-11我我們看到,我我們使用了dds1這個前前綴,表示操操作是對于清清單的。Line 5-32是循環(huán)環(huán)處理,Liine 6是是定位到第ii條記錄,如如
13、果到了末尾尾,或者根本本沒有清單,那那么函數(shù)會返返回-1,-2,等負(fù)數(shù)數(shù)。從Line 226-29將將構(gòu)造SQLL語句,假如如Code是是200055,uPriice=100,那么這個個語句將使Update tblInnstockkItemss set uPricce=10 Wheree Codee=20055Line 300,使用SQQL函數(shù)去執(zhí)執(zhí)行這個語句句。Line 122,檢查了獲獲取庫存清單單序號的合法法性,如果獲獲取了非法結(jié)結(jié)果,Linne 12-20又構(gòu)造造了一個提示示窗口這個窗口是Liine 200的執(zhí)行結(jié)果果。為了顯示示這個窗口,系系統(tǒng)需要一個個字符串?dāng)?shù)組組的對象gSStri
14、nggArrayy,這個在LLine 113中構(gòu)造。這這個對象是字字符串?dāng)?shù)組,即即其每個元素素都是一個字字符串。因為這個窗口需需要3個字符符串,(1)編編輯框中的提提示信息,(22)按鈕“Contiinue”,(3)按按鈕“Canceel”。另外最后后還要附加幾幾個空白字符符串,以便系系統(tǒng)知道誰是是最后一個按按鈕牛。當(dāng)用用戶按第一個個按鈕時,這這個函數(shù)返回回0,第二個個返回1,依依次類推。如如果超時,返返回-1。這段代碼,在一一般正常情況況下,反復(fù)操操作所有清單單,處理完畢畢后返回0,審審核成功。注意返回-1,表表示審核失敗敗。示例二其它它問題這里依賴一個字字段JInnstockkItemss
15、Code,即庫存明明細(xì)的序號,如如果沒有這個個字段,或者者由于其它原原因,這個字字段的值無法法取道,怎么么辦呢? 下面代代碼說明如何何使用批號來來替代,當(dāng)然然你可以增加加更多的檢查查,防止錯誤誤int i=00,i1,iic1,j11;double pricee1;string s1;gDataSeet ds11(thiss,1,IItems);for(i=00;+ii) i1=ds1.MMoveToo(i); if(i10) retuurn 0; priice1=dds1.neewGet22(uPrrice); ic11=(intt)ds1.newGeet2(LLotsCoode); if(
16、ic1=0) gStrringArrray SSA1(thhis); s1=Liness Conttain NNo leaagal IInformmationn ,linne=; s1+=(i+1); SA1.Appennd(s1); SA1.Appennd(Coontinuue); SA1.Appennd(Caancel); SA1.Appennd(); j1=SSA1.ShhowMesssage(); if(jj1=1) returrn -1; elsse s1=Updatte tbllInstoockIteems seet uPrrice=; s1+=pricee1; s1+= Whee
17、re LootsCodde=; s1+=ic1; SQL(s1); return 0;示例三,保保存事件用戶希望在采購購訂單中,自自動根據(jù)生產(chǎn)產(chǎn)單的開工日日期,填寫提提前7天為供供應(yīng)商的交貨貨日期。為了解決這個問問題,我們編編寫保存事件件的代碼,代代碼如下1 strinng s1;2 int xx1=newwGet2(PraccticeTTable);3 if(x11!=2766)4 rreturnn 0;5 6 s1=neewGetXX4(Reelateiid_XCoode.Sttart1);7 int xx2=UDCCharTooInt(ss1.c_sstr();8 int xx3=Get
18、tDateXX(-1,66);9 if(x22-7*244*60*660 x3)10 gSStringgArrayy SA1(this);11 strinng s2=時間錯誤誤,提前時間間后,在今天天之前:;12 s2+=ss1;13 SA1.AAppendd(s2);14 SSA1.Apppend(放棄);15 SA1.AAppendd(仍然繼繼續(xù));16 SA1.AAppendd();17 int jj1=SA11.ShowwMessaage();18 if(j11=0)19 retturn -1;20 21 22 newSSet2(Delivverdatte,x22-7*244*60*6
19、60);23 retuurn 0;這里解釋如下,LL2中,取得得當(dāng)前單據(jù)的的業(yè)務(wù)類型窗窗口的序號,不不為生產(chǎn)單的的話,直接返返回。L6漫漫游查找到生生產(chǎn)單據(jù)的開開工日期,結(jié)結(jié)果應(yīng)該是“2007.12.300”可閱讀格式式的,因此LL7使用UDDCharTToInt將將其轉(zhuǎn)換為UUnix長整整數(shù)形式,LL8取得當(dāng)天天時間,L99-L21,在在提前七天后后小于今天的的值時給予提提示,L177接受用戶返返回按鈕如果用戶按第一一個按鈕,則則返回0(依依次類推),此此時我們返回回-1,告訴訴系統(tǒng)處理失失敗。如果繼繼續(xù),或者正正確的話,LL22將執(zhí)行行,設(shè)置字段段Deliiverdaate交貨貨日期的希望
20、望值。代碼編寫好后,在在用戶代碼窗窗口保存到數(shù)數(shù)據(jù)庫,然后后為采購訂單單,增加保存存數(shù)據(jù)的事事事件:客戶程序重新啟啟動后,代碼碼生效。示例三的進(jìn)一步步問題當(dāng)用戶在生產(chǎn)單單中自動產(chǎn)生生采購訂單時時,如果結(jié)果果是多張采購購訂單,而且且每張都出現(xiàn)現(xiàn)提示,如果果要求后面的的同一張生產(chǎn)產(chǎn)單產(chǎn)生的單單據(jù)不再顯示示上述對話框框時怎樣做呢呢?解決辦法是,設(shè)設(shè)置一個靜態(tài)態(tài)變量,為生生產(chǎn)單號,如如果本次的生生產(chǎn)單號與上上次的相同,那那么就不再提提示,而是按按照這個內(nèi)容容繼續(xù)處理。目前的問題是:每次你這段程序運行時,都是在一個全新的虛擬空間運行,所謂上次的結(jié)果無影無蹤。因此這個時候我們要使用這對函數(shù)void Uss
21、erSett(charr *Varrable,char *Valuue); 給全局變量量設(shè)置字符串串值string UserGGet(chhar *VVarablle); 獲取全局變變量的值程序如下1 strinng s1;2 int xx1=newwGet2(PraccticeTTable);3 if(x11!=2766)4 rreturnn -91;5 6 s1=neewGetXX4(Reelateiid_XCoode.Sttart1);7 int xx2=UDCCharTooInt(ss1.c_sstr();8 int xx3=GettDateXX(-1,66);9 if(x22-7*2
22、44*60*660 x3)10 strinng sb11=newGGetX4(Relaateid_XCodee); strinng sb22=UserrGet(MyNamme011); if(sbb1!=sbb2) UserSSet(MMyNamee011,sb1.cc_str();10 gStriingArrray SAA1(thiis);11 strinng s2=時間錯誤誤,提前時間間后,在今天天之前:;12 s2+=ss1;13 SA1.AAppendd(s2);14 SA1.AAppendd(放棄);15 SA1.AAppendd(仍然繼繼續(xù));16 SA1.AAppendd();1
23、7 int jj1=SA11.ShowwMessaage();18 if(j11=0)19 retturn -1;20 21 22 newSSet2(Delivverdatte,x22-7*244*60*660);23 retuurn 0;當(dāng)然可能更復(fù)雜雜,例如可以以保存上次用用戶按按鈕的的值,如果是是相同的生產(chǎn)產(chǎn)單,那么下下次自動返回回相同的值,或或者作出相同同的反應(yīng)。示例四,下拉列列表控制記錄錄事件在采購?fù)素泦未按翱?,用戶希望在下下拉采購收貨貨單時,列出出采購收貨單單,同時將數(shù)數(shù)量控制到僅僅存的庫存數(shù)數(shù)量,防止數(shù)數(shù)量不符合庫庫存,無法出出庫。這個操作,在“采購調(diào)價單單”窗口是這樣樣控制的,
24、系系統(tǒng)內(nèi)部使用用的是一個函函數(shù)“SelecctSaleeLoadCCargo_PriceeAdjusst”。因此,你你只要能調(diào)用用這個函數(shù)就就可以了。(1)首先編寫寫事件,代碼碼如下int M=CCurrenntModee();if(M=22) CalllFuncction(SeleectSalleLoaddCargoo_PricceAdjuust);(2)為”相關(guān)關(guān)單據(jù)字段”增加DroopDownn事件客戶端重啟后,下下拉這個字段段的編輯框,會會彈出單據(jù),選選擇后,系統(tǒng)統(tǒng)會根據(jù)當(dāng)前前庫存調(diào)整允允許退貨的數(shù)數(shù)量。這個事件可以在在其它需要類類似處理的字字段共享。示例四的進(jìn)一步步問題如果希望帶回來
25、來的清單數(shù)量量自動為0,如如果后面又沒沒有填寫,就就不要保存怎怎么辦呢?解決辦法之一是是,是在CaallFunnctionn(SellectSaaleLoaadCarggo_PriiceAdjjust)后面增加代代碼,將清單單的Amouunt字段清清除掉;至于于是否保存,系系統(tǒng)已有的表表單是這樣處處理的,自定定義的表單字字段,只要取取正確特征碼碼,也具有這這個特點。方案二,在清單單字段,設(shè)置置下面選項(因因此一些情況況下,不再需需要這些代碼碼了)示例五,記錄選選擇后的事件件對于一些行業(yè),業(yè)業(yè)務(wù)公司的營營業(yè)執(zhí)照到期期后,不再允允許發(fā)生業(yè)務(wù)務(wù)。此時可以定義營營業(yè)執(zhí)照到期期字段,下面面以為這個字字段
26、是“VisittTime”來說明這個個需求。(1)首先編寫寫事件,代碼碼如下代碼片段一:string s1= getPaarametters(33);if(s1!=149 & ss1!=161) reeturn 1;return 0;1)返回值仍然然遵守標(biāo)準(zhǔn)規(guī)規(guī)則,-1表表示失敗,返返回1允許選擇,返返回0表示要要系統(tǒng)按照默默認(rèn)方式再檢檢查。2)這里使用了了循環(huán),因為為用戶可能選選擇多條記錄錄,因此要逐逐一檢查3)x1=(iint)neewGet22(VissitTimme)中,因因為newGGet2返回回floatt類型,而我我們用intt類型來接收收結(jié)果,因此此有強(qiáng)制類型型的轉(zhuǎn)換。4) s
27、triing s11= getPaarametters(33)獲得第33個參數(shù),所所在窗口的序序號,接下來來就是說,如如果不在銷售售訂單窗口,也也不在采購訂訂單窗口,那那么允許選擇擇。5)如果希望有有更多控制,那么可以使使用如下類似似的代碼。代碼片段二:int i=00,i1,xx1,x2;double pricee1;string s1= getPaarametters(33);if(s1!=149 & ss1!=161) reeturn 1;for(i=00;+ii) i1=MoveTTo(i); if(i10) retuurn 0; s1=newGeetX4(VisittTime); x
28、1=(int)newGeet2(VVisitTTime); x2=GetDaateX(-1,6); if(x1x22) gStrringArrray SSA1(thhis); striing s22=本記錄錄時間到期,; s2+=s1; SA1.Appennd(s2); SA1.Appennd(不選選擇); SA1.Appennd(仍然然選擇); SA1.Appennd(); int j1=SAA1.ShoowMesssage(); if(jj1=0) returrn -1; return 0;(2)然后為”業(yè)務(wù)公司”打開業(yè)務(wù)處處理設(shè)置窗口口,增加Seelectiion事件(3)客戶端重重啟后
29、,如果果選擇某個到到期的業(yè)務(wù)公公司,那么系系統(tǒng)會有如下下提示。注意1:如果僅僅僅是針對有有效期、禁用用等,系統(tǒng)有有默認(rèn)的處理理,例如設(shè)置置字段為有效效期的檢查,或或者將記錄設(shè)設(shè)置有禁用。不不過上述原理理,可以用于于更廣泛的目目的。注意2:如果用用戶有事件,那那么返回-11表示禁止選選擇,1表示允許選選擇,0表示系統(tǒng)還還要按照默認(rèn)認(rèn)方式檢查。注意3:參數(shù)說說明。strinng s1=getPaarametters(33)返回第三三個參數(shù),這這個事件的幾幾個參數(shù)為getParaameterrs(0) Evennt_Sellectioon (事事件名稱)getParaameterrs(1) Bann
30、 Checck 或者者Valiid Cheeck (輔助助參數(shù),指在在做什么檢測測)getParaameterrs(2) 記錄窗窗口的序號 getParaameterrs(3) 正在操操作的窗口的的序號。示例六:建立選選擇記錄的事事件Evennt_DroopDownnSetIttems一些時候,下拉拉框拉開時,我我們希望完全全按照我們的的意愿建立需需要選擇的記記錄。例如,采采購訂單中,業(yè)業(yè)務(wù)類型拉開開后顯示如下下項目: 這些類類型是系統(tǒng)默默認(rèn)的,可能能發(fā)生采購的的業(yè)務(wù)類型。如如果不需要其其中一些,那那么可以在業(yè)業(yè)務(wù)類型的“業(yè)務(wù)選項”頁簽設(shè)置,將將某些類型去去掉。我們也也可以完全指指定,例如設(shè)設(shè)
31、置成“入庫單、出出庫單”在這里顯示示,而其它項項目方而不在在這里顯示。(注注意:這并非非聯(lián)系,一些些企業(yè)就是按按照出庫、或或者入庫來采采購的。) 在另外外一些情況下下,這類設(shè)置置無法起作用用,那么此時時就可以考慮慮使用Eveent_DrropDowwnSetIItems。 下面代代碼就是說明明如何僅僅讓讓“入庫單、出出庫單”在采購訂單單中顯示的示示例int rett1=0;int s1=(int)newGeet2(CCode);string s2=geetParaameterrs(3);if(s2=149) iff(s1=158 | s1=165) rett1=1; ellse rett1=-
32、1; return ret1;注意1:如果用用戶有事件,那那么返回-11表示禁止選選擇,1表示允許選選擇,0表示系統(tǒng)按按照默認(rèn)方式式建立項目。注意3:參數(shù)說說明。strinng s1=getPaarametters(33)返回第三三個參數(shù),這這個事件的幾幾個參數(shù)為getParaameterrs(0) Evennt_DroopDownnSetIttems (事件名稱稱)getParaameterrs(1) DroppDownSSetIteems (輔助參數(shù)數(shù),指在做什什么檢測)getParaameterrs(2) 記錄窗窗口的序號 getParaameterrs(3) 正在操操作的窗口的的序號。
33、示例七:表單底底色、字體顏顏色事件一些用戶,期望望在顯示時候候,根據(jù)不同同情況顯示不不同顏色。此此時表單顏色事事件就能夠解決決這類問題。這里的示例是一一家醫(yī)藥物流流公司,希望望在彈出式庫庫存分布窗口口,根據(jù)庫存存的有效期,顯顯示不同顏色色,以便及時時處理。(1)編寫事件件代碼如下1 douuble DDx1=neewGet22(LottsCodee.Deaddline);2 intt Todaay1=GeetDateeX(-1,0);3 if(Dx1TToday11+10*224*60*60)4 SeetResuult(2255,2555,0;2255,0,0);5 6 elsse if(Dx
34、1TToday11+30*224*60*60)7 SeetResuult(2255,1228,64;255,00,0);8 9 elsse if(Dx1TToday11+60*224*60*60)10 SSetRessult(255,1168,1225;2555,0,0);11 12 ellse iff(Dx1Todayy1+2400*24*660*60)13 SSetRessult(192,1192,1992;2555,0,0);14 代碼是是一入庫明細(xì)細(xì)為基礎(chǔ)的,LL.1是取得得該批號的有有效期,L22是取得當(dāng)天天的日期。結(jié)結(jié)果都是從11970.11.1開始的的秒數(shù)。L33是判斷這個個有效
35、期是不不是在10天天以內(nèi),L112判斷是不不是在8個月月以內(nèi)。L44是設(shè)置底色色與字體顏色色,顏色是由由RGB三色色組成,英文文逗號分開,前前面三個是表表單底色,后后面三個是字字體顏色。RRGB的值,可可以從任何一一個畫圖軟件件查詢到。(2)編寫事件件要賦于給ttblInsstockIItems_For_SScheduule的,這這個名稱可以以從彈出的表表單窗口,在在最左上角單單元格選擇功功能“編輯/顯示示數(shù)據(jù)庫據(jù)名名稱”獲得。將這個個名稱從提示示窗口的底部部復(fù)制后,選選擇主窗口功功能,“選項-窗口口/打開指定定窗口”,從這個窗窗口,選擇“綜合處理/高級設(shè)置/業(yè)務(wù)處理設(shè)設(shè)置”,做如下修修改后,
36、按修修改保存這里的事件名稱稱就是你前面面在“用戶C語言言程序”中編寫的代代碼。(3)最后的顯顯示效果如下下示例八:查詢后后的事件一些用戶,期望望在查詢結(jié)果果后,根據(jù)不不同情況做一一些處理。此此時表單查詢事事件 Eventt_Retrrive就能能夠解決這類類問題。這里的示例是公公司,希望在在用戶1000登錄時,查查詢20088.06以前前數(shù)據(jù)時,使使用其它表單單的數(shù)據(jù)。(1)編寫事件件代碼如下1 intt t1,tt2,t3,t7;2 flooat t44,t5,tt6;3 chaar *c11,*c2;4 strring uuc1=GeetUserrInf(Code);5 if(uc1=10
37、0)6 7 t3=(int)newGeet2(DDate1);8 if(t30 & t22=t1)21 memmmove(c1,c22,t1);22 23 prrintf(t1=%d,t2=%d,c11=%d,cc2=%d,t1,tt2,(innt)c1,(int)c2);24 prrintf(sql=%s,uuc1);25 26 ellse27 28 t11=(intt)newGGet2(Shiftt30);29 t22=(intt)newGGet2(Shiftt31);30 iff(t2-tt11.55*60*660)31 32 neewSet22(Shiift31,t1+11.5*600
38、*60+55*60);33 neewSet22(WorrkHourr_Overr,1.55);34 t44=newGGet2(WorkHHour_WWeekennd);35 t55=newGGet2(WorkHHour_OOver);36 t66=newGGet2(WorkHHour);37 neewSet22(TottalWorrkHourr,t5+t4+t66);38 39 40 41 reeturn 0;(2)編寫事件件要賦于給HHDuty_DailyyReporrtX的vent_Retriive事件。注意:查詢事件件是在單條記記錄上運行的的,即如果查查詢到1000條記錄,系系統(tǒng)對每條記
39、記錄都單獨運運行代碼。因因此程序不需需要處理復(fù)雜雜的問題。查詢事件其它示示例(1)用戶查詢詢庫存綜合報報表時,希望望一部分空白白數(shù)據(jù)不要顯顯示,那么可可以給表單ttblSalleSynttheticc編寫” 查詢后的事事件”,對于那些些不需要顯示示的數(shù)據(jù),返返回-1,系系統(tǒng)會過濾掉掉這部分?jǐn)?shù)據(jù)據(jù)。注意,可以使用用getPaarametters(11,2,3,)函數(shù),測試到底是那個函數(shù)在調(diào)用本事件。(2)用戶采購購訂單窗口,不不顯示那些應(yīng)應(yīng)收貨日期超超過特定長度度的單據(jù),因因為這些單據(jù)據(jù)估計不再收收貨了。那么么可以給采購購訂單編寫” 查詢后的事事件”,對于那些些不需要顯示示的數(shù)據(jù),返返回-1,系
40、系統(tǒng)會過濾掉掉這部分?jǐn)?shù)據(jù)據(jù)。這些數(shù)據(jù)僅僅不不顯示了,示例九:綜合示示例對于醫(yī)藥行業(yè),某某些業(yè)務(wù)公司司禁售某些產(chǎn)產(chǎn)品。(1)此時用戶戶要定義一張張表單(窗口口),例如是是UprodductPrrohibiit來保存這這些禁售信息息的。(2)再編寫(例如銷售訂訂單的)事件件,事件可以以放在保存事事件、或者審審核事件。代代碼如下int i=00,i1,jj1,cidd,pid;string s1,s22;double tt;cid=(innt)newwGet2(ClieentID);gDataSeet ds11(thiss,1,IItems);for(i=00;+ii) i1=ds1.MMoveTo
41、o(i); if(i10.0001) ggStrinngArraay SA11(thiss); s1=警告!該該產(chǎn)品對當(dāng)前前的業(yè)務(wù)公司司禁售; s1+=(i+1); SA11.Appeend(s11); SA1.Appennd(確認(rèn)認(rèn)); SA11.Appeend(); j1=SSA1.ShhowMesssage();return -1; return 0;這段代碼,是逐逐個檢查這些些物品,是否否在禁售列表表中,如果在在的話,系統(tǒng)統(tǒng)將禁止繼續(xù)續(xù)。事件的參數(shù)說明明string getPaarametters(iint i) 返回第i個個參數(shù)第1個參數(shù)(ii=0),是是調(diào)用事件的的類型名稱保存事件
42、為:EEvent_BeforreColllectDaata,審核核事件為Eveent_Auudit;第2個參數(shù)(ii=1)為輔輔助類型,例例如新增保存存時為Inssert,修修改保存時為為Updatte,對于審審核則為Auudit.對于不明確的,可可以自己測試試結(jié)果。3. OA-ERP虛擬擬機(jī)數(shù)據(jù)集的的工作模式gDataSeet這個類有有個方法Ruun()是空空白的,用戶戶的代碼,在在新版本中是是填充到這個個方法中的,因因此新版本中中,完整C+的程序是這樣的的: (常用用頭文件部分分) claass gDDataSeet intt Run();int gDaataSett :Ruun()用戶寫
43、的代碼部部分int funn(int i,chaar *buuff) gDattaSet _dss; reeturn _dss.Run();也就是說,當(dāng)用用戶程序運行行時,總是以以某個記錄為為基礎(chǔ)的,你你可以用gDDataSeet提供的方方法處理問題題。你可以用CurrrentMMode()獲取工作模模式,這個函函數(shù)返回1,表表示當(dāng)前操作作的記錄,我我們稱為模式式I;返回22當(dāng)前操作的的窗體編輯框框字段-模模式II;返返回3當(dāng)前操操作的清單模式IIII;模式IV則是按照照SQL語句句返回數(shù)據(jù)集集(注意:返返回的數(shù)據(jù)仍仍然工作在模模式I)。當(dāng)工作在成員函函數(shù)內(nèi)部時,不不需要前綴,例例如: int
44、t m1= CurreentModde(); intt m2=dds1.CuurrenttMode();前者表示取得本本記錄集的工工作模式,后后者則是獲取取ds1這個個數(shù)據(jù)集的工工作模式。當(dāng)啟動代碼工作作在模式III下,如何操操作清單呢?例如我們希望統(tǒng)統(tǒng)計清單中數(shù)數(shù)量與單價的的總和,賦值值給字段Tootalchharge. 為了完成成這個任務(wù),下面代代碼就可以double Sum=00.0;gDataSeet ds11(thiss,3,IItems);int r1=ds1.GGetRoww();while(rr10) doouble x1=dss1.Callculatte2(AAmountt*
45、CoPrrice); doouble x2=dss1.newwGetTaax(x1,0); Suum=Summ+x2; r11= ds1.NextRRow();newSet22(Tottalchaarge,Sum);這里僅僅是說明明原理,因為為這為完成這這個功能,系系統(tǒng)提供了更更強(qiáng)大的函數(shù)數(shù)Sum2AAndSett(Totaalcharrge,Itemms,Amouunt*CooPricee).由于窗體編輯框框、清單,記記錄,都是有有對應(yīng)關(guān)系的的,都是由字字段控制的,因因此對他們的的操作也是完完全一樣的,都是gDaataSett類型的數(shù)據(jù)據(jù)集,當(dāng)然,在在模式II下下,NexttRow()沒有作
46、用。1. 獲取清單單記錄集合在模式I下,可可以獲取清單單記錄集合,使使用下面代碼碼就可以了 gDaataSett ds1(this,1,Ittems);然后這個ds11是gDataSSet類,那那么這個類的的所有函數(shù)都都可以使用。2. 獲取主窗窗口操作對象象 僅僅在在模式IIII下,可以這這樣處理,代代碼如下 gDaataSett ds1(this,2,NULL); 代碼示示例 if(CurreentModde()=2) gDaataSett ds1(this,2,NULLL); douuble dd1=ds11.newGGet2(Discoount); if(d1=1)dd1=1; douu
47、ble ss1=d1*newGeet2(PPrice)*newwGet2(Amouunt); newwSet2(Summmoney,s1); 警告: 這里的模模式檢查非常常重要,因為為部分代碼只只在清單中運運行有效,其其它模式下并并不正確。部部分客戶(例例如希爾科)的代碼因為為缺少這個檢檢查出現(xiàn)過錯錯誤。3.取得名稱為為Itesmm的清單 僅僅在在模式II、IIII下,可可以這樣處理理,代碼如下下gDataSeet ds11(thiss,3, Iteems);(在模式II下下,可以使用用這中方式操操作另外的清清單。)4.按照SQLL語句返回數(shù)數(shù)據(jù)集 在任何何模式下都有有效,可以這這樣處理,代代
48、碼如下 strring SSQL1=Selecct * Fromm tblIInstocckItemms Wheere Ammount55242888) (這個個語句是列舉舉所有的入庫庫單中存在剩剩余庫存的明細(xì),MaiinCodee In是保證這些些單據(jù)已經(jīng)入入庫,而不是是當(dāng)前未入庫庫的單據(jù))gDataSeet ds11(thiss,4,SQL1.c_strr();(注意:返回的的數(shù)據(jù)仍然工工作在模式II,只是要傳傳遞4這個參參數(shù)。)代碼示例 下面面是一個完整整的使用SQQL語句返回回數(shù)據(jù)集作的的示例1 sttring SQL1=Seleect * From tblInnstockkItems
49、s Wherre AmoountOOutAmoount AAnd MaainCodde In (Seleect Coode Frrom tbblInsttock WWhere Recorrd5244288);2 gDDataSeet ds11(thiss,4,SQQL1.c_str();3 gSStringgArrayy SA1(this);4 sttring s2=庫庫存分布如下下,;5 s22.addRReturnn();6 s22+=總行行數(shù):;7 innt couunt1=dds1.GeetCounnt();8 s22+=couunt1;9 prrintf(counnt1=%dd,co
50、uunt1);10 s22.addRReturnn();11 innt i,ii1;12 foor(i=00;i=0)15 16 sttring s1b=dds1.neewGetXX4(Prroductt);17 sttring s2b=dds1.neewGetXX4(SttoreHoouse);18 doouble a1=dss1.newwGet2(Amouunt);19 doouble a2=a11-ds1.newGeet2(OOutAmoount);20 s22+=物品品名稱:;21 s22+=s1bb;22 s22+=,倉倉庫:;23 s22+=s2bb;24 s22+=,入入庫數(shù)量:
51、;25 s22+=a1;26 s22+=,剩剩余數(shù)量:;27 s22+=a2;28 s22.addRReturnn();29 30 31 SAA1.Apppend(ss2);32 SAA1.Apppend(確定);33 SAA1.Apppend();34 SAA1.ShoowMesssage();35 reeturn 0;運行時提示窗口口如下:5. 獲取樹形形節(jié)點的數(shù)據(jù)據(jù)集 在任何何模式2,33下都有效gDataSeet ds11(thiss,5,NULL);例如:在配色表表中,希望取取得BOM清清單中的幾個個自定義字段段的值,并顯顯示在配色表表窗口中,供供參考。代碼碼如下:int p0,p1
52、,s11;string lo1,ss2;gDataSeet ds11(thiss,5,NUULL);CreateFFieldss(X0001,長,22);CreateFFieldss(X0002,寬,22);CreateFFieldss(X0003,場,22);if(CurrrentMoode()!=3)reeturn 0;p0=(intt)ds1.newGeet2(PProducct);p1=(intt)newGGet2(Produuct);s1=(intt)newGGet2(Speciif);lo1=newwGetX44(LoccationnX);s2=Sellect * Fromm pr
53、dBBOMIteems Whhere PProducct=;s2+=p1;s2+= AAnd Sppecif=;s2+=s1;s2+= AAnd LoocatioonX=;s2+=lo11;s2+=;s2+= AAnd MaainCodde In ( Sellect CCode FFrom pprdBOMM Wherre Prooduct=;s2+=p0;s2+=);gDataSeet ds22(thiss,4,s22.c_sttr();newSet22(X0001,dss2.newwGet2(uLenngth);newSet22(X0002,dss2.newwGet2(uWiddth);ne
54、wSet22(X0003,dss2.newwGet2(uThiicknesss);6. 空白數(shù)據(jù)據(jù)集 在任何何模式下都有有效gDataSeet ds11(thiss,6,char *cn1);例如: cn11為表單名稱稱或表單序號號.4. C語言言代碼解決特特殊業(yè)務(wù)示例例基本意義OA-ERP做做為一個通用用系統(tǒng),因此此不能在一些些非常專們的的需求方面走走的太遠(yuǎn),但但是使用C/C+語言言擴(kuò)展程序,原原則上可以解解決任何的可可能需求。如果用C/C+語言解決決了,那么任任何其他語言言也未必能解解決。示例一:外貿(mào)費費用的計算1) 一個外貿(mào)貿(mào)用戶,在銷銷售報價、銷銷售訂單中,都都因為存在費費用,因此啟啟
55、用了費用方方案、費用清清單。2) 這些費用用中,一部分分是固定的,例例如手續(xù)費、標(biāo)標(biāo)簽費等。3) 另外一部部分費用,不不是固定的,例例如“單物品金額額保值費”,它是根據(jù)據(jù)物品清單的的費用總和再再乘以一個系系數(shù)得到的;再如“關(guān)稅”等,是其它它費用的總和和,再乘以一一個系數(shù)得到到的。C語言代碼設(shè)置置 1)我我們先定義費費用項目如下下。 注意這這這里的兩個個特殊項目的的序號分別是是200033、200004,他們要要特別處理。 2)在在銷售報價單單的中定義CC語言程序: 這里只只需要給第三三行、第四行行項目定義CC語言程序。我我們將數(shù)量固固定為1,于于是只需要給給單價字段定定義C語言程程序就可以了了
56、,“詢價單物品品金額保值費費”是統(tǒng)計物品品清單的費用用總和,因此此可以使用代代碼:代碼片段一 Sum22AndSeet(Prrice,Itemms,SSummonney);這里Sum2AAndSett的作用是:計算清單IItems的的表達(dá)式SSummonney的總總和,然后賦賦值給Prrice字字段。 第四行行“費用匯總項項關(guān)稅”的意義是,計計算其它行的的總金額,乘乘以一個系數(shù)數(shù),例如0.5,因此定定義C語言程程序是代碼片段二 flooat D11=Sum22(Iteems3,Summmoney); floaat D2=newGeet2(SSummonney); newwSet2(Pricce
57、,(DD1-D2)*0.5);這里解釋一下,第第1行的意思思是,計算清清單Iteems3的的表達(dá)式SSummonney的總總和,第2行行的意思是,獲獲得本行SSummonney的值值。因為僅僅僅計算其它行行的Summmoneyy的值,所所以他們的結(jié)結(jié)果要相減(D1-D22)。第3行行的意思是,計計算結(jié)果(DD1-D2)*0.5,賦賦值給字段Pricee。 現(xiàn)在的的問題是,在在第三行用代代碼片段一,第第四行則用代代碼片段二,其其它行不計算算,那么如何何處理呢?我們使用newwGet2(Typee1)獲取取字段Tyype1的的序號,我們們記得,第三三行“詢價單物品品金額保值費費”的序號是22000
58、3,第第四行“費用匯總項項關(guān)稅”的序號是220004,因因此C語言程程序就是如下下形式最后代碼if(newGGet2(Type11)=220003) Summ2AndSSet(PPrice,Iteems,Summooney);if(newGGet2(Type11)=220004) flooat D11=Sum22(Iteems3,Summmoney); flooat D22=newGGet2(Summooney); newwSet2(Pricce,(DD1-D2)*0.5); 3)一一點優(yōu)化。上上面代碼中,newGet2(Type1)調(diào)用2次,影響了效率,因此采用下面優(yōu)化的形式加速計算優(yōu)化后的
59、代碼片片段int typpe1=neewGet22(Typpe1);if(typee1=200003) Summ2AndSSet(PPrice,Iteems,Summooney);else iff(typee1=200004) flooat D11=Sum22(Iteems3,Summmoney); flooat D22=newGGet2(Summooney); newwSet2(Pricce,(DD1-D2)*0.5);最實際使用的代代碼片段如下下:int typpe1=neewGet22(Typpe1);float DD2=Summ2(Ittems,Summmoney);float DD3
60、=newwGet2(MainnCode.Exchaange);if(typee1=200003) /國國際空運 floaat D1=newGeet2(MMainCoode.Reelateiid_XCoode.xEExtraFFieldss03); newSSet2(Pricee,D1*1.5);else iff(typee1=200004) /保保險 newSSet2(Pricee,D2*0.00229*1.11);else iff(typee1=200014) /代代理費 newwSet2(Pricce,D22*D3*00.01/1100);else iff(typee1=200001) /
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店照明設(shè)計對顧客用餐心情的影響
- 家庭辦公環(huán)境的衛(wèi)生與健康改善措施
- 臨時勞動合同續(xù)簽協(xié)議
- 臨時工程合作合同范例
- 臨時工雇傭合同協(xié)議
- 中央空調(diào)系統(tǒng)維修保養(yǎng)合同
- 上海商業(yè)地產(chǎn)營銷代理合同
- 交通運輸設(shè)備合作協(xié)議
- 上市公司債券發(fā)行專項法律服務(wù)合同
- 臨街商鋪租賃合同書
- 社會主義發(fā)展史(齊魯師范學(xué)院)知到智慧樹章節(jié)答案
- 2023年高考真題-地理(遼寧卷) 含解析
- 課程思政融入高職院校應(yīng)用文寫作課程教學(xué)路徑探析
- 2024全新鋼結(jié)構(gòu)安全培訓(xùn)
- 2025屆高三數(shù)學(xué)一輪復(fù)習(xí)-分段函數(shù)專項訓(xùn)練【含答案】
- 腰椎間盤突出癥課件(共100張課件)
- 《工程力學(xué)》課程教學(xué)大綱
- 2024至2030年中國女裝行業(yè)市場發(fā)展監(jiān)測及投資前景展望報告
- 7.1.2 直觀圖的畫法-【中職專用】高一數(shù)學(xué)教材配套課件(高教版2021·基礎(chǔ)模塊下冊)
- 皮膚癬菌病的分子診斷工具
- SL+575-2012水利水電工程水土保持技術(shù)規(guī)范
評論
0/150
提交評論