当前位置: 首页 > news >正文

用友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

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

 

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

相关文章:

  • SpringBoot测试实践
  • Spark SQL 血缘解析方案
  • 【Apache Doris】周FAQ集锦:第 7 期
  • python,ipython 和 jupyter notebook 之间的关系
  • 什么是N卡和A卡?有什么区别?
  • Python设计模式 - 简单工厂模式
  • Linux驱动开发笔记(十一)tty子系统及其驱动
  • AMSR/ADEOS-II L1A Raw Observation Counts V003地球表面和大气微波辐射的详细观测数据
  • 计算机组成原理笔记-第1章 计算机系统概论
  • 大疆无人机航点飞行KMZ文件提取航点坐标
  • 保存和调取得分的简易方法
  • Github 2024-06-19 C开源项目日报 Top9
  • C#面: 能够将非静态的方法覆写成静态方法吗?
  • Jenkins macos 下 failed to create dmg 操作不被允许hdiutil: create failed - 操作不被允许?
  • 使用Redis优化Java应用的性能
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 2017届校招提前批面试回顾
  • CSS实用技巧干货
  • k个最大的数及变种小结
  • Leetcode 27 Remove Element
  • MaxCompute访问TableStore(OTS) 数据
  • Object.assign方法不能实现深复制
  • PHP 7 修改了什么呢 -- 2
  • vuex 笔记整理
  • zookeeper系列(七)实战分布式命名服务
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 动态规划入门(以爬楼梯为例)
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 双管齐下,VMware的容器新战略
  • 微服务框架lagom
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • #NOIP 2014# day.2 T2 寻找道路
  • #NOIP 2014#Day.2 T3 解方程
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (超详细)语音信号处理之特征提取
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (生成器)yield与(迭代器)generator
  • (十)T检验-第一部分
  • (四)汇编语言——简单程序
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET Core中Emit的使用
  • .net 生成二级域名
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @WebService和@WebMethod注解的用法
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)