用友U9-UBF自定义报表-打印模板开发学习笔记

自定义报表、打印模板开发学习笔记

一、基础了解

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

如果用户不想在行中显示以品种合并的数量,也可以右击把合计行删除了,删除合计行并没有将分组依据删除,依据仍然还在,如果真正想删除分组依据,需要右击选择"删除所有分组"。

需要技术支持:飞翔信息技术科技有限公司 - 公司介绍

相关推荐
Zmxcl-0071 分钟前
IIS解析漏洞
服务器·数据库·microsoft
明矾java33 分钟前
Mysql-SQL执行流程解析
数据库·sql·mysql
蓬莱道人1 小时前
BenchmarkSQL使用教程
数据库
p@nd@1 小时前
Oracle筑基篇-调度算法-LRU的引入
数据库·oracle·操作系统·lru
来一杯龙舌兰1 小时前
【MongoDB】使用 MongoDB 存储日志、审批、MQ等数据的案例及优点
数据库·mongodb
技术路上的苦行僧1 小时前
分布式专题(8)之MongoDB存储原理&多文档事务详解
数据库·分布式·mongodb
孤独的履行者1 小时前
入门靶机:DC-1的渗透测试
数据库·python·网络安全
wy02_2 小时前
MySQL-MVCC(多版本并发控制)
数据库·mysql
NY63 小时前
mysql运维篇笔记——日志,主从复制,分库分表,读写分离
数据库·sql
潜洋3 小时前
Spring Boot 教程之三十六:实现身份验证
java·数据库·spring boot