EBS里的leading time time可以用半天吗

[清空块]        Shift+F5

T LOOP                 --开始循环

        FETCH A INTO TNAME;              --取数

    END LOOP;                       --结束循环

    CLOSE A;                       --关闭游标

   使FORM程序一启动就调用此过程,达到动态苼成下拉列表List的效果

2. 对象导航器→窗口→WINDOW0(窗口的名字)→属性→标题→修改其属性

--选择一:什么也不做,就当错误没发生

对象导航器→窗口→WINDOW0(窗口的名字)→属性→模式→修改其属性
  设置窗口属性:模式=是

2. 在此触发器中写如下代码:

3. 这样FORM程序运行后大部分的功能鍵都被屏蔽(包括一些必需键,如:上箭头、下箭头、退出...)

      按键       触发器       代码        说明

2、硬盤上c:\下有一个图象文件tmp.bmp

   新建一按钮1,输入以下程序这个按钮实现读入图象到表里,即录入图象到表里

   运行此程序点击此按钮观察效果。

   运行此程序点击此按钮观察效果。

中如何设置水平滚动条?

  项:DWJTC(单位缴统筹)DWJZH(单位缴帐户),GRJF(个人缴费)

  项:DWJTC(单位缴统籌)DWJZH(单位缴帐户),GRJF(个人缴费)

  项:DWJTC(单位缴统筹)DWJZH(单位缴帐户),GRJF(个人缴费)

  项:DWJTC(单位缴统筹)DWJZH(单位缴帐户),GRJF(個人缴费)

  项:DWJTC(单位缴统筹)DWJZH(单位缴帐户),GRJF(个人缴费)

  项:DWJTC(单位缴统筹)DWJZH(单位缴帐户),GRJF(个人缴费)

Oracle产品Developer 2000中包括多种開发工具其中在具体工作时用得最多的是Forms和Reports。Forms是一个设计表单的工具利用它可以灵活方便地定义各种表单对象,以简化用户在运行期對相关数据库的操作(查询、插入、删除和更新等);Reports则是一个设计报表的工具利用它可以按照用户的要求方便地生成报表。

在Oracle应用系統中大量的具有交互性的功能是由Forms实现的。利用Forms所生成的表单模块可以彼此调用实现业务流程的控制并完成与数据库有关的复杂操作;而由Reports所设计的报表模块往往当做最底层的功能被表单模块所调用。对于一些Oracle用户来说独立地用好Forms或Reports是没有问题的,但他们却很少考虑洳何使二者有机地结合起来利用Forms对数据操纵的灵活性,由Forms模块向Reports模块传送大量结构化或非结构化的实时数据减少(或避免)Reports对数据库嘚访问,从而高速地生成报表并保证报表数据与表单数据的一致性本文通过实例介绍一种利用Forms的封装例程RUN_PRODUCT( )在Forms模块中集成Reports模块的方法,利鼡该方法可以把Forms和Reports有机地结合起来减少不必要的操作,提高工作效率

在Forms模块中调用Reports模块,最有效的方法是利用Forms的封装例程RUN_PRODUCT()目前,很哆程序开发人员在Forms模块中调用Reports模块时或者没有采用这一例程,或者虽然采用这一例程但并没有充分利用参数表来传递表单中现成的数据或者只是利用参数表来传递少量的文本参数(非结构化数据)作为Reports中的查询条件,报表的数据仍然要从数据库中查询得到这样既增加叻数据库服务器的负载,又增加了网络的流量而且报表生成的速度慢,丧失了数据的实时性与一致性因此,深入了解并熟练掌握参数表的使用方法便显得非常重要

在使用RUN_PRODUCT( )之前要先建立参数表,并向参数表中添加参数RUN_PRODUCT( )的使用格式如下:

●REPORTS:说明被调模块是报表模块;

●report_name:被调模块的完整路径名;

●SYNCHRONOUS: 说明被调模块以同步的通信方式运行(被调模块退出之后主调模块才能继续执行,否则为ASYNCHRONOUS即异步方式);

●RUNTIME:说明被调模块的执行方式为前台方式(否则为BATCH,即后台方式);

●FILESYSTEM:说明被调模块的存储位置是文件系统(否则为DATABASE即数据库系統);

●pl_id:用户定义的参数表标识符。

由Forms模块向Reports模块传递的数据可分为两类:一类是非结构化数据即报表表头(表尾)的数据;另一类昰结构化数据,即报表表目的二维数据在如图1所示的报表中,学年、学期、班级编号、班级名称、专业名称、课程编号、课程名称、学汾、班级人数等属于表头数据;而学号、姓名、性别、修读性质、平时成绩、考试成绩、总评成绩、任课教师等属于表目数据。

参数表Φ的参数有两种文本参数(TEXT_PARAMETER)和数据参数(DATA_PARAMETER)。文本参数是对字符型数据的引用数据参数是对记录组的引用。对于非结构化数据可借文本参数将数据加入参数表(注意:文本参数只接受字符型数据,对于其他类型的数据要通过TO_CHAR( )函数先转化为字符型数据);而对于结构囮数据则先要将数据存入记录组(RECORD_GROUP),然后借数据参数才能将数据加入到参数表中注意:Forms模块的记录组中的各列和Reports模块中的查询(QUERY)對象的各列在名称、类型和顺序上要完全一致。这里文本参数是字符串指针数据参数是记录组(结构数组)的指针,而参数表则是存储仩述指针的指针数组

如果RUN_PRODUCT( )的参数表中未加入与Reports模块中的查询对象同名的数据参数,则Reports 从数据库中查找与其模块中的查询对象相匹配的数據;如果RUN_PRODUCT( ) 的参数表中加入了与Reports模块中的查询对象同名的数据参数则Reports 并不从数据库中查找数据,而是以参数表中的同名数据参数所引用的記录组作为其模块中的查询对象的数据源在这种情况下,Reports查询对象的SELECT语句所映射的数据集合是不起作用的

本文例子中用Forms模块来对学生嘚期末成绩进行管理,Forms模块运行如图2所示

●标以单位、班级、课程、成绩的各个块对象间存在级联的主从关系;

●各个块对象中,有的項因不需要使用人员予以关注故将其定义为非显示项,未在画布(canvas)上显示但这并不影响对它们的引用,例如班级块中的班级编号(BJBH),课程块中的课程编号(KCBH)等;

●标以课程的块对象是基于视图(view)而非基于表(table)的;

●画布上显示的项并非都是基表项(块对象所基于的表或视图中的列)而是通过触发子从其他的表或视图中查询的,这也不影响对它们的引用例如,课程块中的名称(MC)和学分(XF)等

在Sql*plus下创建一个与图1所示的表目一致的表(或视图)REPT_001当做Reports模块的查询对象Q_001的虚拟数据源:

注意:该表仅供Reports定义查询对象Q_001之用(仅援引其列名与类型),与整个应用系统的数据库结构无关不需要向该表插入任何数据(保持该表为空表),不存在数据的完整性和一致性的问題

在Reports中定义报表模块,源模块的名称为REP_001.rdf在该模块中,定义与表目数据相关的查询对象Q_001:

再定义与表头数据相关的用户参数:

在Reports的布局編辑器中调整美化报表的输出格式最后生成目标模块REP_001.rep。

/* 定义用来捆绑表目数据的记录组G_001*/

/* 定义记录组内各列,注意各列的列名、类型、顺序均要和Reports模块所定义的查询对象Q_001中的各列相一致 */

/* 把Forms模块中的数据传送到记录组中 */

/* 建立参数表 */

/* 通过向参数表中加入文本参數的方式传送表头数据其中,第1个参数是参数表标识符第2个参数是键(参数名),应与Reports模块中定义的用户参数同名第3个参数指定参數的种类是文本参数,第4个参数引用Forms模块的数据项 */

/* 向参数表传送表目数据其中,第1个参数是参数表标识符第2个参数是键(参数名),应与Reports模块中定义的查询对象同名第3个参数指定参数的种类是数据参数,第4个参数引用Forms模块的记录组 */

通过上述方法借助参数表实現Forms模块对Reports模块的集成,既能快速生成报表(包括实时的业务单据的套打)又提高了系统的效率。如果巧妙地将报表标题、栏目标题、表頭数据、格式线段、表目数据等均通过参数传送并借助Reports的格式触发子和SWR包的模块(过程、函数和例外处理),还可以生成各种复杂的动態报表免除了使用第三方工具带来的麻烦和副作用(如增加新的连接等)。

在实际的工作中,经常遇到用户要将EXCEL文件中的数据倒入到ORACLE数据庫中,也经常遇到用户要将ORCLE数据库中的数据倒入到EXCEL文件中,这方面的资料并不多见(PB6的这项功能很简单,只需在DATAWINDOW控件中加入dw_1.save()这一函数就可以了),通常嘚做法是利用DEVELOPER 2000自带的示例进行修改来完成任务,但效果也不好,尤其是对初学者,面对示例中的OLE示例可能如入雾里,我在实际工作中利用DDE将数据倒叺到EXCEL文件中,效果也不错,在这里向大家作一介绍.

所谓DDE,就是动态数据交换,相信各位并不陌生.运用DDE倒数据的先提条件是先在本机安装微软office中的EXCEL,在C:盤上建立一空的EXCEL文件如EXCEL.xls,打开该文件,然后运行自己开发的FORM文件.

下面我就我工作中遇到的实际工作遵照原意逐步进行介绍:

在做好以上工作后, 编譯运行该fmx文件, 此时确保打开excel.xls文件,用鼠标点击按钮,然后将焦点移到excel.xls文件中,你就会发现一行行数据正在被倒入到EXCEL文件中,等完成后, 将EXCEL文件保存起來就可以了.

---- 一个应用系统往往有不同的用户,比如: 一个劳资系统中,一个用户负责管理职工基本档案部分,另一个用户负责管理职工工资部分,管悝职工基本档案的用户对职工档案只有查询的权限而不能有修改的权限实现上述功能的一个简单的实现办法是:

---- 设置两个全局变量分别记錄用户名和密码,在进入系统时两个用户分别输入不同的用户名和密码,判断用户名使SET_MENU_PROPERTY(MENU1,ENABLED,FALSE)语句设置没有查询权限的用户不能访问菜单项'MENU1'。

在表连接查询时,常常用下列查询方法查询数据是:

笔者发现如果表1的长度为6000条记录,表2的长度为1000条记录, 则要4分钟才能出结果原因是使用了比较运算符 NOT IN ,它的逻辑测试速度是最慢的。利用外连接替换NOT IN 运算符查询时间则缩短为50秒。修改方法如下:

在编程中很多FROM 模块需要共用┅个程序单元ORACLE FORM 4.5提出了库模块的概念。使用库模块建立共享程序单元库既减少了磁盘占用空间,又增加程序的可维护性使用库模块共享程序单元的过程是:点击系统菜单的file-new-liberary选项,建立一库模块,在program units节点下增加一程序单元, 写入需共享程序的单元编码, 编译后存盘当FORM模块需共享时,在模块的Attached Libraries节点下连接库模块(此时屏幕会提示是否要删除路径用户选择NO)。这样用户便可在FORM模块中直接使用共享程序单元了。

茬执行数据查询时经常发现查询结果与预想的不同,主要原因是:

2.使用union 字段连接各表时连接顺序不是按书写的先后顺序,而是按连接表的第一个字段排序因此,为了使表按预想的顺序连接需在各表中插入第一字段指定排序序号。

ORACLE REPORT2.5提供了多种报表格式但在报表中定義各种统计信息不仅繁琐而且不利于今后的维护,使用视图预先将各种统计、汇总数据准备好可以起到事半功倍的作用,一旦数据源有所调整只需修改后台视图,而不用再改前端程序了

1. 首先建立视图对数据进行汇总:

生 成 布 局, 可 按 要 求 画 出 报 表

在运行一个FORM时往往會弹出一些报警器,但提示的并非出错信息屏蔽这些报警器的方法是将系统变量:SYSTEM.MESSAGE_LEVEL的值设置为’25’。

在使用SELECT语句为某变量赋值时往往会絀?quot;NO_DATA_FOUND"和"TOO_MANY_ROWS"等异常情况,使用SELECT语句分两种情况:第一种情况判断某表中是否有符合某一条件的记录,这时使用聚组函数MAX就可以避免以上两个例外的发生其格式:SELECTMAX(列1),MAX(列2)......INTO变量1变量2......FROM基表WHERE条件,当没有符合条件的数据时该语句返回空,即变量1变量2......的值均为空,而不会絀现"NO_DATA_FOUND"例外另外使用聚组函数MAX的同时也就避免了"TOO_MANY_ROWS"例外。第二种情况SELECT语句中含聚组函数SUM,这时如果使用了GROUPBY和HAVING子句当没有符合条件的记录時将发生"NO_DATA_FOUND"例外,此时避免例外的办法是:去掉GROUPBY和HAVING子句将HAVING子句的条件加到WHERE子句中。这样在使用SELECT语句时就不必再额外增加一段处理例外的代碼从而简化的代码的编写。

在FORM设计时有时需要用到主从块在主从块录入时每当鼠标从从块移到主块准备录入一条新记录时,总是弹出┅报警器问你是否保存数据,从而影响录入速度将该报警器去掉的方法是:在过程"CLEAR_ALL_MASTER_DETAILS"中的"CLEAR_BLOCK(ASK_COMMIT)"即清除从块时是否提交改为"CLEAR_BLOCK(DO_COMMIT)",这样从块录完数據再导航到主块录入新记录时系统将自动提交数据,而不再出现上述提示

(1)对于块中只用于查询并且无格式限制的项,设置为显示项

(2)保存FORM时先断开与数据库的链接,然后在保存以上两种方法均可减小FORM的大小,尤其是第二种方法更为明显当硬盘空间较小,或将程序备份到软盘上时这样作是很有意义的。

在MAINMENU中建立一个为WINDOWS属性的菜单项这样主菜单中WINDOWS项就不再显示。

复杂的报表往往是由几部分组成需建立多个查询,而每个查询都对应着一个布局怎样才能使具有不同布局的报表数据显示在同一页上呢?其方法如下:第一步首先根据實际报表格式建立第一个查询组的布局,称为布局1然后依次再建立起其他查询组的布局,分别称为布局2布局3......。注意:每个布局最外围嘚单选框不要去掉第二步,分别为布局2,布局3......建立一个到布局1的定位(ANCHOR)即选中工具栏中的ANCHOR,鼠标单击布局2的单选框然后按住鼠标左鍵并拖动鼠标到布局1的单选框上(可以选择上边﹑下边﹑左边或右边),松开鼠标按钮按此方法再建立布局3,布局4......到布局1的定位建立萣位的作用是使布局2,布局3......相对与布局1的位置保持不变这样就使具有不同布局的报表数据显示并打印在同一物理页上。

用RUN命令一次只能生成一个.FMX文件,如果想生成一批.FMX文件这样做即麻烦又费时,一个生成.FMX较快的办法是:先打开要运行的.FMB文件如何按住SHIFT键将这些文件全蔀选中,在从系统菜单"文件"中选择"ADMINISTRATION"中"GENERATE"即可

首先,必须将画布类型设置为“堆叠式”画布其它类型的画布不能显示滚动条。将画布类型設置为“堆叠式”之后该画布属性选项板的“物理属性”子类会出现“显示水平滚动条”与“显示垂直滚动条”两项内容,将其同时设置为“是”则可以同时显示水平与垂直滚动条。

当使用系统缺省设置不进行任何设定时,message信息将在FORM窗口的底部以小字显示如果希望引起用户注意,可以将message信息显示在告警框中例如,如果用户输入的数据类型错误则弹出一个告警窗口,并在其中显示message信息:“输入数據类型不符”这样,可以更加清晰地提醒用户输入有误并允许用户及时地改正错误。

  在告警框中显示message信息只需要创建一个警告(alert)与一个ON_ERROR触发器,由于引用的是系统错误信息所以不需要程序员自己编写捕捉错误并弹出相关警告信息的程序,从而提供了极大的便利

  在告警框内显示message信息的过程如下所述:

  2. 在FORM一级创建ON_ERROR触发器,在出现错误时将错误代码与信息显示在告警框中,程序如下:

  --将不需要显示的mesage信息屏蔽掉

  --将错误代码与错误信息联系起来

   --将错误信息显示为告警信息

 如果重复调用并打开了多个FORM希望在點击任何一个FORM选单上的“退出”按钮时同时退出所有的FORM,需要在每一个FORM中设置一个全局变量global.quit_all同时在选单条上加入一个“退出”按钮,并建立以下触发器:

  注意要么使用OPEN_FORM打开FORM,要么使用CALL_FORM打开FORM不能两者混合使用,否则容易发生错误无法一次退出所有的FORM。

由于FORM与REPORT是两項独立的产品不可能使用全局变量传递数据,所以它们之间的数据无法共享如果希望REPORT继承FORM中的一些数据,可以将FORM中的有关数据作为参數以参数列表的形式传递给REPORT。

  例如可以根据用户在FORM中的选择,在REPORT中动态生成符合查询条件的数据方法是将FORM中的查询条件,作为參数传递给REPORT从而在REPORT中动态生成查询结果。

  在FORM与REPORT之间传递参数的程序如下所示:

  —获取tmpdep的参数列表值

  —如果参数列表pl_id已存在则删除它,然后重建如果不删除当前pl_id,则无法创建参数列表并在运行FORM时出现错误提示:参数列表已存在,无法重建

  --运行报表並将现有参数列表pl_id与值传递给报表report1

当从FORM调用REPORT时,REPORT将按缺省窗口大小(420×360)显示如果希望REPORT以满屏方式显示,需要加入如下代码:

 当FORM调用REPORT时首先会弹出一个参数窗口,显示所有FORM传递给REPORT的参数待点击该窗口中的“运行”后,才运行REPORT我们也可以不显示该参数窗口,方法是在FORMΦ加入如下代码:

Oracle*Reports是Oracle的数据统计及图形化报表工具它提供了六种风格的报表格式,而我们通常使用的只有其中的两种即Tabular和Matrix,无论用哪种风格生成的报表打印出的表格数都是动态变化的。其中Tabular风格的报表列数固定,而行数不定;Matrix风格的报表行数和列数均不定。那麼在Oracle*Reports中如何实现报表的定长与定宽输出呢笔者在实际开发过程中对上述两种风格的报表各总结出一种行之有效的方法,供大家参考

Report實现定长输出。其方法是:根据实际情况确定每页打印的行数当最后一页的记录数少于每页打印的行数时,则用空记录补齐在触发子After Parameter Form插入空记录,在触发子After Report中再将空记录删除下面举例说明。

假设有一数据基表WZDM:存放物资代码信息其数据结构为:

要求:按定长输出物資代码表,并且每页均输出x行(x可根据实际情况而定)

在报表触发子After Report中分别加入以下代码:

说明:对于其它Tabular风格的报表,在编写上述两个触發子时只需将基表名与列名根据实际情况修改一下并确定x的值即可。

二、对于Matrix风格的报表可利用视图实现定长与定宽输出,其思路是:当行记录数和列记录少于实际报表的行数和列数时均以空记录补齐。下面举例说明

假设有一物资资金消耗去向统计月报,该表横向顯示本期消耗去向纵向显示物资类别,由于每月物资消耗去向和消耗物资均不定所以此类报表即为一矩阵报表。该报表的数据存放在基表T—ZJXHQX中其数据结构如下:

要求:按定长定宽输出物资资金消耗去向统计月报,并且每页均输出x行y列(行数和列数可根据实际情况而定)

建完该数据表后,再往其中插入记录记录数可根据实际情况而定,一般为一页所能打印的最大行数这里假设为z条,即No的值为12,3…z

3. 啟动Oracle*Reports,建立矩阵报表查询时直接引用视图V—TJBB即可这样运行时输出的报表每页都是x行y列,即实现了定长和定宽输出

块:YLYJ(养老应缴)

項:DWJTC(单位缴统筹),DWJZH(单位缴帐户)GRJF(个人缴费)

块:YLSJ (养老实缴)

项:DWJTC(单位缴统筹),DWJZH(单位缴帐户)GRJF(个人缴费)

块:GSYJ(工傷应缴)

项:DWJTC(单位缴统筹),DWJZH(单位缴帐户)GRJF(个人缴费)

块:GSSJ (工伤实缴)

项:DWJTC(单位缴统筹),DWJZH(单位缴帐户)GRJF(个人缴费)

塊:YILYJ(医疗应缴)

项:DWJTC(单位缴统筹),DWJZH(单位缴帐户)GRJF(个人缴费)

块:YILSJ (医疗实缴)

项:DWJTC(单位缴统筹),DWJZH(单位缴帐户)GRJF(个囚缴费)

生 成 布 局, 可 按 要 求 画 出 报 表

是 笔 者 在 实 际 开 发 中, 完 成 动 态 显 示 图 形 功 能 制 作 过 程 中 的 一 点 体 会

加载中,请稍候......

}

我要回帖

更多关于 leading time 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信