PROGRESS语言在ERP中的应用学习资料.doc
《PROGRESS语言在ERP中的应用学习资料.doc》由会员分享,可在线阅读,更多相关《PROGRESS语言在ERP中的应用学习资料.doc(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Good is good, but better carries it.精益求精,善益求善。PROGRESS语言在ERP中的应用-PROGRESS语言在ERP中的应用01-5-22上午11:02:00PROGRESS语言PROGRESS语言是一种非可视化的编程语言,符合4GL规范,具有高级语言的优点,可以进行条件选择(IF、WHERE)、嵌套循环(FOR)、计算(如求和、求平均)等操作,还可以直接进行打印、显示(PUT、DISPLAY),并且不区分大小写。PROGRESS源程序一般由4部分组成:全局变量定义、图形变量定义(一般是用户指定的查询选择条件)、输出数据的格式和主程序(如何利用数据库中
2、的字段生成用户需要的正确数据)。全局变量的定义全局变量用DEFINEVARIABLE关键字定义。格式如下:DEFINEVARIABLEW1LIKE(数据格式INTEGER,CHARACTER)DEFINEVARIALBEW2ASVARIABLE2使用AS可以直接引用已经定义好的数据格式。比如我们要把某个变量定义成和表中的字段类型一致时,可直接定义如下:DEFINEVARIALBE1AS表中定义的字段这样我们就不用再到后台数据库中去查询该字段的数据格式,提高了编程速度。如果这个变量在调用过程中也要用到,则分别定义如下:/在主过程中DEFINESHAREDVARIABLEW1LIKE(数据格式IN
3、TEGER,CHARACTER)/在调用过程中DEFINENEWSHAREDVARIABLEW1LIKE(数据格式INTEGER,CHARACTER)变量的主要数据类型如下表所示:数据类型缺省格式示例字符型(Character)X(8)Dongnan日期型(Data)99/99/9903/02/99布尔型(Logical)Yes/NoYes浮点型(Decimal)-,9.9912.00整型(Integer)-,.912图形变量的定义图型变量的定义主要是把已经定义好的变量在界面上显示出来。/账户余额查询报表中部分源程序/FORM/显示一个FORM/定义一个相当于容器的框/RECTFRAMEATR
4、OW1COLUMN1.25RECTFRAMELABELATROW1COLUMN3NOLABELVIEWASTEXTSIZEPIXELS1BY1SKIP(.1)/GUI/把变量entity的选择条件显示出来/entitycolon25label会计单位entity1colon50label“至”cnamecolon25label摘要acccolon25label账户acc1colon50label“至”subcolon25label分账户sub1colon50label“至”ctrcolon25label成本中心ctr1colon50label“至”begdtcolon25label生效日期en
5、ddtcolon50label“至”subflagcolon25label汇总分账户ccflagcolon25label汇总成本中心rpt_currcolon25label货币withframeasidelabelsattrspacewidth80NOBOXTHREED/GUI/cnamecolon25label摘要第一行在窗口中的显示如下:摘要方框中是供用户输入的选择条件。报表格式的定义报表格式的定义非常简单,只要用at和to标出相对位置即可:FORM/GUI/header“期初借方余额”to65“期初贷方余额”to85“期间活动金额”to92“借方活动金额”to109“贷方活动金额”to1
6、28“期末借方余额”to148“期末贷方余额”to164skip“AccountDescription”at1“账户摘要”at1“”at1“”to85“”to134“”to164withSTREAMIO/GUI/framephead1pagetopwidth186.at和to表示数据在framephead1上的相对位置。不同之处在于,at后边的数据表示从该点开始,而to后边的数据表示到该点结束。特别要注意的是,在PROGRESS中,只能画横线,不能画竖线。数据处理对于数据的处理,本文主要介绍如何读取数据,以及在编程时需要注意的地方。我们以账户余额查询报表为例。当在数据库的表中查找数据时,使用下
7、述语句:FOREACH(表)WHERE(条件)/对表中数据进行处理/对符合条件的每个数据进行处理END只访问表中指定的一个数据:FINDFIRSTORLAST(表)WHERE(条件)。/对表中数据进行处理END。查找条件之间用OR或者AND连接。在PROGRESS中,有两对语句FIRST和FIRSTOF、LAST和LASTOF,这两个判断语句非常重要,常用于判断循环的开始还是结束以及循环中的分类是开始还是已经结束。FIRST(BREAKGROUP):当前的循环是循环体的第一次循环则返回TRUE,如果不是则返回FALSE;FIRSTOF(BREAKGROUP):当前的循环是循环中的分类的第一次循
8、环则返回TRUE,如果不是则返回FALSE;LAST(BREAKGROUP):当前的循环是循环体的最后循环则返回TRUE,如果不是则返回FALSE;LASTOF(BREAKGROUP):当前的循环是循环中的分类的最后一次循环则返回TRUE,如果不是则返回FALSE。如果程序需要处理大量的数据,可以使用调用过程。调用过程可以采用.P或者.I文件。它们的区别在于.I文件是包含文件,在编译时不生成相应的.R文件;而.P文件生成相应的.R文件。注意:如果在过程中多次使用到同一个表,必须定义一个BUFFER格式:DEFINEBUFFERWWLIKE(表名)WW为表的别名。如果不定义BUFFER,编译时将
9、出现“TABLE无法辨别!”的警告。PROGRESS编程其实很简单(一)一、变量定义。变量必须在第一次被使用之前定义,可以定义在程序的任何地方!但是通常为了增加程序的可读性,变量定义都放在程序的开始处!以下是变量定义的几个实例:definevariablestr01asstringlabelDemoStringinitialhello.defvarstr02likestr01.defvardt01asdateextent5.defvarinte01asinteformat9.说明,第一行:str01是变量名,变量名不要与系统关键字重复,字符或者下划线开头,比如strModel,_Model;s
10、tring表示变量类型,本例指字符型变量,其它类似的比如integer,date,logical等;label就是后续程序中对变量的描述,比如需要用户输入这个变量值时,系统提示“DemoString;initial变量的初始值第二行:def和var都是简写,def是define的简写,var是variable的简写;PROGRESS支持语法简写,但是初学者最好先写全,后面有经验了再简写。like和as的不同点是:as后面直接说明变量类型,而like后面跟另外一个变量或者字段。第三行:extent5,表示该变量是数组变量。第四行:format9变量格式指定变量的格式一个最大的好处就是预留宽度,这
11、个对变量的输入或者报表的输出都很有用的。比如年份的宽度一定是4位的,那么你就可以指定格式format9999。PROGRESS程序每行结束必须有个“.”号!二、注释。注释就是用/*.*/,可以嵌套,比如/*-注释1/*注释2*/-*/三、记录的显示。如果进入PROGRESS编程模式以后连接了数据库,那么直接显示记录的值即可,比如:foreachTABLE_NAME:displayTABLE_NAME.end./*显示TABLE_NAME所有字段所有记录*/或者:findfirstTABLE_NAME.displayTABLE_NAME./*显示TABLE_NAME第一条记录所有字段的值*/通常
12、显示记录值都是采用这2种方式!当然,可以按要求显示特殊的字段,比如:foreachpt_mstrwherept_modelbeginsEno-lockbreakbypt_price:disppt_modelpt_price.end.这个程序看起来真的很容易明白,简单说明:1、where后面带条件,比如=等等,这种关系符,对数字、日期或者字符串,都适用;关于条件的几种组合举例:条件1and条件2(条件1or条件2)and(条件3or条件4)not条件12、no-lock,这是关键字,你只要记住:如果接下来的程序要对记录进行修改,那么不能加no-lock,如果不要,请加上no-lock;3、bre
13、akby,就是按某个字段排列,默认是按这个字段的升序,如果降序则后面加上desc,比如:breakbypt_pricedesc。如果需要多次排列,那么by几次就可以,比如:breakbypt_pricebypt_date另外一个常用的显示或者更新记录的语句是find!比如:findpt_mstrwherept_model=mainboardno-lockno-error.findfirstpt_mstrwherept_price=10no-error.findlastpt_mstrwherept_price=10no-error.说明:1、where后面的条件跟foreach语句类似;2、no
14、-lock的作用跟foreach的no-lock也是一样的;3、no-error,通常是find就加上,否则如果找不到满足条件的记录,系统会出错误提示;而实际上,通常需要在程序自己判断结果;4、findfirst就是定位第一天满足条件的记录;findlast定位最后一条满足条件的记录;4、还有一种叫findnext,就是定位当前记录的下一条;5、find和findfirst/findlast不同的是,find后面带的条件,通常是满足TABLE的某个唯一索引。关于foreach和find,这章你只要了解到这里就OK了!四、判断。判断最简单了,就是一个if条件then.else.,比如:ifstr
15、01=cputhendispCPUelsedispNotCPU.当然,这个”条件“可能有很复杂的组合。如果,涉及到的动作比较多,那么做法是用do:.end.,比如ifstr01=cputhendo:str01=mycpu.dispCPU.end.elsedo:str01=mymemory.dispNotCPU.end.if支持嵌套,怎么嵌套?你自己会了!不是吗?五、循环。PROGRESS的循环功能实在令人不敢恭维,没有when没有while,没有loop、for什么的,只有一个repeat!不过,用好了这个repeat,一样实现任何功能。通常实现循环的模式:repeat:/*处理事务*/if条
16、件thenleave./*退出循环*/end.现在,你试试用find和repeat实现foreach的功能!六、赋值和计算。*/,就是加减乘除了!比如:ttl_amoount=ttl_ammount+dtl_amount.x_a=x_b/x_c.str_ttl=Im+sure!.dt01=today-1.dt01=3/22/2005./*日期*/当然,日期和字符串不能做乘法或者除法!七、其它零星的语法。显示:display简写disp退出编程模式:quit执行UNIX命令:unixCOMMANDPROGRESS编程其实很简单(二)PROGRESS程序架构。PROGRESS启动应用程序,通常都是
17、先启动一个主程序,比如mf.p,这个mf.p做一些全局变量设置,并初始化应用程序菜单。当用户执行菜单功能时,实际上是运行菜单所指定的程序!在这种模式下,PROGRESS的程序一般都不大,结构明了可读性很强,每个程序目的非常明确,但是也要遵循一定的准则,方便以后的阅读和修改。一、程序扩展名的设定。.p主程序(可直接运行,或者编译以后挂主菜单被调用).i子程序(经常使用的执行某一特定功能,或者为了使主程序易于阅读脱离出来).v验证程序.wWindows的程序(Windows版的Progress支持可视化的组件编程,组件拉一拉放一放,就自动生成.w的文件了).r编译后的程序(菜单调用时,实际上是执行
18、.r的程序)二、程序的命名规则。主程序格式:aa+bb+cc+dd.p其中:aa-系统模块IDbb-系统功能cc-程序类型(mt-维护、iq-查询或者rp-报表等)dd-序列号子程序格式:通常是主程序a.i主程序b.i这样子/关于程序的命名,个人觉得也没必要一定要遵循特定格式,一家公司有自己固定的命名方式,容易区分即可;如果是咨询公司或者系统集成公司,则要先了解客户的命名习惯和规则;同理,下面的“程序头”。三、程序头。以注释的形式,标明尽可能多的程序相关的信息,比如:程序名(路径,不过路径一般都是企业自己规定好了)、作者、菜单号、功能(菜单标题)、创建日期、修改日志等。至于格式,也就是POSE
19、,爱怎么摆怎么摆,清楚明了即可。但是,在同一家公司,风格应该统一。另外,关于修改日志,个人觉得最好在程序头和程序体,都明显说明一下修改的日期和原因,要点。(注释不记入程序长度,所以不要担心程序太长,:p)四、维护类程序模板。注意:为方便说明,注释暂时用“/”,但是在PORGRESS程序里是错误的哈!definevariables.mfdtitle.i/程序头,全局变量定义等,是标准QAD的菜单程序就请加上这个,不要问为什么formwithframea./定义格局(包含输入输出)Mainloop:repeat:prompt-forediting:/通常这里输入主要字段(如果比如订单号,料件名称等
20、)mfnp.i/前后记录显示功能,常用end./*ADD/MODI/DELETE*/assignglobalfindifnotavailable/新记录mfmsg.i11/类似mfmsg的子程序,都是信息提示类createassignend.Status=stline2.updatego-on(F5orCtrl-D)/继续维护剩余字段ifF5orCTRL-Dthendo:/判断是否按了删除键,一般定义是F5或者Ctrl+Ddel-yn=yes.mfmsg01.i111del-ynend.End.Statusinput.五、报表类程序的模板。mfdtitle.iformdefinitionsel
21、ectioncriteriapartcolon15part1colon40labelt001.ieffdatecolon15effdate1colon40labelt001.iwithframeaside-labelswidth80./以上4行定义用户输入“限制报表输出”的条件,比如生效日期啊什么的repeat:ifpart1=hi_charthenpart1=“”./如果用户不输任何东西,则默认最大字符或者最小字符,以下类似ifeffdate=low_datetheneffdate=?.ifeffdate1=hi_datetheneffdate1=?.datastatementsselect
22、ioncriteriabcdparm=.mfquoter.ipart/BATCH专用,至今没用过,体会不到好处,哪位帮忙解释一下?mfquoter.ipart1mfquoter.ieffdatemfquoter.ieffdate1mfselbpr.i“printer”132/选择打印机的子程序ifpart1=“”thenpart1=hi_char.ifeffdate=?Theneffdate=low_date.ifeffdate1=?Theneffdate1=hi_date.mfphead.iormfphead2.i/报表头foreachdisplaymfrpchk.iormfrpexit.i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PROGRESS 语言 ERP 中的 应用 学习 资料
限制150内