PROGRESS语言在ERP中的应用.doc
《PROGRESS语言在ERP中的应用.doc》由会员分享,可在线阅读,更多相关《PROGRESS语言在ERP中的应用.doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流PROGRESS语言在ERP中的应用01-5-22 上午 11:02:00PROGRESS语言PROGRESS语言是一种非可视化的编程语言,符合4GL规范,具有高级语言的优点,可以进行条件选择(IF、WHERE)、嵌套循环(FOR)、计算(如求和、求平均)等操作,还可以直接进行打印、显示(PUT、DISPLAY),并且不区分大小写。PROGRESS源程序一般由4部分组成:全局变量定义、图形变量定义(一般是用户指定的查询选择条件)、输出数据的格式和主程序(如何利用数据库中的字段生成用户需要的正确数据)。全局变量的定义全局变量用DEFINE VA
2、RIABLE 关键字定义。格式如下:DEFINE VARIABLE W1 LIKE(数据格式INTEGER,CHARACTER)DEFINE VARIALBE W2 AS VARIABLE2 使用AS可以直接引用已经定义好的数据格式。比如我们要把某个变量定义成和表中的字段类型一致时,可直接定义如下:DEFINE VARIALBE1 AS 表中定义的字段这样我们就不用再到后台数据库中去查询该字段的数据格式,提高了编程速度。如果这个变量在调用过程中也要用到,则分别定义如下:/在主过程中DEFINE SHARED VARIABLE W1 LIKE (数据格式INTEGER,CHARACTER)/在调
3、用过程中DEFINE NEW SHARED VARIABLE W1 LIKE (数据格式INTEGER,CHARACTER)变量的主要数据类型如下表所示:数据类型缺省格式示例字符型(Character)X(8)Dongnan日期型(Data)99/99/9903/02/99布尔型(Logical)Yes/NoYes浮点型(Decimal)-,9.9912.00整型(Integer)-,.912图形变量的定义图型变量的定义主要是把已经定义好的变量在界面上显示出来。/账户余额查询报表中部分源程序/FORM / 显示一个FORM / 定义一个相当于容器的框 /RECTFRAME AT ROW 1 C
4、OLUMN 1.25RECTFRAMELABEL AT ROW 1 COLUMN 3 NOLABEL VIEWAS TEXT SIZEPIXELS 1 BY 1SKIP(.1) /GUI/ 把变量entity的选择条件显示出来/entity colon 25 label 会计单位 entity1 colon 50 label “至”cname colon 25 label摘要acc colon 25 label 账户acc1 colon 50 label “至”sub colon 25 label 分账户 sub1 colon 50 label “至”ctr colon 25 label 成本
5、中心 ctr1 colon 50 label “至”begdt colon 25 label 生效日期 enddt colon 50 label “至”subflag colon 25 label 汇总分账户ccflag colon 25 label 汇总成本中心rpt_curr colon 25 label 货币with frame a sidelabels attrspace width 80 NOBOX THREED /GUI/cname colon 25 label 摘要第一行在窗口中的显示如下:摘要 方框中是供用户输入的选择条件。报表格式的定义报表格式的定义非常简单,只要用at和to
6、标出相对位置即可:FORM /GUI/ header“期初借方余额” to 65“期初贷方余额” to 85“期间活动金额” to 92 “借方活动金额” to 109“贷方活动金额” to 128“期末借方余额” to 148“期末贷方余额” to 164 skip“Account Description” at 1 “账户 摘要 ” at 1“ ” at 1“” to 85“ ” to 134“ ” to 164 with STREAMIO /GUI/ frame phead1 pagetop width 186.at和to 表示数据在frame phead1 上的相对位置。不同之处在于,
7、at后边的数据表示从该点开始,而to后边的数据表示到该点结束。特别要注意的是,在PROGRESS中,只能画横线,不能画竖线。数据处理对于数据的处理,本文主要介绍如何读取数据,以及在编程时需要注意的地方。我们以账户余额查询报表为例。当在数据库的表中查找数据时,使用下述语句:FOR EACH (表) WHERE (条件)/对表中数据进行处理/对符合条件的每个数据进行处理END 只访问表中指定的一个数据:FIND FIRST OR LAST (表) WHERE (条件)。/对表中数据进行处理END。查找条件之间用OR 或者AND 连接。在PROGRESS中,有两对语句FIRST 和FIRSTOF、L
8、AST和LASTOF,这两个判断语句非常重要,常用于判断循环的开始还是结束以及循环中的分类是开始还是已经结束。FIRST(BREAKGROUP ):当前的循环是循环体的第一次循环则返回TRUE,如果不是则返回FALSE;FIRSTOF(BREAKGROUP ):当前的循环是循环中的分类的第一次循环则返回TRUE,如果不是则返回FALSE;LAST(BREAKGROUP ):当前的循环是循环体的最后循环则返回TRUE,如果不是则返回FALSE;LASTOF(BREAKGROUP ):当前的循环是循环中的分类的最后一次循环则返回TRUE,如果不是则返回FALSE。如果程序需要处理大量的数据,可以使
9、用调用过程。调用过程可以采用.P或者.I文件。它们的区别在于.I文件是包含文件,在编译时不生成相应的.R文件;而.P文件生成相应的.R文件。注意:如果在过程中多次使用到同一个表,必须定义一个BUFFER格式:DEFINE BUFFER WW LIKE (表名)WW为表的别名。如果不定义BUFFER,编译时将出现“TABLE 无法辨别!”的警告。PROGRESS编程其实很简单(一)一、变量定义。变量必须在第一次被使用之前定义,可以定义在程序的任何地方!但是通常为了增加程序的可读性,变量定义都放在程序的开始处!以下是变量定义的几个实例:define variable str01 as string
10、 label DemoString initial hello.def var str02 like str01.def var dt01 as date extent 5.def var inte01 as inte format 9.说明,第一行:str01 是变量名, 变量名不要与系统关键字重复,字符或者下划线开头,比如strModel,_Model ;string 表示变量类型,本例指字符型变量,其它类似的比如integer,date,logical等 ;label 就是后续程序中对变量的描述,比如需要用户输入这个变量值时,系统提示“DemoString ;initial 变量的初始值
11、第二行:def和var都是简写,def是define的简写,var是variable的简写;PROGRESS支持语法简写,但是初学者最好先写全,后面有经验了再简写。like和as的不同点是:as后面直接说明变量类型,而like后面跟另外一个变量或者字段。第三行:extent 5 ,表示该变量是数组变量。第四行:format 9变量格式指定变量的格式一个最大的好处就是预留宽度,这个对变量的输入或者报表的输出都很有用的。比如年份的宽度一定是4位的,那么你就可以指定格式 format 9999。PROGRESS程序每行结束必须有个“.”号!二、注释。注释就是用/*. */ ,可以嵌套,比如/*-注释
12、1 /* 注释2 */ -*/三、记录的显示。如果进入PROGRESS编程模式以后连接了数据库,那么直接显示记录的值即可,比如:for each TABLE_NAME: display TABLE_NAME.end./*显示TABLE_NAME所有字段所有记录*/或者:find first TABLE_NAME.display TABLE_NAME./*显示TABLE_NAME第一条记录所有字段的值*/通常显示记录值都是采用这2种方式!当然,可以按要求显示特殊的字段,比如:for each pt_mstr where pt_model begins E no-lock break by pt_
13、price: disp pt_model pt_price.end.这个程序看起来真的很容易明白,简单说明:1、where 后面带条件,比如 = 等等,这种关系符,对数字、日期或者字符串,都适用;关于条件的几种组合举例:条件1 and 条件2( 条件1or 条件2)and (条件3 or 条件4)not 条件12、no-lock,这是关键字,你只要记住:如果接下来的程序要对记录进行修改,那么不能加no-lock,如果不要,请加上no-lock;3、break by ,就是按某个字段排列,默认是按这个字段的升序,如果降序则后面加上 desc,比如:break by pt_price desc。如
14、果需要多次排列,那么by几次就可以,比如:break by pt_price by pt_date 另外一个常用的显示或者更新记录的语句是find!比如:find pt_mstr where pt_model = mainboard no-lock no-error.find first pt_mstr where pt_price = 10 no-error.find last pt_mstr where pt_price = 10 no-error.说明:1、where后面的条件跟for each语句类似;2、no-lock的作用跟for each的no-lock也是一样的;3、no-er
15、ror,通常是find就加上,否则如果找不到满足条件的记录,系统会出错误提示;而实际上,通常需要在程序自己判断结果;4、find first 就是定位第一天满足条件的记录;find last 定位最后一条满足条件的记录;4、还有一种叫find next,就是定位当前记录的下一条;5、find 和 find first / find last 不同的是,find后面带的条件,通常是满足TABLE的某个唯一索引。关于for each 和 find,这章你只要了解到这里就OK了!四、判断。判断最简单了,就是一个if 条件 then . else .,比如:if str01 = cpu then di
16、sp CPU else disp Not CPU.当然,这个”条件“可能有很复杂的组合。如果,涉及到的动作比较多,那么做法是用do: . end.,比如if str01 = cpu then do: str01 = my cpu. disp CPU.end.else do: str01 = my memory. disp Not CPU.end. if 支持嵌套,怎么嵌套?你自己会了!不是吗?五、循环。PROGRESS的循环功能实在令人不敢恭维,没有when 没有while,没有loop、for什么的,只有一个repeat!不过,用好了这个repeat,一样实现任何功能。通常实现循环的模式:r
17、epeat: /*处理事务*/ if 条件 then leave. /* 退出循环 */end. 现在,你试试用find 和 repeat 实现 for each的功能!六、赋值和计算。 */ ,就是 加 减 乘除了!比如: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命令: un
18、ix COMMANDPROGRESS编程其实很简单(二)PROGRESS程序架构。PROGRESS启动应用程序,通常都是先启动一个主程序,比如mf.p,这个mf.p做一些全局变量设置,并初始化应用程序菜单。当用户执行菜单功能时,实际上是运行菜单所指定的程序!在这种模式下,PROGRESS的程序一般都不大,结构明了可读性很强,每个程序目的非常明确,但是也要遵循一定的准则,方便以后的阅读和修改。一、程序扩展名的设定。.p 主程序(可直接运行,或者编译以后挂主菜单被调用).i 子程序(经常使用的执行某一特定功能,或者为了使主程序易于阅读脱离出来).v 验证程序.w Windows的程序(Window
19、s版的Progress支持可视化的组件编程,组件拉一拉放一放,就自动生成.w的文件了).r 编译后的程序(菜单调用时,实际上是执行.r的程序)二、程序的命名规则。主程序格式: aa + bb + cc + dd.p其中:aa - 系统模块IDbb - 系统功能cc - 程序类型(mt -维护、iq -查询或者rp -报表等)dd - 序列号子程序格式:通常是 主程序a.i 主程序b.i 这样子/关于程序的命名,个人觉得也没必要一定要遵循特定格式,一家公司有自己固定的命名方式,容易区分即可;如果是咨询公司或者系统集成公司,则要先了解客户的命名习惯和规则;同理,下面的“程序头”。三、程序头。以注释
20、的形式,标明尽可能多的程序相关的信息,比如:程序名(路径,不过路径一般都是企业自己规定好了)、作者、菜单号、功能(菜单标题)、创建日期、修改日志等。至于格式,也就是POSE,爱怎么摆怎么摆,清楚明了即可。但是,在同一家公司,风格应该统一。另外,关于修改日志,个人觉得最好在程序头和程序体,都明显说明一下修改的日期和原因,要点。(注释不记入程序长度,所以不要担心程序太长,:p )四、维护类程序模板。注意:为方便说明,注释暂时用“/”,但是在PORGRESS程序里是错误的哈!define variables.mfdtitle.i /程序头,全局变量定义等,是标准QAD的菜单程序就请加上这个,不要问为
21、什么form with frame a. /定义格局(包含输入输出)Mainloop:repeat: prompt-for editing: /通常这里输入主要字段(如果比如订单号,料件名称等) mfnp.i /前后记录显示功能,常用 end. /* ADD/MODI/DELETE */ assign global find if not available /新记录 mfmsg.i 1 1 /类似mfmsg的子程序,都是信息提示类 create assign end. Status = stline2. update go-on (F5 or Ctrl-D)/继续维护剩余字段 if F5 o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PROGRESS 语言 ERP 中的 应用
限制150内