版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Good is good, but better carries it.精益求精,善益求善。PROGRESS語(yǔ)言在ERP中的應(yīng)用PROGRESS語(yǔ)言在ERP中的應(yīng)用01-5-22上午11:02:00PROGRESS語(yǔ)言PROGRESS語(yǔ)言是一種非可視化的編程語(yǔ)言,符合4GL規(guī)范,具有高級(jí)語(yǔ)言的優(yōu)點(diǎn),可以進(jìn)行條件選擇(IF、WHERE)、嵌套循環(huán)(FOR)、計(jì)算(如求和、求平均)等操作,還可以直接進(jìn)行打印、顯示(PUT、DISPLAY),并且不區(qū)分大小寫。PROGRESS源程序一般由4部分組成:全局變量定義、圖形變量定義(一般是用戶指定的查詢選擇條件)、輸出數(shù)據(jù)的格式和主程序(如何利用數(shù)據(jù)庫(kù)中的
2、字段生成用戶需要的正確數(shù)據(jù))。全局變量的定義全局變量用DEFINEVARIABLE關(guān)鍵字定義。格式如下:DEFINEVARIABLEW1LIKE(數(shù)據(jù)格式INTEGER,CHARACTER)DEFINEVARIALBEW2ASVARIABLE2使用AS可以直接引用已經(jīng)定義好的數(shù)據(jù)格式。比如我們要把某個(gè)變量定義成和表中的字段類型一致時(shí),可直接定義如下:DEFINEVARIALBE1AS表中定義的字段這樣我們就不用再到后臺(tái)數(shù)據(jù)庫(kù)中去查詢?cè)撟侄蔚臄?shù)據(jù)格式,提高了編程速度。如果這個(gè)變量在調(diào)用過程中也要用到,則分別定義如下:/在主過程中DEFINESHAREDVARIABLEW1LIKE(數(shù)據(jù)格式INT
3、EGER,CHARACTER)/在調(diào)用過程中DEFINENEWSHAREDVARIABLEW1LIKE(數(shù)據(jù)格式INTEGER,CHARACTER)變量的主要數(shù)據(jù)類型如下表所示:數(shù)據(jù)類型缺省格式示例字符型(Character)X(8)Dongnan日期型(Data)99/99/9903/02/99布爾型(Logical)Yes/NoYes浮點(diǎn)型(Decimal)-,9.9912.00整型(Integer)-,.912圖形變量的定義圖型變量的定義主要是把已經(jīng)定義好的變量在界面上顯示出來。/賬戶余額查詢報(bào)表中部分源程序/FORM/顯示一個(gè)FORM/定義一個(gè)相當(dāng)于容器的框/RECTFRAMEATRO
4、W1COLUMN1.25RECTFRAMELABELATROW1COLUMN3NOLABELVIEWASTEXTSIZEPIXELS1BY1SKIP(.1)/GUI/把變量entity的選擇條件顯示出來/entitycolon25label會(huì)計(jì)單位entity1colon50label“至”cnamecolon25label摘要acccolon25label賬戶acc1colon50label“至”subcolon25label分賬戶sub1colon50label“至”ctrcolon25label成本中心ctr1colon50label“至”begdtcolon25label生效日期end
5、dtcolon50label“至”subflagcolon25label匯總分賬戶ccflagcolon25label匯總成本中心rpt_currcolon25label貨幣withframeasidelabelsattrspacewidth80NOBOXTHREED/GUI/cnamecolon25label摘要第一行在窗口中的顯示如下:摘要方框中是供用戶輸入的選擇條件。報(bào)表格式的定義報(bào)表格式的定義非常簡(jiǎn)單,只要用at和to標(biāo)出相對(duì)位置即可:FORM/GUI/header“期初借方余額”to65“期初貸方余額”to85“期間活動(dòng)金額”to92“借方活動(dòng)金額”to109“貸方活動(dòng)金額”to12
6、8“期末借方余額”to148“期末貸方余額”to164skip“AccountDescription”at1“賬戶摘要”at1“”at1“”to85“”to134“”to164withSTREAMIO/GUI/framephead1pagetopwidth186.at和to表示數(shù)據(jù)在framephead1上的相對(duì)位置。不同之處在于,at后邊的數(shù)據(jù)表示從該點(diǎn)開始,而to后邊的數(shù)據(jù)表示到該點(diǎn)結(jié)束。特別要注意的是,在PROGRESS中,只能畫橫線,不能畫豎線。數(shù)據(jù)處理對(duì)于數(shù)據(jù)的處理,本文主要介紹如何讀取數(shù)據(jù),以及在編程時(shí)需要注意的地方。我們以賬戶余額查詢報(bào)表為例。當(dāng)在數(shù)據(jù)庫(kù)的表中查找數(shù)據(jù)時(shí),使用下述
7、語(yǔ)句:FOREACH(表)WHERE(條件)/對(duì)表中數(shù)據(jù)進(jìn)行處理/對(duì)符合條件的每個(gè)數(shù)據(jù)進(jìn)行處理END只訪問表中指定的一個(gè)數(shù)據(jù):FINDFIRSTORLAST(表)WHERE(條件)。/對(duì)表中數(shù)據(jù)進(jìn)行處理END。查找條件之間用OR或者AND連接。在PROGRESS中,有兩對(duì)語(yǔ)句FIRST和FIRSTOF、LAST和LASTOF,這兩個(gè)判斷語(yǔ)句非常重要,常用于判斷循環(huán)的開始還是結(jié)束以及循環(huán)中的分類是開始還是已經(jīng)結(jié)束。FIRST(BREAKGROUP):當(dāng)前的循環(huán)是循環(huán)體的第一次循環(huán)則返回TRUE,如果不是則返回FALSE;FIRSTOF(BREAKGROUP):當(dāng)前的循環(huán)是循環(huán)中的分類的第一次循環(huán)
8、則返回TRUE,如果不是則返回FALSE;LAST(BREAKGROUP):當(dāng)前的循環(huán)是循環(huán)體的最后循環(huán)則返回TRUE,如果不是則返回FALSE;LASTOF(BREAKGROUP):當(dāng)前的循環(huán)是循環(huán)中的分類的最后一次循環(huán)則返回TRUE,如果不是則返回FALSE。如果程序需要處理大量的數(shù)據(jù),可以使用調(diào)用過程。調(diào)用過程可以采用.P或者.I文件。它們的區(qū)別在于.I文件是包含文件,在編譯時(shí)不生成相應(yīng)的.R文件;而.P文件生成相應(yīng)的.R文件。注意:如果在過程中多次使用到同一個(gè)表,必須定義一個(gè)BUFFER格式:DEFINEBUFFERWWLIKE(表名)WW為表的別名。如果不定義BUFFER,編譯時(shí)將出
9、現(xiàn)“TABLE無(wú)法辨別!”的警告。PROGRESS編程其實(shí)很簡(jiǎn)單(一)一、變量定義。變量必須在第一次被使用之前定義,可以定義在程序的任何地方!但是通常為了增加程序的可讀性,變量定義都放在程序的開始處!以下是變量定義的幾個(gè)實(shí)例:definevariablestr01asstringlabelDemoStringinitialhello.defvarstr02likestr01.defvardt01asdateextent5.defvarinte01asinteformat9.說明,第一行:str01是變量名,變量名不要與系統(tǒng)關(guān)鍵字重復(fù),字符或者下劃線開頭,比如strModel,_Model;st
10、ring表示變量類型,本例指字符型變量,其它類似的比如integer,date,logical等;label就是后續(xù)程序中對(duì)變量的描述,比如需要用戶輸入這個(gè)變量值時(shí),系統(tǒng)提示“DemoString;initial變量的初始值第二行:def和var都是簡(jiǎn)寫,def是define的簡(jiǎn)寫,var是variable的簡(jiǎn)寫;PROGRESS支持語(yǔ)法簡(jiǎn)寫,但是初學(xué)者最好先寫全,后面有經(jīng)驗(yàn)了再簡(jiǎn)寫。like和as的不同點(diǎn)是:as后面直接說明變量類型,而like后面跟另外一個(gè)變量或者字段。第三行:extent5,表示該變量是數(shù)組變量。第四行:format9變量格式指定變量的格式一個(gè)最大的好處就是預(yù)留寬度,這個(gè)
11、對(duì)變量的輸入或者報(bào)表的輸出都很有用的。比如年份的寬度一定是4位的,那么你就可以指定格式format9999。PROGRESS程序每行結(jié)束必須有個(gè)“.”號(hào)!二、注釋。注釋就是用/*.*/,可以嵌套,比如/*注釋1/*注釋2*/*/三、記錄的顯示。如果進(jìn)入PROGRESS編程模式以后連接了數(shù)據(jù)庫(kù),那么直接顯示記錄的值即可,比如:foreachTABLE_NAME:displayTABLE_NAME.end./*顯示TABLE_NAME所有字段所有記錄*/或者:findfirstTABLE_NAME.displayTABLE_NAME./*顯示TABLE_NAME第一條記錄所有字段的值*/通常顯示記
12、錄值都是采用這2種方式!當(dāng)然,可以按要求顯示特殊的字段,比如:foreachpt_mstrwherept_modelbeginsEno-lockbreakbypt_price:disppt_modelpt_price.end.這個(gè)程序看起來真的很容易明白,簡(jiǎn)單說明:1、where后面帶條件,比如=等等,這種關(guān)系符,對(duì)數(shù)字、日期或者字符串,都適用;關(guān)于條件的幾種組合舉例:條件1and條件2(條件1or條件2)and(條件3or條件4)not條件12、no-lock,這是關(guān)鍵字,你只要記?。喝绻酉聛淼某绦蛞獙?duì)記錄進(jìn)行修改,那么不能加no-lock,如果不要,請(qǐng)加上no-lock;3、breakb
13、y,就是按某個(gè)字段排列,默認(rèn)是按這個(gè)字段的升序,如果降序則后面加上desc,比如:breakbypt_pricedesc。如果需要多次排列,那么by幾次就可以,比如:breakbypt_pricebypt_date另外一個(gè)常用的顯示或者更新記錄的語(yǔ)句是find!比如:findpt_mstrwherept_model=mainboardno-lockno-error.findfirstpt_mstrwherept_price=10no-error.findlastpt_mstrwherept_price=10no-error.說明:1、where后面的條件跟foreach語(yǔ)句類似;2、no-lo
14、ck的作用跟foreach的no-lock也是一樣的;3、no-error,通常是find就加上,否則如果找不到滿足條件的記錄,系統(tǒng)會(huì)出錯(cuò)誤提示;而實(shí)際上,通常需要在程序自己判斷結(jié)果;4、findfirst就是定位第一天滿足條件的記錄;findlast定位最后一條滿足條件的記錄;4、還有一種叫findnext,就是定位當(dāng)前記錄的下一條;5、find和findfirst/findlast不同的是,find后面帶的條件,通常是滿足TABLE的某個(gè)唯一索引。關(guān)于foreach和find,這章你只要了解到這里就OK了!四、判斷。判斷最簡(jiǎn)單了,就是一個(gè)if條件then.else.,比如:ifstr01=
15、cputhendispCPUelsedispNotCPU.當(dāng)然,這個(gè)”條件“可能有很復(fù)雜的組合。如果,涉及到的動(dòng)作比較多,那么做法是用do:.end.,比如ifstr01=cputhendo:str01=mycpu.dispCPU.end.elsedo:str01=mymemory.dispNotCPU.end.if支持嵌套,怎么嵌套?你自己會(huì)了!不是嗎?五、循環(huán)。PROGRESS的循環(huán)功能實(shí)在令人不敢恭維,沒有when沒有while,沒有l(wèi)oop、for什么的,只有一個(gè)repeat!不過,用好了這個(gè)repeat,一樣實(shí)現(xiàn)任何功能。通常實(shí)現(xiàn)循環(huán)的模式:repeat:/*處理事務(wù)*/if條件th
16、enleave./*退出循環(huán)*/end.現(xiàn)在,你試試用find和repeat實(shí)現(xiàn)foreach的功能!六、賦值和計(jì)算。*/,就是加減乘除了!比如:ttl_amoount=ttl_ammount+dtl_amount.x_a=x_b/x_c.str_ttl=Im+sure!.dt01=today-1.dt01=3/22/2005./*日期*/當(dāng)然,日期和字符串不能做乘法或者除法!七、其它零星的語(yǔ)法。顯示:display簡(jiǎn)寫disp退出編程模式:quit執(zhí)行UNIX命令:unixCOMMANDPROGRESS編程其實(shí)很簡(jiǎn)單(二)PROGRESS程序架構(gòu)。PROGRESS啟動(dòng)應(yīng)用程序,通常都是先啟動(dòng)
17、一個(gè)主程序,比如mf.p,這個(gè)mf.p做一些全局變量設(shè)置,并初始化應(yīng)用程序菜單。當(dāng)用戶執(zhí)行菜單功能時(shí),實(shí)際上是運(yùn)行菜單所指定的程序!在這種模式下,PROGRESS的程序一般都不大,結(jié)構(gòu)明了可讀性很強(qiáng),每個(gè)程序目的非常明確,但是也要遵循一定的準(zhǔn)則,方便以后的閱讀和修改。一、程序擴(kuò)展名的設(shè)定。.p主程序(可直接運(yùn)行,或者編譯以后掛主菜單被調(diào)用).i子程序(經(jīng)常使用的執(zhí)行某一特定功能,或者為了使主程序易于閱讀脫離出來).v驗(yàn)證程序.wWindows的程序(Windows版的Progress支持可視化的組件編程,組件拉一拉放一放,就自動(dòng)生成.w的文件了).r編譯后的程序(菜單調(diào)用時(shí),實(shí)際上是執(zhí)行.r的
18、程序)二、程序的命名規(guī)則。主程序格式:aa+bb+cc+dd.p其中:aa系統(tǒng)模塊IDbb系統(tǒng)功能cc程序類型(mt-維護(hù)、iq-查詢或者rp-報(bào)表等)dd序列號(hào)子程序格式:通常是主程序a.i主程序b.i這樣子/關(guān)于程序的命名,個(gè)人覺得也沒必要一定要遵循特定格式,一家公司有自己固定的命名方式,容易區(qū)分即可;如果是咨詢公司或者系統(tǒng)集成公司,則要先了解客戶的命名習(xí)慣和規(guī)則;同理,下面的“程序頭”。三、程序頭。以注釋的形式,標(biāo)明盡可能多的程序相關(guān)的信息,比如:程序名(路徑,不過路徑一般都是企業(yè)自己規(guī)定好了)、作者、菜單號(hào)、功能(菜單標(biāo)題)、創(chuàng)建日期、修改日志等。至于格式,也就是POSE,愛怎么擺怎么
19、擺,清楚明了即可。但是,在同一家公司,風(fēng)格應(yīng)該統(tǒng)一。另外,關(guān)于修改日志,個(gè)人覺得最好在程序頭和程序體,都明顯說明一下修改的日期和原因,要點(diǎn)。(注釋不記入程序長(zhǎng)度,所以不要擔(dān)心程序太長(zhǎng),:p)四、維護(hù)類程序模板。注意:為方便說明,注釋暫時(shí)用“/”,但是在PORGRESS程序里是錯(cuò)誤的哈!definevariables.mfdtitle.i/程序頭,全局變量定義等,是標(biāo)準(zhǔn)QAD的菜單程序就請(qǐng)加上這個(gè),不要問為什么formwithframea./定義格局(包含輸入輸出)Mainloop:repeat:prompt-forediting:/通常這里輸入主要字段(如果比如訂單號(hào),料件名稱等)mfnp.i
20、/前后記錄顯示功能,常用end./*ADD/MODI/DELETE*/assignglobalfindifnotavailable/新記錄mfmsg.i11/類似mfmsg的子程序,都是信息提示類createassignend.Status=stline2.updatego-on(F5orCtrl-D)/繼續(xù)維護(hù)剩余字段ifF5orCTRL-Dthendo:/判斷是否按了刪除鍵,一般定義是F5或者Ctrl+Ddel-yn=yes.mfmsg01.i111del-ynend.End.Statusinput.五、報(bào)表類程序的模板。mfdtitle.iformdefinitionselectionc
21、riteriapartcolon15part1colon40labelt001.ieffdatecolon15effdate1colon40labelt001.iwithframeaside-labelswidth80./以上4行定義用戶輸入“限制報(bào)表輸出”的條件,比如生效日期啊什么的repeat:ifpart1=hi_charthenpart1=“”./如果用戶不輸任何東西,則默認(rèn)最大字符或者最小字符,以下類似ifeffdate=low_datetheneffdate=?.ifeffdate1=hi_datetheneffdate1=?.datastatementsselectioncrit
22、eriabcdparm=.mfquoter.ipart/BATCH專用,至今沒用過,體會(huì)不到好處,哪位幫忙解釋一下?mfquoter.ipart1mfquoter.ieffdatemfquoter.ieffdate1mfselbpr.i“printer”132/選擇打印機(jī)的子程序ifpart1=“”thenpart1=hi_char.ifeffdate=?Theneffdate=low_date.ifeffdate1=?Theneffdate1=hi_date.mfphead.iormfphead2.i/報(bào)表頭foreachdisplaymfrpchk.iormfrpexit.i/報(bào)表結(jié)束en
23、d.mfrtrail.iormftr0801.iormfreset.i/報(bào)表結(jié)束、打印結(jié)束等end.六、查詢類程序模板。這個(gè)比報(bào)表來得要簡(jiǎn)單些了:mfdtitle.iformdefinitionselectioncriteriawithframeaside-labelswidth80.repeat:datastatementselectioncriteriawithframea.mfselprt.i“terminal”80foreachselectioncriteriadisplaymfrpchk.i(maxpage)end.mfreset.i(scrolloutput)mfmsg.i81en
24、d.PROGRESS編程其實(shí)很簡(jiǎn)單(三)這章,重點(diǎn)解釋PROGRESS報(bào)表的精髓first-of()&last-of()。首先給出本章教程用到的示例信息demo表的結(jié)構(gòu)和數(shù)據(jù)。因?yàn)闇y(cè)試環(huán)境只連接了一個(gè)數(shù)據(jù)庫(kù),所以本文所有對(duì)字段的引用都直接寫出來而沒有特別指明表名,如果是多數(shù)據(jù)庫(kù)環(huán)境,則需要帶表名。(比如數(shù)據(jù)庫(kù)名是dtbl,表名是demo,那么對(duì)字段的引用應(yīng)該是:dtbl.demo.mdlno)【結(jié)構(gòu)】【數(shù)據(jù)】1、first-of()&last-of()的語(yǔ)法;先看示例:foreachdemobreakbydemo.vend:iffirst-of(demo.vend)thendispdemo.v
25、end.end./*結(jié)果是顯示hp和ibm兩條記錄*/很明顯可以看出來的就是,每個(gè)first-of或者last-of對(duì)應(yīng)的字段,必須有foreach.breakby來對(duì)應(yīng)它,否則語(yǔ)法錯(cuò)誤(即使first-of的字段是索引也會(huì)出錯(cuò))。比如以下語(yǔ)句會(huì)出錯(cuò):foreachdemono-lock:iffirst-of(demo.vend)thendispdemo.vend.end.2、函數(shù)的功能;first-of()函數(shù)的功能,就是通過breakby對(duì)該字段進(jìn)行排序,然后對(duì)該字段相同的記錄進(jìn)行“預(yù)覽”,當(dāng)?shù)谝淮纬霈F(xiàn)時(shí)發(fā)生!比如,示例中,breakby首先對(duì)demo.vend進(jìn)行排序,這樣會(huì)出現(xiàn)很多ve
26、nd是“hp”和“ibm”的記錄,當(dāng)?shù)谝淮纬霈F(xiàn)“hp”記錄和第一次出現(xiàn)“ibm”記錄時(shí),各顯示一下該vend名稱。last-of()一樣,不同的是“最后一次出現(xiàn)時(shí)發(fā)生”!請(qǐng)看示例:foreachdemobreakbydemo.mdlno:iflast-of(demo.mdlno)thendispdemo.end.這段程序的結(jié)果如下:通過收貨日期和數(shù)量等,可以看到,每條記錄,都是相同“mdlno”的最后一條3、應(yīng)用;通過以上分析,不知道大家有沒有懂的真正的意思呢?現(xiàn)在如果要實(shí)現(xiàn)這樣的報(bào)表,那又該怎么寫程序呢?對(duì)每個(gè)mdlno收貨進(jìn)行合計(jì),然后在mdlno的下一行顯示合計(jì)數(shù),類似這樣的結(jié)果:不看答
27、案自己想想看。參考答案(為方便閱讀暫不用accum()函數(shù)):DEFVARttlASDECI.OUTPUTTOc:demoout.txt.FOREACHdemoBREAKBYdemo.mdlno:ttl=ttl+demo.qty.PUTdemo.mdlnodemo.rcvdtdemo.qtySKIP.IFLAST-OF(demo.mdlno)THENdo:PUT合計(jì)ttlSKIP.ttl=0.END.END.OUTPUTCLOSE.說明:first-of和last-of可以對(duì)應(yīng)多個(gè)breakby的字段,比如可以先按mdlno匯總,再按vendor匯總!DEFINENEWSHAREDBUFFER
28、bufferFORtablePRESELECTLABELlabelSYNTAX語(yǔ)法DEFINENEWSHAREDBUFFERbufferFORtablePRESELECTLABELlabelNEWSHAREDDefinesabufferthatcanbeusedbyotherprocedures.Whentheprocedureusingthisstatementends,thebufferisnolongeravailable.定義能被其他程序用的一個(gè)緩沖。當(dāng)使用這一語(yǔ)句的程序結(jié)束的時(shí)候,緩沖不再可用。SHAREDDefinesabufferthatwascreatedinanotherpr
29、ocedurewiththeDEFINENEWSHAREDBUFFERstatement.定義一個(gè)在其他程序被DEFINENEWSHAREDBUFFER語(yǔ)句創(chuàng)建的緩沖。BUFFERbuffer緩沖Identifiesthenameofthebufferyouwanttodefinetoholdrecordsfromtable.指出你想要定義用來從表中獲得記錄的緩沖名。FORtable對(duì)表Identifiesthenameofthetableforwhichyouaredefininganadditionalbuffer.Thiscanalsobethebuilt-inbuffername,pr
30、oc-text-buffer,todefineabufferthatreturnstablerowsfromastoredprocedure.指出你正在定義的一個(gè)附加緩沖的表名。這也可能是內(nèi)建的緩沖名,proc-本文-緩沖,定義返回來自被儲(chǔ)存的程序的表列的一個(gè)緩沖。Todefineabufferforatabledefinedformultipledatabases,youmighthavetoqualifythetablenamewiththedatabasename.SeetheRecordPhrasereferenceentryformoreinformation.對(duì)一個(gè)為多數(shù)據(jù)庫(kù)定義的
31、表定義一個(gè)緩沖,你可能必須用數(shù)據(jù)庫(kù)名來限定表名。更多信息參見Record短語(yǔ)參考條目。PRESELECT預(yù)先選擇IfyouusethePRESELECToptionwithaDOorREPEATblock,Progresscreatesaninternallistoftherecordsselected.ThePRESELECToptiontellsProgresstoapplythatinternallisttothebufferyoudefine.YoucanalsousethePRESELECToptionintheDEFINESHAREDBUFFERstatement.如果你使用DO或
32、REPEAT塊預(yù)先選定選項(xiàng),PROGRESS創(chuàng)建一個(gè)被選記錄的內(nèi)部目錄。預(yù)先選定選項(xiàng)告訴PROGRESS在你定義的緩沖中應(yīng)用內(nèi)部目錄。你也能使用預(yù)先選定選項(xiàng)在DEFINESHAREDBUFFER語(yǔ)句。LABELlabel標(biāo)簽Specifiesalabelforthebuffer.Thislabelisusedinerrormessagesinplaceofthebuffername.為緩沖指定標(biāo)簽。這標(biāo)簽用于緩沖名所在的錯(cuò)誤信息。例題DEFINEBUFFERother-custFORCustomer.FORMCustomerWITHFRAMEcre-cust.ONLEAVEOFCustomer
33、.Postal-CodeDO:FINDFIRSTother-custWHEREother-cust.Postal-Code=Customer.Postal-Code:SCREEN-VALUEANDother-cust.Cust-numCustomer.Cust-numNO-ERROR.IFAVAILABLE(other-cust)THENDISPLAYother-cust.CityCustomer.Cityother-cust.StateCustomer.Stateother-cust.CountryCustomer.CountryWITHFRAMEcre-cust.ENABLECustome
34、r.CityCustomer.StateCustomer.CountryWITHFRAMEcre-cust.END.CREATECustomer.UPDATECustomerEXCEPTCustomer.CityCustomer.StateCustomer.CountryWITHFRAMEcre-cust.請(qǐng)教問題有下面三個(gè)條件:如果一個(gè)單價(jià)有多次購(gòu)入,且單價(jià)有不同情況,將購(gòu)入情況單價(jià)相同的入庫(kù)數(shù)量累加起來如一件號(hào),有如下單價(jià)(入庫(kù),入庫(kù)總共以單價(jià)入庫(kù))單價(jià)不同的區(qū)分,廠商不同單價(jià)相同區(qū)分開來廠商不同單價(jià)不同區(qū)分看來采購(gòu)單價(jià)一直沒有變的在報(bào)表里面不顯示請(qǐng)問各位大蝦這種程式怎么編寫用零件號(hào)為主搜
35、索項(xiàng),搜索TR_HIST,使用FIRST-OFLAST-OF和BREAKBY.BY進(jìn)行分類匯總,也可以嘗試采用sub-totalby和聚集語(yǔ)句.關(guān)于begins和matches的用法和區(qū)別從英文的意思就很容易區(qū)分:begins就是以“xxxx”字符串開頭matches就是字符串里面包含“xxxx”注意,matches是完全匹配,所以,如果不是完全匹配,比如查找所有包含“usd”字符串的時(shí)候就要用“*usd*!具體使用方法:foreachpt_mstrwherept_partbeginsecr:disppt_part.end.foreachpt_mstrwherept_partmatches*u
36、sdno-lock:/*以u(píng)sd結(jié)尾*/disppt_part.end.DEFVARiASINTINIT0.DEFTEMP-TABLExxFIELDx1ASCHARFORMATx(20).REPEAT:IFi=5THENLEAVE.CREATExx.ASSIGNx1=1230000000a+STRING(i).i=i+1.END./*FOREACHxxWHEREx1BEGINS123.DISPxx.END.FOREACHxxWHEREx1MATCHES123*.DISPxx.END.BEGINS:測(cè)試前一個(gè)字符表達(dá)式是否以第二個(gè)字符表達(dá)式開始。執(zhí)行時(shí)會(huì)盡可能地使用索引。不支持通配府。MATCH
37、ES:比較前一個(gè)字符表達(dá)式是否與第二個(gè)字符表達(dá)式匹配,執(zhí)行過程是遍歷表中所有記錄??梢允褂猛ㄅ涓伌u引玉:唯一循環(huán)repeat使用唯一循環(huán)REPEAT塊的使用REPEAT塊提供隱式循環(huán)和框架分配,以及顯式循環(huán)和框架分配的語(yǔ)法選項(xiàng)。和DO塊一樣,通過使變量遞增到要求的值或指定WHILE表達(dá)式,REPEAT塊可以定義塊的迭代。如果這個(gè)塊未包含這兩個(gè)選項(xiàng)中的任何一個(gè),那么,REPEAT塊就連續(xù)地循環(huán)。換言之,沒有顯式終止條件。PROGRESS向用戶提供結(jié)束REPEAT塊的迭代的隱式方法:按END-ERROR鍵。這個(gè)特性使REPEAT對(duì)重復(fù)性任務(wù)編碼很有用,特別是在你不能斷定,用戶將要完成多少次迭代
38、任務(wù)的場(chǎng)合。終止條件處在用戶的控制之中。按默認(rèn)規(guī)定,PROGRESS顯示信息,通知用戶按END-ERROR結(jié)束這個(gè)塊。使用LEAVE語(yǔ)句,你也可以從程序上控制REPEAT塊的結(jié)束。當(dāng)你需要判斷REPEAT塊中的的條件,并根據(jù)結(jié)果退出這個(gè)塊時(shí),LEAVE語(yǔ)句是有用的。PROGRESS遇到LEAVE語(yǔ)句以后,它繼續(xù)執(zhí)行跟在這個(gè)塊的末尾后面的第一個(gè)語(yǔ)句。使用REPEAT塊把字符鍵入填充字段。按照下述步驟,說明REPEAT塊:DEFVARiASINTEGER./*定義變量*/DEFVARalphabetASCHARACTERFORMATx(30)./*定義alphabet為長(zhǎng)度30的格式*/DEFBU
39、TTONbtn-exitLABELexit./*退出按鈕*/DEFINEFRAMEframe1SKIP(1)/*空行*/alphabetSKIP(1)btn-exitWITHSIDE-LABELSNO-BOXCENTEREDTHREE-D./*SIDE-LABELS同行,NO-BOX無(wú)框,CENTERED居中,THREE-D顏色*/ASSIGNi=ASC(a)./*對(duì)i負(fù)值A(chǔ)升序排列字符*/ENABLEALLWITHFRAMEFRAME1./*i值用于結(jié)構(gòu)frame1*/REPEAT:APPLYCHR(i)TOalphabet./*當(dāng)向單個(gè)字段寫入新數(shù)據(jù)時(shí)執(zhí)行。例如:使用ASSIGN切換開關(guān),
40、在向一個(gè)字段復(fù)制新數(shù)據(jù)時(shí)以前,復(fù)制舊數(shù)據(jù)。*/IFCHR(i)=zTHEN/*CHR函數(shù)返回相當(dāng)于一個(gè)整數(shù)代碼的字符。把字符填入填充字段等于用戶鍵入那個(gè)字符。*/LEAVE./*上述假設(shè)成立跳到程序末尾*/i=i+1./*變量*/END.WAIT-FORCHOOSEOFbtn-exit./*按鈕*/這個(gè)接口一顯示,字母表的字母就迅速地填充字母表字段。當(dāng)然,如果你有一臺(tái)很快的計(jì)算機(jī),你可能只看到循環(huán)的最后結(jié)果整個(gè)字母表。此外,REPEAT塊:可以要么采用TO語(yǔ)法,要么采用WHILE語(yǔ)法,使用顯式循環(huán)。使用這兩個(gè)選項(xiàng)中的一個(gè)建立具有顯式終止條件的循環(huán)。多表之間查詢報(bào)表設(shè)計(jì)?28.1中的字段涉及到下
41、列表,如果我們要編輯一個(gè)報(bào)表程序,比較好的邏輯?1.POD_DET&PRH_HIST:pod_det.pod_nbr=prh_hist.prh_nbr&pod_det.prh_part=prh_hist.prh_part;2.PRH_HIST&PVO_MSTR:PRH_HIST.PRH_PART=PVO_MSTR.PVO_PARTANDPVO_MSTR.PVO_INTERNAL_REF=PRH_HIST.PRH_RECEIVER3.VO_MSTR&AP_MSTR:VD_MSTR.vd_add=AP_MSTR.ap_vend;是否可以給一個(gè)詳細(xì)的分析?下載28.1所有字段信息foreachpod
42、_det,eachprh_histwherepod_nbr=prh_nbrandpod_part=prh_part,eachpvo_mstrwhereprh_part=pvo_partandprh_receiver=pvo_internal_ref,eachvo_mstrwhereprh_last_vo=vo_ref,eachap_mstrwherevo_ref=ap_refandap_type=vo:VD_MSTR.vd_add=AP_MSTR.ap_vend?ifwangtoconnectvdo_deteachvdo_detwherevo_ref=vpo_ref,.ckd_det是付款時(shí)候的金額檢查字段。確認(rèn)的已支付的金額數(shù)。還有貨幣問題,ap_base_amtap_amt,vo_base_appliedandvo_applied.28.1有幾個(gè)表
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州食品工程職業(yè)學(xué)院《工程量清單計(jì)價(jià)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025-2030年中國(guó)戶外運(yùn)動(dòng)光學(xué)產(chǎn)品行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國(guó)紅外探測(cè)器行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 建設(shè)客運(yùn)服務(wù)品牌-促進(jìn)客運(yùn)企業(yè)發(fā)展
- 2025年中國(guó)運(yùn)動(dòng)鞋行業(yè)產(chǎn)銷需求與投資預(yù)測(cè)分析報(bào)告
- 2025年中國(guó)藥用玻璃管行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 機(jī)械產(chǎn)品知識(shí)培訓(xùn)課件
- 二零二五年度房地產(chǎn)工程施工臨時(shí)用電供應(yīng)合同3篇
- 二零二五年度市政工程廉政承諾協(xié)議3篇
- 政策導(dǎo)向、汲取能力與衛(wèi)生公平
- MDR醫(yī)療器械法規(guī)考核試題及答案
- 河南省鄭州高新技術(shù)產(chǎn)業(yè)開發(fā)區(qū)2023-2024學(xué)年三年級(jí)上學(xué)期1月期末科學(xué)試題
- 女裝行業(yè)退貨率分析
- 領(lǐng)導(dǎo)溝通的藝術(shù)
- 純視覺方案算法
- 道士述職報(bào)告
- 綠色貸款培訓(xùn)課件
- 2024年七年級(jí)語(yǔ)文上學(xué)期期末作文題目及范文匯編
- 云南省昆明市五華區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末英語(yǔ)試卷+
- 2023年生產(chǎn)運(yùn)營(yíng)副總經(jīng)理年度總結(jié)及下一年計(jì)劃
- 2023年中考語(yǔ)文標(biāo)點(diǎn)符號(hào)(頓號(hào))練習(xí)(含答案)
評(píng)論
0/150
提交評(píng)論