PROGRESS语言在ERP中的应用学习资料_第1页
PROGRESS语言在ERP中的应用学习资料_第2页
PROGRESS语言在ERP中的应用学习资料_第3页
PROGRESS语言在ERP中的应用学习资料_第4页
PROGRESS语言在ERP中的应用学习资料_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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(数据格式INT

3、EGER,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/定义一个相当于容器的框/RECTFRAMEATRO

4、W1COLUMN1.25RECTFRAMELABELATROW1COLUMN3NOLABELVIEWASTEXTSIZEPIXELS1BY1SKIP(.1)/GUI/把变量entity的选择条件显示出来/entitycolon25label会计单位entity1colon50label“至”cnamecolon25label摘要acccolon25label账户acc1colon50label“至”subcolon25label分账户sub1colon50label“至”ctrcolon25label成本中心ctr1colon50label“至”begdtcolon25label生效日期end

5、dtcolon50label“至”subflagcolon25label汇总分账户ccflagcolon25label汇总成本中心rpt_currcolon25label货币withframeasidelabelsattrspacewidth80NOBOXTHREED/GUI/cnamecolon25label摘要第一行在窗口中的显示如下:摘要方框中是供用户输入的选择条件。报表格式的定义报表格式的定义非常简单,只要用at和to标出相对位置即可:FORM/GUI/header“期初借方余额”to65“期初贷方余额”to85“期间活动金额”to92“借方活动金额”to109“贷方活动金额”to12

6、8“期末借方余额”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;st

10、ring表示变量类型,本例指字符型变量,其它类似的比如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、breakb

13、y,就是按某个字段排列,默认是按这个字段的升序,如果降序则后面加上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-lo

14、ck的作用跟foreach的no-lock也是一样的;3、no-error,通常是find就加上,否则如果找不到满足条件的记录,系统会出错误提示;而实际上,通常需要在程序自己判断结果;4、findfirst就是定位第一天满足条件的记录;findlast定位最后一条满足条件的记录;4、还有一种叫findnext,就是定位当前记录的下一条;5、find和findfirst/findlast不同的是,find后面带的条件,通常是满足TABLE的某个唯一索引。关于foreach和find,这章你只要了解到这里就OK了!四、判断。判断最简单了,就是一个if条件then.else.,比如:ifstr01=

15、cputhendispCPUelsedispNotCPU.当然,这个”条件“可能有很复杂的组合。如果,涉及到的动作比较多,那么做法是用do:.end.,比如ifstr01=cputhendo:str01=mycpu.dispCPU.end.elsedo:str01=mymemory.dispNotCPU.end.if支持嵌套,怎么嵌套?你自己会了!不是吗?五、循环。PROGRESS的循环功能实在令人不敢恭维,没有when没有while,没有loop、for什么的,只有一个repeat!不过,用好了这个repeat,一样实现任何功能。通常实现循环的模式:repeat:/*处理事务*/if条件th

16、enleave./*退出循环*/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编译后的程序(菜单调用时,实际上是执行.r的

18、程序)二、程序的命名规则。主程序格式: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:/通常这里输入主要字段(如果比如订单号,料件名称等)mfnp.i

20、/前后记录显示功能,常用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.iformdefinitionselectionc

21、riteriapartcolon15part1colon40labelt001.ieffdatecolon15effdate1colon40labelt001.iwithframeaside-labelswidth80./以上4行定义用户输入“限制报表输出”的条件,比如生效日期啊什么的repeat:ifpart1=hi_charthenpart1=“”./如果用户不输任何东西,则默认最大字符或者最小字符,以下类似ifeffdate=low_datetheneffdate=?.ifeffdate1=hi_datetheneffdate1=?.datastatementsselectioncrit

22、eriabcdparm=.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/报表结束en

23、d.mfrtrail.iormftr0801.iormfreset.i/报表结束、打印结束等end.六、查询类程序模板。这个比报表来得要简单些了:mfdtitle.iformdefinitionselectioncriteriawithframeaside-labelswidth80.repeat:datastatementselectioncriteriawithframea.mfselprt.i“terminal”80foreachselectioncriteriadisplaymfrpchk.i(maxpage)end.mfreset.i(scrolloutput)mfmsg.i81en

24、d.PROGRESS编程其实很简单(三)这章,重点解释PROGRESS报表的精髓first-of()&last-of()。首先给出本章教程用到的示例信息demo表的结构和数据。因为测试环境只连接了一个数据库,所以本文所有对字段的引用都直接写出来而没有特别指明表名,如果是多数据库环境,则需要带表名。(比如数据库名是dtbl,表名是demo,那么对字段的引用应该是:dtbl.demo.mdlno)【结构】【数据】1、first-of()&last-of()的语法;先看示例:foreachdemobreakbydemo.vend:iffirst-of(demo.vend)thendispdemo.v

25、end.end./*结果是显示hp和ibm两条记录*/很明显可以看出来的就是,每个first-of或者last-of对应的字段,必须有foreach.breakby来对应它,否则语法错误(即使first-of的字段是索引也会出错)。比如以下语句会出错:foreachdemono-lock:iffirst-of(demo.vend)thendispdemo.vend.end.2、函数的功能;first-of()函数的功能,就是通过breakby对该字段进行排序,然后对该字段相同的记录进行“预览”,当第一次出现时发生!比如,示例中,breakby首先对demo.vend进行排序,这样会出现很多ve

26、nd是“hp”和“ibm”的记录,当第一次出现“hp”记录和第一次出现“ibm”记录时,各显示一下该vend名称。last-of()一样,不同的是“最后一次出现时发生”!请看示例:foreachdemobreakbydemo.mdlno:iflast-of(demo.mdlno)thendispdemo.end.这段程序的结果如下:通过收货日期和数量等,可以看到,每条记录,都是相同“mdlno”的最后一条3、应用;通过以上分析,不知道大家有没有懂的真正的意思呢?现在如果要实现这样的报表,那又该怎么写程序呢?对每个mdlno收货进行合计,然后在mdlno的下一行显示合计数,类似这样的结果:不看答

27、案自己想想看。参考答案(为方便阅读暂不用accum()函数):DEFVARttlASDECI.OUTPUTTOc:demoout.txt.FOREACHdemoBREAKBYdemo.mdlno:ttl=ttl+demo.qty.PUTdemo.mdlnodemo.rcvdtdemo.qtySKIP.IFLAST-OF(demo.mdlno)THENdo:PUT合计ttlSKIP.ttl=0.END.END.OUTPUTCLOSE.说明:first-of和last-of可以对应多个breakby的字段,比如可以先按mdlno汇总,再按vendor汇总!DEFINENEWSHAREDBUFFER

28、bufferFORtablePRESELECTLABELlabelSYNTAX语法DEFINENEWSHAREDBUFFERbufferFORtablePRESELECTLABELlabelNEWSHAREDDefinesabufferthatcanbeusedbyotherprocedures.Whentheprocedureusingthisstatementends,thebufferisnolongeravailable.定义能被其他程序用的一个缓冲。当使用这一语句的程序结束的时候,缓冲不再可用。SHAREDDefinesabufferthatwascreatedinanotherpr

29、ocedurewiththeDEFINENEWSHAREDBUFFERstatement.定义一个在其他程序被DEFINENEWSHAREDBUFFER语句创建的缓冲。BUFFERbuffer缓冲Identifiesthenameofthebufferyouwanttodefinetoholdrecordsfromtable.指出你想要定义用来从表中获得记录的缓冲名。FORtable对表Identifiesthenameofthetableforwhichyouaredefininganadditionalbuffer.Thiscanalsobethebuilt-inbuffername,pr

30、oc-text-buffer,todefineabufferthatreturnstablerowsfromastoredprocedure.指出你正在定义的一个附加缓冲的表名。这也可能是内建的缓冲名,proc-本文-缓冲,定义返回来自被储存的程序的表列的一个缓冲。Todefineabufferforatabledefinedformultipledatabases,youmighthavetoqualifythetablenamewiththedatabasename.SeetheRecordPhrasereferenceentryformoreinformation.对一个为多数据库定义的

31、表定义一个缓冲,你可能必须用数据库名来限定表名。更多信息参见Record短语参考条目。PRESELECT预先选择IfyouusethePRESELECToptionwithaDOorREPEATblock,Progresscreatesaninternallistoftherecordsselected.ThePRESELECToptiontellsProgresstoapplythatinternallisttothebufferyoudefine.YoucanalsousethePRESELECToptionintheDEFINESHAREDBUFFERstatement.如果你使用DO或

32、REPEAT块预先选定选项,PROGRESS创建一个被选记录的内部目录。预先选定选项告诉PROGRESS在你定义的缓冲中应用内部目录。你也能使用预先选定选项在DEFINESHAREDBUFFER语句。LABELlabel标签Specifiesalabelforthebuffer.Thislabelisusedinerrormessagesinplaceofthebuffername.为缓冲指定标签。这标签用于缓冲名所在的错误信息。例题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.请教问题有下面三个条件:如果一个单价有多次购入,且单价有不同情况,将购入情况单价相同的入库数量累加起来如一件号,有如下单价(入库,入库总共以单价入库)单价不同的区分,厂商不同单价相同区分开来厂商不同单价不同区分看来采购单价一直没有变的在报表里面不显示请问各位大虾这种程式怎么编写用零件号为主搜

35、索项,搜索TR_HIST,使用FIRST-OFLAST-OF和BREAKBY.BY进行分类汇总,也可以尝试采用sub-totalby和聚集语句.关于begins和matches的用法和区别从英文的意思就很容易区分:begins就是以“xxxx”字符串开头matches就是字符串里面包含“xxxx”注意,matches是完全匹配,所以,如果不是完全匹配,比如查找所有包含“usd”字符串的时候就要用“*usd*!具体使用方法:foreachpt_mstrwherept_partbeginsecr:disppt_part.end.foreachpt_mstrwherept_partmatches*u

36、sdno-lock:/*以usd结尾*/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:测试前一个字符表达式是否以第二个字符表达式开始。执行时会尽可能地使用索引。不支持通配府。MATCH

37、ES:比较前一个字符表达式是否与第二个字符表达式匹配,执行过程是遍历表中所有记录。可以使用通配府。抛砖引玉:唯一循环repeat使用唯一循环REPEAT块的使用REPEAT块提供隐式循环和框架分配,以及显式循环和框架分配的语法选项。和DO块一样,通过使变量递增到要求的值或指定WHILE表达式,REPEAT块可以定义块的迭代。如果这个块未包含这两个选项中的任何一个,那么,REPEAT块就连续地循环。换言之,没有显式终止条件。PROGRESS向用户提供结束REPEAT块的迭代的隐式方法:按END-ERROR键。这个特性使REPEAT对重复性任务编码很有用,特别是在你不能断定,用户将要完成多少次迭代

38、任务的场合。终止条件处在用户的控制之中。按默认规定,PROGRESS显示信息,通知用户按END-ERROR结束这个块。使用LEAVE语句,你也可以从程序上控制REPEAT块的结束。当你需要判断REPEAT块中的的条件,并根据结果退出这个块时,LEAVE语句是有用的。PROGRESS遇到LEAVE语句以后,它继续执行跟在这个块的末尾后面的第一个语句。使用REPEAT块把字符键入填充字段。按照下述步骤,说明REPEAT块:DEFVARiASINTEGER./*定义变量*/DEFVARalphabetASCHARACTERFORMATx(30)./*定义alphabet为长度30的格式*/DEFBU

39、TTONbtn-exitLABELexit./*退出按钮*/DEFINEFRAMEframe1SKIP(1)/*空行*/alphabetSKIP(1)btn-exitWITHSIDE-LABELSNO-BOXCENTEREDTHREE-D./*SIDE-LABELS同行,NO-BOX无框,CENTERED居中,THREE-D颜色*/ASSIGNi=ASC(a)./*对i负值A升序排列字符*/ENABLEALLWITHFRAMEFRAME1./*i值用于结构frame1*/REPEAT:APPLYCHR(i)TOalphabet./*当向单个字段写入新数据时执行。例如:使用ASSIGN切换开关,

40、在向一个字段复制新数据时以前,复制旧数据。*/IFCHR(i)=zTHEN/*CHR函数返回相当于一个整数代码的字符。把字符填入填充字段等于用户键入那个字符。*/LEAVE./*上述假设成立跳到程序末尾*/i=i+1./*变量*/END.WAIT-FORCHOOSEOFbtn-exit./*按钮*/这个接口一显示,字母表的字母就迅速地填充字母表字段。当然,如果你有一台很快的计算机,你可能只看到循环的最后结果整个字母表。此外,REPEAT块:可以要么采用TO语法,要么采用WHILE语法,使用显式循环。使用这两个选项中的一个建立具有显式终止条件的循环。多表之间查询报表设计?28.1中的字段涉及到下

41、列表,如果我们要编辑一个报表程序,比较好的逻辑?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;是否可以给一个详细的分析?下载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是付款时候的金额检查字段。确认的已支付的金额数。还有货币问题,ap_base_amtap_amt,vo_base_appliedandvo_applied.28.1有几个表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论