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

news2024/11/24 1:43:57

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

一、基础了解

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

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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1849869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

昨天gitee网站访问不了,开始以为电脑哪里有问题了

昨天gitee网站下午访问不了,开始以为是什么毛病。 结果同样的网络,手机是可以访问的。 当然就ping www.gitee.com 结果也下面那样是正常的 以为是好的,但就是访问www.gitee.com也是不行,后来用阿里云的服务器curl访问是下面情况&…

当flex-direction: column时,设置flex:1不生效解决办法

当需求是: 页面纵向排列,且最后一个元素撑满剩余高度 flex:1在横向排列时是可以的,但是纵向排列会失效,此时需要给最后一个子元素设置align-self: stretch;即可撑满剩余高度 <div class"father"><div class"child child1"></div><div…

2021数学建模C题目– 生产企业原材料的订购与运输

C 题——生产企业原材料的订购与运输 思路&#xff1a;该题主要是通过对供应商的供货能力和运送商的运货能力进行估计&#xff0c;给出合适的材料订购方案 程序获取 第一题问题思路与结果&#xff1a; 对 402 家供应商的供货特征进行量化分析&#xff0c;建立反映保障企业生…

配置 python 脚本操作Excel 环境

在已装python的前提下 一、安装依赖库 pip install pandas pip install openpyxl安装完后&#xff0c;可以在 Python 中运行以下命令来查看 pandas 或 openpyxl 的安装路径&#xff1a; import pandas as pd print(pd.__path__)import openpyxl print(openpyxl.__path__)二、测…

Redis数据过期、淘汰策略

数据过期策略&#xff1a; 惰性删除&#xff1a; 设置该key过期时间后&#xff0c;我们不去管它&#xff0c;当需要该key时&#xff0c;我们在检查其是否过期&#xff0c;如果过期&#xff0c;我们就删掉它&#xff0c;反之返回该key。 这种方式对cpu友好&#xff08;只在用…

lambdastreammaven

1.Lambda &#xff08;1&#xff09;Java 8 Lambda 表达式 在 Java 8 以前&#xff0c;若我们想要把某些功能传递给某个方法&#xff0c;总要去写内部类 或匿名内部类类。代码示例&#xff1a; list.sort(new Comparator<User>() { Override public int compare(User …

C语言| 数组倒置算法

数组倒置 方法一 1 定义两个数组a[5] b[5],两个循环变量i j 2 用for循环&#xff0c;把数组a的最后一个数&#xff0c;赋值给数组b第一个元素 3 输出数组b 【程序代码】 #include <stdio.h> int main(void) { int a[5] {11, 22, 33, 44, 55}; int b[5]; …

nodejs从基础到实战学习笔记-nodejs简介

一、Node.js简介 • Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。 • Node采用Google开发的V8引擎运行js代码&#xff0c;使用事件驱动、非阻塞和异步I/O模型等技术来提高性能&#xff0c;可优化应用程序的传输量和规模。 1.1 特性 …

PPT的精细化优化与提升策略

&#x1f44f;&#x1f44f;&#x1f44f;欢迎来到我的博客 ! 亲爱的朋友们&#xff0c;欢迎您们莅临我的博客&#xff01;这是一个分享知识、交流想法、记录生活的温馨角落。在这里&#xff0c;您可以找到我对世界独特视角的诠释&#xff0c;也可以与我一起探讨各种话题&#…

【SAP ME 42】关于SAP ME自定义开发中NWDS中配置JDK

1、NWDS启动配置JDK -vm C:/Java/jdk1.8.0_361/bin 2、开发组件配置JDK

一种简单的图像分析

简介 一种简单的边界分析&#xff0c;通过相邻的像素的灰度进行判断&#xff0c;计算出边界。 测试1 原图 结果 测试2 原图 结果 代码说明 主要的技术在makeTable过程中&#xff0c;这个过程主要执行了以下几步 计算每个像素的灰度计算相邻多个像素的最大灰度差统计灰度差…

GPT-4o目前暂无音频输出的能力

OpenAI的发布会惊艳的操作&#xff0c;近乎实时的语音对话&#xff0c;让很多人向往。 但实际上Chat对话时&#xff0c;尚无输出音频的能力&#xff0c;可能还未开放。 这是国外的一个开发小哥的交流帖子&#xff0c;可能还需要些时日才能用的上实时的音频输出。 不过当前Op…

Python MicroPython库:嵌入式开发

更多Python学习内容&#xff1a;ipengtao.com MicroPython是一种精简高效的Python解释器&#xff0c;专为运行在微控制器和受限环境下设计。它支持大多数Python语法和标准库&#xff0c;同时提供了丰富的硬件控制接口&#xff0c;使开发者能够用Python编写嵌入式应用。MicroPyt…

Windows系统下安装RabbitMQ详细步骤

声明&#xff1a;原文参考链接出自&#xff1a; 如何在Windows系统下安装RabbitMQ_rabbitmq windows安装-CSDN博客 https://zhuanlan.zhihu.com/p/693160757 一、RabbitMQ安装软件资源准备 因为RabbitMQ是Erlang语言开发的&#xff0c;因此安装Erlang环境在进行安装RbbitMQ的…

展讯-GPIO操作

1.修改IO配置 以GPIO92为例 IO配置文件在&#xff1a; bsp/kernel/kernel4.14/arch/arm64/boot/dts/sprd/uis8581e5h10.dts bsp/bootloader/u-boot15/board/spreadtrum/uis8581e5h10/pinmap-sp9863a.c 配置 按上述内容&#xff0c;配置IO口 编译之前查看硬件GPIO&#xff0c…

【Java】已解决java.io.UnsupportedEncodingException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.io.UnsupportedEncodingException异常 在Java编程中&#xff0c;java.io.UnsupportedEncodingException异常通常发生在尝试使用java.nio.charset.Charset或者它的旧版本…

LabVIEW在脑机接口(BCI)研究中的应用

脑机接口&#xff08;Brain-Computer Interface&#xff0c;BCI&#xff09;技术通过解读大脑活动&#xff0c;将人类思维与计算机或其他设备连接起来&#xff0c;广泛应用于神经康复、认知研究和人机交互等领域。LabVIEW作为强大的图形化编程环境&#xff0c;在BCI研究中发挥着…

私域电商新纪元:消费增值模式的创新与成功实践

大家好&#xff0c;我是吴军&#xff0c;很高兴能够与您分享私域电商领域的魅力与机遇。今天&#xff0c;我将为大家呈现一个令人瞩目的成功案例&#xff0c;这个案例充分展现了私域电商的巨大潜力和无限可能。 在短短一个月的时间里&#xff0c;我们的客户成功实现了业绩的飞跃…

21.智能指针(上)

目录 一、概念二、Box\<T\>2.1 概念与应用场景2.2 简单应用2.3 递归类型的创建 三、通过Deref trait将智能指针当作常规引用处理3.1 常规引用3.2 像引用一样使用Box\<T\>3.3 自定义智能指针3.4 函数和方法的隐式解引用强制转换3.5 解引用强制转换与可变性交互 四、…

家用洗地机哪个品牌好用?四款性价比高的洗地机推荐

还在为下班赶回家打扫卫生而烦恼&#xff1f;曾经的我也是这样&#xff0c;日复一日手动清洁&#xff0c;疲惫不堪。直到有一天&#xff0c;我决定相信现代科技&#xff0c;深入研究了市面上的各种洗地机评测&#xff0c;从此踏入了智能清洁家电的新世界。洗地机作为现代家居的…