自定义报表、打印模板开发学习笔记
一、基础了解
1、UBF开发工具的了解
Ideconfig.xml配置
True:打印、报表设计模式
False:单据设计模式
2、开发环境试用
BE:实体项目
BF:操作项目
SV:服务项目
分析项目:打印模板
报表应用项目:报表
二、简单设计报表
1、登录连接
(1)、登录UBF后,连接报表元数据库。
1个报表容器下只能存放1张报表。每新建1张报表,需新建1个报表容器。
(2)、增加数据源
选择"BusinessEntity"表示采用实体建立报表;
选择"StoredProcedure"表示采用存储过程建立报表;
选择"Text"表示采用SQL语句建立报表。
2、实体建立报表:
(1)、新建报表容器、报表
(2)、连接数据源
技巧:server name这个里面输入数据库服务器IP地址比点倒进行三角选择,速度快得多噢!
(3)、增加数据查询
(4)、选择实体(可以选择,也可以选择查找实体,使用查询实体会更快一点)
(5)、选择需要的字段
点击保存后字段即可出现在左边的"字段"栏目中。
将上面在BE中查询的字段选择显示到列表后,可以点击UBF自动的查询功能来预览数据,可以用UBF自带的工具翻译成SQL语句到MSSQL查询里面去查询。(OQL语句支持SQL语句的格式,可根据SQL语句格式自动编辑)如下图:
(6)、字段扩展属性
a、字段扩展属性说明
备选栏目:发布后在报表查询方案的栏目字段中显示在"待选项"列表中;
固定栏目:显示显示在"已选项"列表中;
默认栏目:系统默认显示在"已选项"列表中;
选择了"备选栏目"后,选择了"固定栏目"则此字段用户无法从"已选项"中移去(此字段为必选项);
选择了"备选栏目"后,选择了"默认栏目",则此字段会默认显示在"已选项"中,但用户可以自行移去此字段。
如果三个栏目都选择了,则与选择了"备选栏目"和"固定栏目"的效果相同。
b、行分组
(7)、建立查询条件
a、选择菜单上的"报表参数"建立查询条件。
在弹出的报表参数设置窗口中左边点击右击"添加条件项",在基本属性页签中点击fx,选择条件表达式。点击参照页签,选择该条件的相应字段。
允许为空:选择后,此查询条件可以不输入,不选择则为必输项。
是否可见:不出现此字段。
是否固定条件:此条件字段不可删除(一定要使用此字段),用户可以设置成无需输入,但根据实际情况这样无意思,设置成固定字段肯定是必输项。
选择绑定的字段!
b、参照
参照标签可以设置多种参照方法(根据相应的英文字母可知意思);
nothing:表示无
reference:可以调协参照值。
实际ID:选择参照的实体;
参照ID:选择一个类型样子的参照即可。(可理解为当作模型使用)
c、建立完查询条件后,到报表主页上"数据"页签中,修改数据查询。在查询参数页签上,点击"添加默认"按钮,确认退出。如不操作,查询条件将不起作用。
报表查询设置的结束如下图所示。
(8)、报表页面布局
根据用户想要实现的模样、拖动报表控制到右边的布局窗口,同样将字段根据用户想要的模样、顺序依次进行拖到表格中。用户可以利用右边的报表属性进行调整报表的样式。
(9)、技巧:BE实例查询可当数据字典使用
上述用BE实体建立报表,在平时做报表时这个功能用的非常少,现在我多半用这个功能来当数据字典来用。原因:
A、U9数据库更新频繁,但数据字典不能及时更新,有时会出现在数据字典中找不到字段的情况。
B、个人觉得BE实体查字段速度及效果比较直观。
C、只有需要知道字段意义的时候方需要翻翻数据字典,但是这个方法也可以省略。技巧:
IE打开的U9单据页面,用IE自带的开发功能(F12)就能捕捉到对应的字段名称,而且前台字段名称与后台字段名称是相同的,这样很方便。如下图:
3、sql语句建立报表
(1)、建立数据源、数据查询
建立数据源方法与上述建立实体查询一样,数据查询时,因为是sql语句建立报表,固选择"Text"。
(2)、根据需求编写SQL语句
a、根据需求可以先编写OQL语句,再翻译成SQL语句,将编译成功后的SQL语句,复制到窗口中。
b、点击预览查询结果,下面的窗口中可查询结果,左边的"字段"窗口中会显示出SQL查询语句中选择的字段。
(3)、同样可以根据需求设置已选字段的扩展属性(此步方法同实体建立报表时的字段扩展属性)
(4)、查询方案(报表参数设置)
报表参数设置方法也同实体报表中的报表参数设置方法。
(5)、报表页面布局方法也与上述实体报表项目时页面布局方法相同。
(6)、分析实际需求编码OQL语句,编写OQL语句可以参照辅助资料,数据字典、实体查询工作(classview)等;有时这些工具更新的比较慢,建议大家可以建立一个实体查询的报表,利用实体查询报表中的查询实体来查询实体名称。这样比较准确。
用户可以使用UBF自带的OQL翻译工具(报表菜单中)来翻译编写的OQL语句,经本人测试,UBF自带的OQL翻译工具比classview带的翻译功能执行速度快的多。
4、存储过程建立报表
三、复杂报表
(1)、DataCommand代码生成向导
(2)、选择服务品名称,生成路径。
(3)、往下根据向导进行选择字段。
(4)、VS打开生成的DataCommand,点击生成。
(5)、UBF中导入Data Command(在导入之前需要新建报表容器)
(6)、发布应用。
(7)、找到生成发布在Portal下的dll文件,用U9管理控制台工具上传到SQL报表服务器目录中。
ClientSystemManage目录下:UFIDA.U9.MO.Report.DataCommand.dll
UBFV21目录下:UFIDA.U9.UserDefine.MO.Report.DataCommand
(也可以将生成的DataCommand\Bin\Debug中的这两个文件用来上传即可)
修改Buildup.xml中的地址,可以使用UBF发布工具。
四、查询二开
1、BE查询
2、列表查询
3、DTO查询
(1)、将:D:\UFIDA\UBFV21\U9.VOB.Product.Component\Unconfiged\Component中的
复制到:D:\UFIDA\U9V21\Portal\ApplicationServer\Libs
(2)、将:D:\UFIDA\UBFV21\U9.VOB.Product.Component\Unconfiged\Component中的
复制到:
D:\UFIDA\U9V21\Portal\ApplicationLib
(3)、布置UI,将D:\UFIDA\UBFV21\U9.VOB.Product.WebPart中的
复制到:D:\UFIDA\U9V21\Portal\UILib
(4)、执行源数据。地址在:D:\UFIDA\UBFV21\U9.VOB.Product.Other中的两个文件中的SQL脚本都要执行。执行时先执行Metadata,再执行Resource。
五、开发实例
单据打印分组
UBF中打印单据分组有两种方法,一种是用菜单上"报表"-分组,一种是表行是右击添加分组,两种方法各有优异。以出货单按品名分组汇总出货数量为例子!
1、菜单上的分组功能
(1)、选择菜单"报表------分组",找开分组设置局面。
(2)、选择依据字段,这里面是"品名",选择结束拆页,即可在一个品种结束时,下一个品种显示在下一页。
(3)、确定返回到主设置界面,设置合计字段,这里面是出货数量。本页合计函数是:PageSum,本单合计函数是:Acc PageSum。
、
(4)、格式调整调整,正常保存、发布即可使用了!
说明:菜单中的分组功能有两点不足:
(1)、在最后打印的单据时的效果有不足之处,比如当一个料品在第一页显示时表头上会留有空行,如果这个品种行数多了显示到第二页去,则在第二页时表头就没有空行了,这样显示的效果欠佳。
(2)、报表分组后,每遇到一个新的品种就会分页显示,如果一些品种行数少,一页上打印了几个就换下一个品种下一页了,那么就会造成纸张的浪费。(当然了这需要根据客户要求,如果客户一定要一个品种一份,那也没办法)。此功能上有"结束处是否拆页",如果设置成不分页,就会出现分断显示了。
针对上述不足,使用地"表行"中的分组功能可以一一得到解决。
2、表行分组
(1)、在表行上右击选择"增加(组)"打开增加组窗口。
(2)、选择分组表达式(分组依据),记下分组名称"Table_Group_1",分组结束后拆页,根据实际情况选择,如果需要一种品种结束分页,就选择上,如果不需要一个品种结束时拆页就不选择。如果未选择,则就会在同一张单据上打印,共用表头也不会留空白,能解决上面方法一中浪费纸张的问题。
(3)、确定后会默认出来两行分组行,根据需求,是将分组数放在上面还是下面,删除其中一行,这里面要求将分组数据放在下面,则我们删除第一行。
(4)、这里面的函数选择group sum,格式如下。
(5)、调整好格式,正常保存发布即可。
注意:行分组函数是groupsum,数据源为此报表中的table序号,有的时候我们同时打开多张报表模板,table的序号会自动连续编写下去,我们一定要以当前报表中的table序号为准,否则就会报错。这里面一张报表中只有一个table,在分组时就会显示table_group_1
如果用户不想在行中显示以品种合并的数量,也可以右击把合计行删除了,删除合计行并没有将分组依据删除,依据仍然还在,如果真正想删除分组依据,需要右击选择"删除所有分组"。
需要技术支持:飞翔信息技术科技有限公司 - 公司介绍