版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
U9研发体系(自定义报表开发手册)文献编号:U9-SE-UBF-SPEC-REPORT版本号:修改状态:0编写人:郭玉平(二开总部)审核人:刘小东
合用对象该规范合用于U9实行顾问二次开发人员。版本记录【此部分要记录该文档形成过程中的历次版本变更过程及变更的内容】版本修改与参与人修改时间修改因素修改概述审批人1.0郭玉平2023-07-15原始文档建立刘小东相关文档 U9研发体系(报表开发手册) U9研发体系(报表开发规范)名词解释
手册前3章介绍报表开发准备工作。从第4章到第10章介绍了报表《XX月生产计划与实绩记录》实际开发流程,在流程中的每个环节中介绍了使用UBF平台开发报表所涉及到的知识点。第11章是一些知识点的具体介绍。 目录TOC\o"1-5"\h\z\u第1章 开发基础篇--U9系统的环境配置 81.1 系统环境 81.1.1 Window2023标准版、公司版 81.1.2 Microsoft.netFrameworkV3.0 81.1.3 IIS6.0 81.1.4 IE7.0 91.1.5 MSSQLServer2023 91.2 开发环境 101.3 运营时环境 111.3.1 需要运营两个服务 111.3.2 设立IIS中的站点 111.3.3 配置U9站点、公司 131.4 数据库的导出、导入 151.4.1 数据库导出 151.4.2 数据导入 20. 使用“用友__数据管理工具”还原 20. 使用“用友__系统管理工具”还原 241.5 模板的导入、导出 281.5.1 配置IDEConfig 281.5.2 新建解决方案 291.5.3 建分析项目 291.5.4 打开模型元数据管理 291.5.5 连接报表元数据库 301.5.6 模板导入、导出 311.6 报表服务器的配置 321.6.1 安装运营SqlServerReportingServices 321.6.2 配置报表服务站点ReportServer 331.6.3 部署自定义报表的DataCommand 33第2章 报表开发环境 342.1 UBF介绍 342.2 报表开发环境 352.3 报表开发环境参数配置 352.3.1 UBF环境设立 352.3.2 UBF连接到数据库 362.3.3 启动两个服务 362.3.4 运营UBFdevenv.exe 372.3.5 登录数据库服务器 382.3.6 连接报表元数据库 39第3章 报表开发基础 413.1.1 实体 413.1.2 OQL 413.1.3 报表制作流程的简朴介绍 42. DataCommand设计 42. 报表模板设计 42. 报表模板发布 42. 部署DataCommand的dll,策略的dll 42第4章 命名规范 434.1 概论 434.2 ReportTemplate(报表模版) 434.3 解决方案命名规则 434.4 DataCommand(报表数据) 43第5章 需求、设计 445.1 需求 445.1.1 样表 445.1.2 表头 455.1.3 表体 455.2 设计 465.2.1 查找条件 465.2.2 栏目说明 465.2.3 算法说明 47第6章 新建报表模板 486.1 第一步:新建报表目录 486.2 第二步:新建报表容器 496.3 第三步:新建报表页面 49第7章 新建DadaCommand 507.1 打开DadaCommand工具集 517.2 建立DadaCommand目录 517.3 选择字段 527.3.1 查询实体 527.3.2 选择属性(字段) 527.4 配置字段信息 537.5 数据源命名 537.6 信息确认 54第8章 编写DadaCommand业务逻辑 548.1 重要编程界面简介 558.1.1 MoDs.cs 558.1.2 MODsExtend.cs 568.1.3 MOCmdExtend.cs 578.1.4 PubFunction.cs 588.2 DataCommand重要属性、方法 588.2.1 ShowMode参数 588.2.2 EntityViewQuery:viewQuery 598.2.3 报表相关集合 598.2.4 ExecuteDataReader() 598.2.5 其它集合 618.3 编写实例业务逻辑 618.3.1 第一步:选取生产订单字段 618.3.2 第二步:选取竣工报告字段 648.3.3 第三步:连接临时表 668.3.4 第四步:定义临时表 668.3.5 第五步:生成解决方案 67第9章 报表模板设计 689.1 导入DataCommand 699.2 模板布局设计 709.2.1 删除系统预定义布局 709.2.2 设计表头 709.2.3 设计表体 719.3 报表参数设计 739.3.1 基本属性 749.3.2 参照 749.3.3 操作符列表 759.4 字段的扩展属性 75第10章 报表解决策略 7610.1 策略概念 7610.2 编写策略方法 7610.3 配置策略文献 76第11章 发布浏览 7711.1 发布报表模板 7711.1.1 打开报表发布向导 7711.1.2 报表发布向导第一步:选择报表类型 7811.1.3 报表发布向导第二步:程序集部署 7911.1.4 报表发布向导第三步:发布菜单 8011.1.5 报表发布向导第四步:报表部署 8111.1.6 报表发布向导第五步:完毕 8211.2 部署DataCommand 8211.3 菜单授权 8311.3.1 进入U9页面 8311.3.2 分派权限 84. 进入途径 84. 执行操作 8411.4 效果预览 8511.4.1 查询界面 8511.4.2 效果界面 85第12章 高级话题 8612.1 报表中嵌入代码 8612.2 弹性域 8812.2.1 弹性域概念 8812.2.2 在模板中使用弹性域 8812.3 存储过程的调用 9112.4 任意条件的撷取 9112.5 Oql的使用方法 9212.5.1 基本功能 9212.5.2 优势与比较 9312.5.3 安装 9312.5.4 语言指南 93. 对象查询语言OQL有两种风格 93. 简朴条件过滤 93.1. 简朴条件: 94.2. 多EntityJoin条件: 94.3. OPath风格指定条件: 94.4. Betweenand 94.5. 逻辑或条件+参数 94.6. in 94.7. like¬like 95. 复杂报表查询 95.1. 兼容性注意问题 95.2. 基本语法 95.3. 使用实体类 95.4. from子句 96.5. leftjoin 96.6. innerjoin 96.7. Crossjoin 96.8. Distinct关键字 97.9. 数据库函数 97.10. Count 97.11. Min,Max 97.12. Groupby 97.13. 子查询 97.14. 子查询 97.15. 对dateadd/datediff/datepart/datename中关键字的支持 99.16. 对cast类型转换函数的支持 99.17. leftright字符串函数 99.18. 对Update&Delete语句的支持 99. OQL风格指南 100.1. 别名形式 100.2. 主实体+相对于主实体开始的导航表达式 101. 用户自定义函数与SQL标准函数 101. 临时表 102. 全景体验 10412.5.5 API编程接口 104. QueryParser 105. QueryCompiler、CompiledQuery实例 105. QueryBuilder、CompiledQuery实例 107
开发基础篇--U9系统的环境配置系统环境Window2023标准版、公司版操作系统安装过程。Microsoft.netFrameworkV3.0一个安装包,执行安装即可。IIS6.0IIS6.0的安装位置在:添加或删除程序/添加删除Windows组件/应用程序服务器/具体信息/Internet信息服务(IIS)。按照下图红色数字顺序,安装IIS6.0。点击【拟定】、【下一步】后,系统提醒插入操作系统光盘,可以插入系统光盘,假如没有系统光盘,可以定位到操作系统文献夹的i386文献夹。IE7.0一个安装包,执行安装即可。MSSQLServer2023SQLServer安装过程中,安装到环节“要安装的组件”时,请注意:单击上图中的【高级】,打开下图:对需要安装的组件“数据库服务”、“ReportingServices”请选择“整个功能将安装到本地硬盘上”。数据库、报表服务安装前请先浏览以下资料:《SQLServer联机丛书》(帮助文档)1、安装SQLServer2023ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/instsql9/html/3c580cdd-1a4b-40b1-bf6b-3c1ee31ee1be.htm2、安装SQLServer组件帮助主题ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/instsql9/html/b920fba6-9822-4db7-a84d-7bc306004b8c.htm3、ReportingServices安装帮助主题ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/instsql9/html/bba36555-7ad7-4a17-ac3e-dd092d62372c.htm4、报表服务ReportServe的具体配置介绍请参考《报表服务配置.ppt》。开发环境开发必备软件请先安装下列软件并对的的配置UBFStudio的配置文献才干使用UBFStudio:Window2023标准版。Microsoft.netFrameworkV3.0。系统需要安装MFrameworkV3.0。一定要注意Framework的版本,只有版本匹配UBFStudioV2.0才干正常运营。小技巧:由于Framework2.0和3.0可以共存,假如UBFStudioV2.0不能正常运营,可以考虑检查一下当前启用的Framework版本。MSSQLServer2023(可选)假如使用本地数据库,则需要安装SQLServer2023;否则可以使用统一的数据库服务器而无需在本机安装。版本管理工具(可选)假如需要使用UBFStudioV2.0进行团队开发,则需要安装相应的版本管理工具。UBFStudioV2.0支持的版本管理工具有MSVisualSourceSafeV6.0(或更高版本),以及IBMRationalClearCase2023及以下版本。安装配置好版本管理工具的服务端以后,在安装UBFStudio的机器上需要安装版本管理工具的客户端。假如本地运营Portal,还需要安装以下软件:IIS6.0SqlServerReportingServices提供报表服务。IE7.0U9客户使用,浏览器版本规定是IE7.0及以上。运营时环境需要运营两个服务Portal\SysManageServer\ServiceHostingConsole.exe。Portal\ApplicationServer\ServiceHostingConsole.exe。设立IIS中的站点必需的两个站点:Portal:U9的portal,U9产品的入口。Portal站点的相应的本地途径是U9产品中的文献夹U9Product\U9.VOB.Product.U9\Portal,假如没有此站点,请创建。ReportServer:报表服务站点。SqlSserver2023安装时假如选择安装报表服务,安装程序会创建此站点,假如没有安装报表服务功能,请安装。自定义报表开发后,需要把自定义报表的DataCommand部署到此站点下。站点权限设立请设立Portal、ReportServer站点的访问权限。设立环节按照下图标注的红色顺序号1234,第1步需在站点名称上单击右键,第4步:用户名中填写的用户帐号需要对站点中的文献有完全访问权限。设立后拟定。报表服务ReportServe的具体配置介绍请参考《报表服务配置.ppt》。配置U9站点、公司打开系统管理工具Portal\ClientSystemManage\UFIDA.UBF.SystemManage.exe登录:系统管理工具系统管理工具是管理公司和系统监控的工具。U9的系统管理工具涉及两部分,有系统管理工具和数据管理工具。这些功能用来对U9进行分布式部署和运营期的监控,该工具部署在控制服务器上。系统管理工具功能结构图:系统管理工具可以做很多管理工作,我们只需关注以下两点:配置U9站点:按照下图红色数字顺序,配置数据库服务器。同配置数据库服务器类似配置Web服务器。配置公司按照下图红色数字顺序,配置公司。一个公司实际是一个数据库,配置公司的过程就是用系统管理工具恢复数据库的过程,需要注意的是数据库中需要一个CLR配置文献,CLR是dll文献,与数据库备份文献bak同时管理,U9系统中对数据库的访问有的是通过CLR配置文献实现。配置完站点、公司后,请重启:IIS:iisresetPortal\SysManageServer\ServiceHostingConsole.exePortal\ApplicationServer\ServiceHostingConsole.exe系统管理工具的具体手册请参考帮助文档,位置如下图所示:数据库的导出、导入U9中每个公司相应一个数据库,产品的运营需要先创建数据库,但是自定义报表开发的过程中需要一些数据,所以直接导入一个有数据的数据库对开发报表、代码调试方便。数据库导出数据库导出、导入工具是“用友__数据管理工具”。位置:\\Product\Portal\ClientSystemManage\UFIDA.UBF.SystemManage.DataManageTool.exe,初始密码:123456单击单击单击确认后,再单击“系统工具/数据管理”进入如下界面:单击公司数据维护下的数据备份单击公司数据维护下的数据备份单击上图公司数据维护下的数据备份进入界面:单击单击单击目的按钮选择bak文献或选择目录填写bak文献名,单击拟定回到前面页面,并单击页面选项:单击单击单击单击根据需要选择追加到现有备份集或者覆盖所有现有备份集,单击确认进行数据备份生成.BAK。数据导入数据库的导入还原有两种途径:1、使用“用友__数据管理工具”还原。2、使用“用友__系统管理工具”还原。使用“用友__数据管理工具”还原使用“用友__数据管理工具”还原,方法如下:公司数据维护下的数据还原,进入如下界面:单击选择原文献BAK单击选择原文献BAK单击源文献按钮,进入选择后缀为bak的文献页面单击选择CLR配置按钮,进入选择UFIDA.u9.SQL.CLRlib.dll文献单击拟定选中选中将还原checkbox框选中,单击确认进入如下界面选择.mdf与.ldf文献后,单击确认进行数据库恢复使用“用友__系统管理工具”还原“系统管理工具”位置:Portal\ClientSystemManage\UFIDA.UBF.SystemManage.exe登录:初始密码:123456单击公司管理单击右边公司管理中的新增按钮单击单击单击“基本信息设立”数据库――创建,打开创建界面:创建数据库填写信息:1、“数据库”(标记1)需要填写创建的数据库名称。2、“数据文献”(标记2)是创建的数据库的数据文献,单击选择数据文献的存储位置,如:D:\DB\,后面的“\U9ERP_JDF.mdf”是工具自动添加上的。3“日记文献”(标记3)是创建的数据库的日记文献,单击选择日记文献的存储位置,如:D:\DB\,后面的“\U9ERP_JDF_log.ldf”是工具自动添加上的。4、“CLR配置”(标记4)是数据库使用的DLL文献,一般情况是与备份文献(标记5)一块保存。5、“备份文献”(标记5)是数据库导出的备份文献。6、“还原checkbox”(标记6):请注意不要忘掉选择。填写完毕后,单击【创建】。模板的导入、导出自定义报表模板的导入导出是运用UBF平台的报表模型元数据管理工具。报表模型元数据管理工具的位置比较隐蔽,需要按照以下环节找到打开。配置IDEConfig设立UBF\UBFStudio\IDEConfig.xml文献中的Options节RuntimeForReportDesigner属性为false,即:<OptionsRuntimeForReportDesigner="false">。新建解决方案建分析项目方案类型必须是分析项目,如下图:打开模型元数据管理上面界面点击拟定后,就会出现一个报表开发界面,暂时不要关注其他信息,请打开菜单报表/模型元数据管理,操作过程如下图:连接报表元数据库操作过程如下图:报表元数据库连接后模板导入、导出单击选择报表目录、报表容器或报表模板,右键单击打开菜单,选择导出、导入命令,操作过程如下图:导出界面:导入界面:模板的导出、导入使用场景一般是:在从开发环境导出,导入到测试环境或导入到正式生产环境。从一个开发人员的机器导出,导入到此外一个开发人员的机器,模板交流使用。报表服务器的配置安装运营SqlServerReportingServices请查看提供报表服务的机器是否已经安装SqlServerReportingServices,由于自定义报表最终要调用sqlserver的报表服务(SqlServerReportingServices)实现。假如未安装,请先按安装。配置报表服务站点ReportServer配置报表服务站点ReportServer,配置过程请参考HYPERLINK设立IIS中的站点。部署自定义报表的DataCommand复制自定义报表的DataCommand到文献夹:U9.VOB.Product.U9\ReportServer\ReportServerLib运营报表服务器配置工具,界面如下图位置:U9.VOB.Product.U9\ReportServer\Tool\ReportServerSetting-Winform\ReportServerSetting-Winform.exe配置介绍:1、U9门户安装目录:是指Portal站点的“本地途径”。2、报表服务Dll目录:是指U9.VOB.Product.U9\ReportServer\ReportServerLib,注意:当前运营的报表服务配置工具的目录是U9.VOB.Product.U9\ReportServer\Tool\ReportServerSetting-Winform\注意两者关系。3、报表服务安装目录:是指SqlServerReportingServices安装目录,安装时假如选择默认,是:C:\ProgramFiles\MicrosoftSQLServer\MSSQL.3\ReportingServices\ReportServer4、报表服务目录安装时假如选择默认,是:C:\ProgramFiles\MicrosoftSQLServer\MSSQL.3\ReportingServices\ReportServer与3相同。5、报表服务URL:是报表ReportServer站点的位置。请参考HYPERLINK“2.3.3配置U9站点、公司”。设立好后,单击配置。此配置过程就是把DataCommand的dll部署到报表服务的ReportServer\bin文献夹下,并且修改ReportingServices\ReportServer\rssrvpolicy.config文献的配置。配置完站点、公司后,请重启:IIS:iisresetPortal\SysManageServer\ServiceHostingConsole.exePortal\ApplicationServer\ServiceHostingConsole.exe报表开发环境UBF介绍报表开发是UBF开发平台的一个子模块,先了解一下UBF平台。UBF(UfidaBusinessFramework)开发平台:采用元数据驱动的、分布式的、面向服务的架构,它提供了统一的编程抽象模型,是一个适合应用软件开发及部署的全角色平台。UBFStudio是一套完整的基于模型驱动开发的可视化开发工具,用于建立公司应用产品业务分析模型。UBFStudio开发工具包中包含业务模型开发工具、用户交互界面开发工具、流程设计开发工具、报表设计工具、打印风格格式设计器、规则开发工具、商业智能元模型开发工具等,所有集成在集成开发环境中(IDE),该环境允许用户在其中完毕所有应用开发的关键工作。UBFStudio可以和VSS和CC联合起来以支持大规模团队的离散式开发。如需具体了解UBF的使用,请参考《UBF2.0使用手册(环境搭建).doc》、《UBF2.0使用手册(简介).doc》、《UBF2.0使用手册(使用).doc》。报表开发环境自定义报表开发是在UBF平台上进行的U9相关报表的开发工作。自定义报表开发重要涉及三部分内容:报表模板开发、报表数据源选择、报表业务逻辑编写。报表模板开发:是运用UBF开发平台中的报表开发功能实现。报表数据源选择:是运用UBF开发平台中的DataCommand生成工具找到业务逻辑所涉及到的实体,选择出所需实体、所需属性作为报表的数据源。生成工具会创建一个项目,项目中的文献保存着数据源的信息。报表业务逻辑编写:重要是在生成的数据源项目中的ProcessData()方法中添加所需业务逻辑。报表模板是一个XML文献集,存储在数据库中。DataCommand生成工具生成的项目,其中包含数据源信息文献,业务逻辑方法,就统称为DataCommand。DataCommand是一个有固定文献结构、代码结构的VisualStudio2023的项目,可用VisualStudio2023编写、编译。报表模板是报表的展示模板。DataCommand是报表展示的内容。对报表的总体介绍请参考《A04用友技术大会UAP_U9报表_070606.ppt》。报表开发环境参数配置UBF环境设立设立UBF\UBFStudio\IDEConfig.xml文献中的Options节RuntimeForReportDesigner属性为<OptionsRuntimeForReportDesigner="true">。<OptionsRuntimeForReportDesigner="true">,UBF开发自定义报表项目。<OptionsRuntimeForReportDesigner="false">,UBF可以开发其他项目,具体资料请参考《UBF2.0使用手册(使用).doc》。UBF连接到数据库由于开发中使用的报表模板文献、实体模型等相关信息都是存储在数据库中,做自定义报表开发的前提是把UBF环境连接的到一个存储着模板文献、实体模型等信息的数据库上。这个数据库就是U9中的公司相应的数据库。打开UBFStudioV2.0的安装目录中的UBF\UBFStudio\Runtime\environment.xml文献,编辑environment.xml文献修改数据库配置。该配置文献中有关数据库连接的内容示例如下: <system><connectionString>packetsize=4096;userid=u9test;ConnectionTimeout=150;MaxPoolsize=1500;datasource=u9ubfdb;persistsecurityinfo=True;initialcatalog=u9test;password=u9test</connectionString> </system>其重要配置项的含义如下:datasource=u9ubfdb:表达数据库的服务器名initialcatalog=u9test:表白数据库名userid=u9test:表达数据库的用户名password=u9test:指明登录密码请根据所使用数据库的具体情况配置。启动两个服务1、Portal\SysManageServer\ServiceHostingConsole.exe2、Portal\ApplicationServer\ServiceHostingConsole.exe这两个服务是UBF、Portal运营的基础,每次打开UBF或访问Portal都需要保证服务已经启动。为方便创建快捷方式到桌面。运营UBFdevenv.exe运营UBF\UBFStudio\UBFdevenv.exe运营后登录数据库服务器点击登录菜单登录界面一个公司相应一个数据库。组织是公司下的组织,在同一个数据库中。具体信息在2.1节中介绍。用户、密码U9中用户、密码,不是sqlserver的“登录名”以及相应密码。用户、密码可认为空。连接报表元数据库单击报表资源管理中的连接,点击报表元数据库报表元数据库打开后,系统报表、用户自定义报表显示如下图:我们以后所开发的自定义报表都属于用户定义报表。到此,开发环境配置完毕。报表开发基础实体从实际角度理解:实体:实际业务的基本单元在U9中称为实体。简朴实体可以理解为是数据库中的一张表的一条记录。但是假如实体有些复杂,用一个表结构无法准确、完整描述,或者可以描述但是比较复杂,就需要设计多个表关联描述一个实体。从程序角度理解:实体:实体就是一个对象。对实体属性的读取、赋值类似于对程序中类对象的使用。实体与数据库表记录间的关系:可以理解为的对象、关系映射,即ORMapping,是模型层的一种解决对像的方式。OQLOQL:ObjectQueryLanguage是UBF中操作实体的语言,类似于sql,但比sql简朴、方便。具有以下特点:1、ObjectQueryLanguage提供了一种基于对象的查询语言。2、支持OPath语法风格的途径表达式。3、支持属于多个Entity的多列。4、OO风格指定列:如OrderLine.Order.Customer.ContactName。5、支持聚合函数,SQL99标准函数(基于Entity语义)。6、支持列间表达式计算。7、支持Group&Order&As(列别名)。8、支持EntityView定义,可以在Query定义中使用已有的EntityView!9、支持名空间的使用,支持中文。10、引入from子句,可支持leftjoin,rightjoin,fulljoin,crossjoin。11、在select,from,where子句中支持子查询。12、用OQL别名指代OPath,使OQL的表达更加简洁。13、UDF(UserDefinedFunction)的直接支持。14、union,unionall。15、临时表的支持。16、OQL风格指南。17、对C风格a?b:c条件表达式和CaseWhen表达式的支持。18、对标准日期时间函数的支持。19、对cast/convert类型转换函数的支持。20、支持Update&Delete语句。具体介绍请参考HYPERLINKOql的使用方法报表制作流程的简朴介绍DataCommand设计新建一个空报表模板打开DataComand代码生成工具,应用设计器设计DataComand模型。生成代码,添加业务逻辑。报表模板设计导入DataCommand生成缺省报表模板。应用报表设计器设计报表模板。报表模板发布报表模板发布后,需要给帐号授权。部署DataCommand的dll,策略的dllDataCommand的dll是查询数据,策略是控制报表格式/数据解决的功能(调用报表元数据服务)。命名规范概论报表的开发,涉及策略、业务编程、报表工具多个方面的设计。为了保证报表开发模式的一致性,制定了该规范。ReportTemplate(报表模版)解决方案命名规则名称:领域名称名称+RptTemplate组成。粒度:一个领域一个解决方案项目命名规则名称:服务组名称;粒度:一个服务组一个项目报表命名规则名称:报表名称解决方案命名规则名称:领域名称名称+RptProcessStrategy组成。粒度:一个领域一个解决方案项目命名规则名称:UFIDA.U9.服务组.Report.ProcessStrategy粒度:一个服务组一个项目项目装配件属性命名规则名称:UFIDA.U9.服务组.Report.ProcessStrategy命名空间属性命名规则名称:UFIDA.U9.服务组.Report.ProcessStrategyDataCommand(报表数据)解决方案命名规则名称:领域名称+RptDataCommand组成。粒度:一个领域一个解决方案项目命名规则名称:UFIDA.U9.服务组.Report.DataCommand粒度:一个服务组一个项目项目装配件属性命名规则名称:UFIDA.U9.服务组.Report.DataCommand命名空间属性命名规则名称:UFIDA.U9.服务组.Report.DataCommand类命名规则DataCommand类命名:报表名称+CmdDataSource类命名:报表名称+Ds需求、设计从本章起将完整的介绍一个报表的开发过程,报表的名称是《XX月生产计划与实绩记录》,此报表是京东方茶谷项目的自定义报表。报表功能:查询符合过滤条件的生产订单、与其匹配的竣工报告,记录以下内容:计划投入、计划产出、标准产出率、实际完毕、合格数量、良率、实际入库,按“客户+部门+分类+物料”分类汇总。需求样表《XX月生产计划与实绩记录》的需求描述文档是Excel表,如下表:XX月生产计划与实绩记录记录期间:起始时间2023-01-01截止时间2023-01-31部门客户分类机种(料品)计划投入计划产出标准产出率实际完毕合格数量良率实际入库制造一科友达
小尺寸59.01A16.01110000900090.00%9000890098.89%900059.02A16.00210000900090.00%9000890098.89%900059.02A16.00610000900090.00%9000890098.89%900059.02A16.01410000900090.00%8990890099.00%899059.02A16.01510000900090.00%8990890099.00%8990小计5000045000449804450044980中尺寸59.08A16.015500004990099.80%4990049900100.00%4990059.08A16.016500004990099.80%499004980099.80%4990059.08A16.017500004990099.80%499004988099.96%4990059.08A16.020500004990099.80%500004990099.80%5000059.08A16.024500004990099.80%499904987099.76%4999059.08A16.027500004990099.80%499994989099.78%49999小计300000299400299689299240299689客户小计6000058900589895879058989部门小计6000058900344669343740344669制造二科林光
小尺寸林光2.0-0210000.010000.0100.00%99900.099000.099.10%90000.0林光2.5-0110000.010000.0100.00%99900.099000.099.10%90000.0林光2.5-0210000.010000.0100.00%99900.099000.099.10%90000.0林光2.5-0310000.010000.0100.00%99900.099000.099.10%90000.0林光2.5-0410000.010000.0100.00%99900.099000.099.10%90000.0林光2.5-0510000.010000.0100.00%99900.099000.099.10%90000.0小计10000.010000.099900.099000.090000.0客户小计70000.070000.0699300.0693000.0630000.0松下中尺寸松下1.55000.04900.098.00%5000.049900.0998.00%5000.0松下1.85000.04900.098.00%4990.04990.0100.00%4990.0小计5000.04900.098.00%4800.04800.0100.00%4800.0客户小计15000.014700.014790.059690.014790.0部门小计85000.084700.0714090.0752690.0644790.0合计145000.0143600.01058759.01096430.0989459.0表头报表标题:XX月生产计划与实绩记录。记录期间:记录期间的起始日期、结束日期。表体报表栏目数据来源:部门:生产订单->"生产部门"。 客户:料品档案->"品名"->"所属客户"。 分类:根据竣工报告单->"物料.版本"->后续解决->料品分类->"库存分类"。 机种(料品):生产订单->"料品.版本"。 计划投入:生产订单->“生产数量”。 计划产出:生产订单->“MRP数量”。 标准产出率:计划产出/计划投入。 实际完毕:根据生产订单->“单号.版本”和当前记录期间取得竣工报告单->“竣工数量”。合格数量:根据生产订单->“单号.版本”和当前记录期间取得竣工报告单->“合格数量”。良率:合格数量/实际完毕。 实际入库:根据生产订单->“单号.版本”和当前记录期间取得竣工报告单->“实际入库数量”。设计查找条件以下为查询条件默认说明,未做特殊说明均表达:遵循《多组织查询规范》条件间为and关系。条件为空表达所有。条件默认值为空。条件参照相应档案值列表(须有查询权限)均包含失效过期档案。档案记录参照选择的合法范围,应遵循《多组织查询规范》约定:条件指定单一物流组织,则选取该组织下的档案记录条件指定了多个物流组织,则只能选取[当前组织]下的档案记录查询条件来源取值方式内容约束生产部门《生产订单实体》.[生产部门]多选当前登录组织所属的部门客户《物料》.[品名].[客户段]多选当前登录组织的料品分类《分类》.[分类编码][分类名称]多选只能选择《分类》.[分类体系]=“库存”的分类机种《物料》.[料号][编码]多选当前登录组织的物料档案记录日期日期From…To用户输入栏目说明栏目名称相应数据项算法显示顺序行分组列分组排序备选栏目表头记录期间从条件画面带入表体部门A.部门Y客户A.客户Y分类A.分类Y机种(料品)A.物料计划投入A.计划投入计划产出A.计划产出标准产出率计划产出/计划投入实际完毕A.实际完毕合格数量A.合格数量良率合格数量/实际完毕实际入库A.实际入库算法说明A.查找《生产订单实体》,生成集合A栏目:生产订单:《生产订单实体》.ID部门:《生产订单实体》.[生产部门]客户:《生产订单实体》.[物料].[客户段]分类:《生产订单实体》.[物料].[分类]物料:《生产订单实体》.[物料]计划投入:《生产订单实体》.[生产数量]计划产出:《生产订单实体》.[MRP数量]实际完毕:合格数量:实际入库:条件:《生产订单实体》.组织=当前登录组织《生产订单实体》.生产部门in(条件.[生产部门])《生产订单实体》.物料.客户段in(条件.[客户])《生产订单实体》.物料.分类编码in(条件.[分类])《生产订单实体》.物料in(条件.[机种])《生产订单实体》.计划竣工日between(条件.[记录日期从],[记录日期到])《生产订单实体》.业务类型<>“计划生产”《生产订单实体》.状态<>“开立”B.查找《竣工报告实体》,记录集合A的其他值条件:循环集合A的每一条记录《竣工报告实体》.[生产订单]=A.生产订单《竣工报告实体》.[竣工日期]between(条件.[记录日期从],[记录日期到])《竣工报告实体》.状态<>“开立”计算:A.实际完毕=sum(《竣工报告实体》.[竣工数量])注意计量单位的一致。A.合格数量=sum(《竣工报告实体》.[首检合格数量])注意计量单位的一致。京东方增长:描述性弹性域增长两个扩展字段,分别叫做[首检合格数量]和[累计返工数量],该报表合格数量直接取首检合格数量。A.实际入库=sum(《竣工报告实体》.[实际入库数量])注意计量单位的一致。C.解决集合A,生成报表数据:将集合A按“客户+部门+分类+物料”分类汇总,生成报表数据,并按行分组栏目生成[小计]和[合计]。新建报表模板本章介绍如何新建报表模板。[进入途径]:用友集成开发环境菜单文献登录,输入用户名,密码,如图所示:点击文献,登录点击文献,登录[进入途径]:用友集成开发环境窗体右侧报表资源管理连接报表元数据库,打开报表资源管理第一步:新建报表目录在窗口右侧的ReportRootCatalog目录下单击右键,选择新建报表目录,建立新目录报表制作;如图所示第二步:新建报表容器定位到报表制作单击右键,选择,新建报表容器,弹出如图所示对话框:第三步:新建报表页面在生产计划与实绩记录目录下,单击右键,选择新建报表,如图所示:打开创建报表对话框,输入生产计划与实绩记录报表制作,点击拟定,完毕报表条目的建立。最终效果如下图所示:新建DadaCommand本章介绍如何新建DadaCommand。DadaCommand是为报表提供数据集的项目,DadaCommand中需要选择实体字段、编写业务逻辑,本章重要介绍如何选择实体字段,业务逻辑编写在HYPERLINK编写DadaCommand业务逻辑中介绍。打开DadaCommand工具集点选菜单报表DadaCommand工具集DadaCommand代码生成建立DadaCommand目录按照命名规则,输入服务器名称:MORptTemplate;;指定磁盘途径:D:\MO,点击下一步:指定DadaCommand的服务组名称和生成途径选择字段查询实体输入实体名称,当前实体信息即可在下方显示出来,同时可指定该实体的别名。选择属性(字段)界面操作:在选中实体信息的下方打勾,即代表选中此字段,将设计文档中所需字段所有选中后,点击确认。点此选中点击此按钮可以返回上级目录模糊查找实体实体层次结构点此选中点击此按钮可以返回上级目录模糊查找实体实体层次结构选择实体字段所选这段根据文档需求列表如下:生产订单.生产部门MO_Department生产订单.IDMO_ID生产订单.料品MO_ItemMaster生产订单.MRP数量MO_MRPQty生产订单.生产数量MO_ProductQty生产订单.组织MO_Org生产订单.计划竣工日MO_CompleteDate生产订单.业务类型MO_BusinessType生产订单.状态MO_DocState料品.名称段2ItemMaster_NameSegment2料品.库存分类ItemMaster_StockCategory料品.品名ItemMaster_Name料品.料号ItemMaster_Code精度MO.ProductUOM.Round配置字段信息各参数代表含义:报表参数进入报表前的查询参数结果栏目在报表界面中固定展示栏目缺省列系统自动设立,默认值是否排序所选字段是否排序是否可选所选字段是否是可选的是否行组所选字段是否以行进行分组是否列组所选字段是否以列进行分组行列分组动态选定指定列排序默认列固定栏目查询参数行列分组动态选定指定列排序默认列固定栏目查询参数指定各字段的参数信息若有漏掉,点选选择字段,若检查无误后,点选下一步。数据源命名建立数据源根据命名规则,指定DataSource名称:MODs;指定DataCommand名称:MOCmd;指定DataSource和DataCommand名称信息确认确认无误后,点击完毕。编写DadaCommand业务逻辑DadaCommand代码生成工具完毕后,系统自动生成以下目录:目录层次如下:Xml文献公共函数调试代码实体字段业务逻辑编写系统类库引用Xml文献公共函数调试代码实体字段业务逻辑编写系统类库引用重要编程界面简介MoDs.cs重要预定义了在DadaCommand代码生成工具中选取的字段及其参数等的设立。如图所示:MODsExtend.cs重要提供了可扩展功能,可在此文献里添加用户自定义字段如图所示:MOCmdExtend.cs用户可以扩展业务逻辑。也是我们重要的工作部分。如图所示:业务逻辑是显示在这里定义的业务逻辑是显示在这里定义的PubFunction.cs程序所用到的公共函数,可以定义在这里,如图所示:DataCommand重要属性、方法DataCommand是运用报表服务传递过来的报表参数,Selects,Groups,Orders等集合组织一个取数的逻辑。在编写DataCommand业务逻辑前需要先了解DataCommand的结构,本节简朴介绍DataCommand结构中的重要属性、方法。ShowMode参数ShowMode=0:表达返回空的临时表,在报表第一次展现或者报表业务解决逻辑出现错误时,返回空的临时表。ShowMode=1,执行正常的报表逻辑,该常数在AbsReportDataCommand的已经做过解决。EntityViewQuery:viewQueryEntityViewQuery:viewQuery该对象重要用来执行Oql返回数据,创建临时表。注意:运用该对象执行Oql时,需要使用一个数据库连接,该连接的状态有基类BaseReportDataCommand来维护,在报表子类中不要解决,在整个报表业务逻辑解决要保证使用一个EntityViewQuery,不要使用NewEntityViewQuery来创建。报表相关集合报表解决过程中UI、DataCommand、报表服务各层之间传递参数重要是通过几个集合实现。DataCommand需要组织这几个集合中的元素,为报表服务查询数据准备查询依据。Paramsters:中包含了报表UI给DataComand的传过来的查询条件,其中包含两部分:控制参数、查询参数。控制参数:ControlParams,它重要是用来控制报表的格式,以及哪些条件,哪些栏目需要解决。一般不是作为报表的查询条件使用的(每个控制参数都需要特殊解决)查询参数:这是直接作为报表查询条件的,其中大部分条件可以直接使用,但是有小部分需要通过特殊解决后才干使用。(这是报表条件解决比较麻烦的一部分。)Selection:用户选择栏目。Conditions:查询条件集合。Groups:包含行分组,列分组。Orders:包含了哪些列需要进行排序,这个在DataCommand基类里已经做过解决。QueryContext:用于报表查询的上下文,运营环境中报表上下文将包含UBF系统上下文。List<string>AllSelectFieldList:包含了所有用户可以选择的列,一般情况Select集合中只有用户选择的少量的列,而AllSelectFieldList是所有列,应为DataCommand返回列总是固定的,所有只有Select集合中的列才需要取数,而其它列则取Null就可以了。ExecuteDataReader()ReportService调用DataCommand只需要返回一个dataReader,方法是publicoverrideIDataReaderExecuteDataReader()。该方法已经在基类里做了默认实现,在具体的DataCommand中就不需要实现了。基类中的ExecuteDataReader()代码:publicoverrideIDataReaderExecuteDataReader(){this.SetU9EnvironmentContext();this.AnalyseShowModeParameter();IDataReaderreader=this.ExeDataReader();if(reader!=null){returnreader;}DataTabletable=this.ExecuteDataTable();if(table!=null){returntable.CreateDataReader();}stringoqlString=this.GetOqlString();stringstr2=base.get_QueryContext().get_LoginCulture();ContextManager.get_Context().set_Item("CultureName",str2);GlobalizationContextcontext=newGlobalizationContext(newstring[]{str2});ObjectQueryquery=this.viewQuery.CreateQuery(oqlString,context);returnthis.viewQuery.ExecuteReader(query,newOqlParam[0]);}从ExecuteDataReader()代码可以看出,可以返回DataReader、DataTable、OqlString,可以根据需要选择方法。1、返回DataReader该方法用于简朴的报表,不需要创建临时表的情况publicvirtualIDataReaderExeDataReader(){ returnnull;}//endExecuteDataReader2、返回DataTable该方法用于返回DataTable的情况。publicvirtualDataTableExecuteDataTable(){returnnull;}//3、返回OqlStringprotectedinternalabstractstringGetOqlString();代码生成时生成了GetOqlString()方法。该方法需要每个DataCommand中都去实现具体的逻辑,要根据设计文档去写。注意方法GetResultOql(stringtableName,stringshowMode)publicvirtualstringGetResultOql(stringtableName,stringshowMode)该方法是构造一个最终结果的Oql:从结果临时表上取数。ShowMode=0时:返回空的结果临时表Select*fromTempTablewhere0=1ShowMode=1时返回正常的结果。其它集合FilterDefinesFilterDefines该集合是报表参数集合FieldCollectionFieldCollection该集合是结果字段集合List<string>DefaultColumnList该集合是DataCommand导入时,生成DataTable列的集合,假如该集合为空,则使用DataCommand返回的所有列。以上3个集合是在代码生成时自动生成。并且在Extend文献中留有手工添加子项的方法块。编写实例业务逻辑编写实例业务逻辑的工作就是对DataCommand中的重要属性、方法的赋值、使用,添加逻辑。根据需求文档的规定,我们的业务实现,使用oql编写根据算法说明,我们的设计思想是分五步进行:第一步:根据需求,选取生产订单的字段。第二步:根据选取的生产订单,选取竣工报告字段。第三步:将以上两个临时表合并。第四步:定义临时表。第五步:编译文献。第一步:选取生产订单字段1、算法说明查找《生产订单实体》,生成集合A栏目:生产订单:《生产订单实体》.ID部门:《生产订单实体》.[生产部门]客户:《生产订单实体》.[物料].[客户段]分类:《生产订单实体》.[物料].[分类]物料:《生产订单实体》.[物料]计划投入:《生产订单实体》.[生产数量]计划产出:《生产订单实体》.[MRP数量]条件:《生产订单实体》.组织=当前登录组织《生产订单实体》.生产部门in(条件.[生产部门])《生产订单实体》.物料.客户段in(条件.[客户])《生产订单实体》.物料.分类编码in(条件.[分类])《生产订单实体》.物料in(条件.[机种])《生产订单实体》.计划竣工日between(条件.[记录日期从],[记录日期到])《生产订单实体》.业务类型<>“计划生产”《生产订单实体》.状态<>“开立”2、实现流程2.1组织栏目集合SelectionDs是数据源MoDs类实例,MoDs类继承自报表数据源抽象基类SimpleOqlTool。使用AddSelect()方法向集合Selection添加元素,实现效果如下:Ds.AddSelect(MODs.MO_ID);Ds.AddSelect(MODs.Department_Name);Ds.AddSelect(MODs.Department_ID);Ds.AddSelect(MODs.ItemMaster_NameSegment2);Ds.AddSelect(MODs.StockCategory_Name);Ds.AddSelect(MODs.MO_CompleteDate);Ds.AddSelect(MODs.ItemMaster_Name);Ds.AddSelect(MODs.ItemMaster_Code);Ds.AddSelect(MODs.MO_ProductQty);Ds.AddSelect(MODs.MO_MRPQty);Ds.AddSelect(MODs.StockCategory_Code);Ds.AddSelect(MODs.Org_ID);Ds.AddSelect(MODs.Round_Precision);Ds.AddSelect(MODs.MO_BusinessType);Ds.AddSelect(MODs.MO_DocState);2.2组织条件集合Conditions使用AddCondition()方法向集合Conditions添加元素。foreach(QueryParameterpinthis.Parameters){Ds.AddCondition(p);}Ds.AddCondition("Org_ID="+QueryContext.LoginOrgID);//《生产订单实体》.业务类型<>“计划生产”Ds.AddCondition("MO_BusinessType!=50");//《生产订单实体》.状态<>“开立”Ds.AddCondition("MO_DocState!=0");2.3建立临时表this.Oql=Ds.GetOqlString();TempTableUtil.CreateTempTableByOql("temp",this.Oql,viewQuery);3、调试3.1应用vs的调试功能,此临时表的示例场景之一为:selectMO.IDasMO_ID,Department0.NameasDepartment_Name,Department0.IDasDepartment_ID,ItemMaster0.NameSegment2asItemMaster_NameSegment2,StockCategory0.NameasStockCategory_Name,MO.CompleteDateasMO_CompleteDate,ItemMaster0.NameasItemMaster_Name,ItemMaster0.CodeasItemMaster_Code,MO.ProductQtyasMO_ProductQty,MO.MRPQtyasMO_MRPQty,StockCategory0.CodeasStockCategory_Code,Org0.IDasOrg_ID,ProductUOM0.Round.PrecisionasRound_Precision,MO.BusinessTypeasMO_BusinessType,MO.DocStateasMO_DocStatefromUFIDA::U9::MO::MO::MOasMOleftjoinMO.DepartmentasDepartment0leftjoinMO.ItemMasterasItemMaster0leftjoinItemMaster0.StockCategoryasStockCategory0leftjoinMO.OrgasOrg0leftjoinMO.ProductUOMasProductUOM0where((MO.CompleteDatebetween'2023-6-10:00:00'and'2023-6-250:00:00'))and(Org0.ID=0028)and(MO.BusinessType!=50)and(MO.DocState!=0)这段代码是Oql脚本,3.2此时可用应用oql测试工具做进一步测试:[进入途径]:用友进程开发环境报表datacommand工具集oql测试工具3.3执行sqlserver2023查询工具,效果如下所示:第二步:选取竣工报告字段1、算法说明查找《竣工报告实体》,记录集合A的其他值条件:《竣工报告实体》.[生产订单]=A.生产订单《竣工报告实体》.[竣工日期]between(条件.[记录日期从],[记录日期到])《竣工报告实体》.状态<>“开立”计算:A.实际完毕=sum(《竣工报告实体》.[竣工数量])A.合格数量=sum(《竣工报告实体》.[首检合格数量])A.实际入库=sum(《竣工报告实体》.[实际入库数量])2、实现流程SimpleOqlTool是报表数据源抽象基类,操作临时表时可以使用此类。SimpleOqlTooloqlTools=newSimpleOqlTool();2.1、选取字段oqlTools.AddSelect("CompleteQty",AggregateType.Sum);oqlTools.AddSelect("casewhen(DescFlexField.PrivateDescSeg1='')or(isnull(DescFlexField.PrivateDescSeg1,0)='0')then0elseconvert(decimal(24,9),DescFlexField.PrivateDescSeg1)end","DescFlexField_PrivateDescSeg1",AggregateType.Sum);oqlTools.AddSelect("RcvQtyByProductUOM",AggregateType.Sum);oqlTools.AddSelect("DocState");oqlTools.AddSelect("MO");oqlTools.AddCondition("MOin(selecttemp.MO_IDfromtemp)");2.2、增长条件if(this.Parameters["MO_CompleteDate"]!=null){oqlTools.AddCondition("CompleteDate",ReportDataType.DateTime,enuOperatorType.Between,this.Parameters["MO_CompleteDate"].Values);}oqlTools.AddCondition("DocState!=0");2.3、选取实体oqlTools.SetFromClause("UFIDA::U9::MO::Complete::CompleteRpt");2.4、建立临时表this.Oql=oqlTools.GetOqlString();TempTableUtil.CreateTempTableByOql("temp1",this.Oql,viewQuery);3、调试在SQLSERVER2023中调试效果如下:第三步:连接临时表两个表联合起来,就是最终需要的数据。其条件为:temp1ontemp.MO_ID=temp1.MO"返回结果集是使用返回OqlString方式。实现如下:StringBuildersb=newStringBuilder();sb.Append("selecttemp.Round_Precision,temp.Department_Name,temp.Department_ID,temp.Org_ID,temp.StockCategory_Code,temp.ItemMaster_Code,temp.MO_CompleteDate,temp.ItemMaster_NameSegment2,temp.StockCategory_Name,temp.ItemMaster_Name,temp.MO_ProductQty,temp.MO_MRPQty,temp.MO_DocState,temp.MO_BusinessType,");sb.Append("temp1.CompleteQty,temp1.DescFlexField_PrivateDescSeg1,temp1.RcvQtyByProductUom,temp1.DocState");sb.Append("fromtempastempleftjointemp1astemp1ontemp.MO_ID=temp1.MO");this.ReportResultOqlString=sb.ToString();第四步:定义临时表输出的字段是定义在临时表中的,也是在报表模板中所用到的字段,程序如下:privatevoidDefineResultTempTableSchema(){Column[]cols=newColumn[] { newColumn("Department_Name","nvarchar(50)"),newColumn("Department_ID","bigint"),newColumn("MO_MRPQty","decimal(24,9)"),newColumn("MO_ProductQty","decimal(24,9)"),newColumn("MO_CompleteDate","datetime"),newColumn("ItemMaster_NameSegment2","nvarchar(50)"),newColumn("ItemMaster_Name","nvarchar(50)"),newColumn("ItemMaster_Code","nvarchar(50)"),newColumn("StockCategory_Code","nvarchar(50)"),newColumn("Org_ID","nvarchar(50)"),newColumn("CompleteQty","decimal(24,9)"),newColumn("DescFlexField_PrivateDescSeg1","de
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甲乙丙房屋买卖合同全解读
- 消防工程招投标文书
- 服务合同协议权威解读
- 童鞋品牌代理经销合同
- 施工安全保证书样本
- 信用担保借款合同的修改注意事项
- 标准借款协议书格式
- 粮油食品供应协议
- 室内外照明设计招标
- 批发兼零售合作劳务合同
- 免疫治疗免疫相关不良反应的处理
- 优秀团队申报材料【优秀5篇】
- 大学与青年发展智慧树知到答案章节测试2023年华侨大学
- 深圳市2021-2022学年初三年级中考适应性考试试题及答案
- 森林防火制度汇编
- 电石生产能耗的影响因素
- JJF(纺织)060-2010恒温恒湿箱校准规范
- THBFIA 0004-2020 红枣制品标准
- GB/T 818-2000十字槽盘头螺钉
- GB/T 3863-2008工业氧
- GB/T 31545-2015核电工程用硅酸盐水泥
评论
0/150
提交评论