简单账表
本帖将基于实际开发过程,逐步介绍如何开发出一张全新的简单账表 - 采购日报表
1.在BOS设计器中,新建一张空白简单账表
简单修改下报表的名称等属性之后,保存即可。

图一:新建简单账表

图二:简单账表设计器及其关键属性

2.开发报表服务端取数插件
简单账表服务端取数插件,必须从 Kingdee.BOS.Contracts.Report.SysReportBaseService 派生。
更详细的简单账表插件开发资料,可以从如下文档获取:

http://open.kingdee.com/K3Cloud/Wenku/DocumentView.aspx?docId=117280
账表服务取数插件示例代码

插件开发完毕后,编译成*.dll文件。
本帖最后会附上示例报表服务端插件的完整代码。

3.给简单账表,注册服务端插件
把刚刚编译通过的报表插件,注册到服务端插件列表

图三:注册服务器插件

4.新建报表过滤界面
点击新建菜单,继承 BOS - 应用框架 - 动态表单 - 公共过滤,创建一个新的过滤界面,
并在过滤界面上,绘制各个过滤条件字段。
绘制完毕,保存。

图四:新建过滤界面

5:配置简单账表的过滤界面
把新建的过滤界面的标识,复制粘贴到简单账表的"过滤窗口业务对象"属性上

6.修改报表服务端取数插件,根据过滤界面上的条件,据此过滤数据
在BuilderReportSqlAndTempTable事件中,通过读取filter.FilterParameter对象,获取到完整的过滤方案,据此拼装出过滤条件、排序字段等。
本帖的示例代码中,未读取过滤条件,请自行尝试。

7.发布主控台
把报表发布到主控台,为了快速看到效果,建议先取消报表的权限控制。

8.浏览报表效果
登录K/3 Cloud,打开报表,浏览报表的运行效果,调试与修正报表插件问题。

图五:本案例的报表效果

实例代码:
using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.ComponentModel;
 using Kingdee.BOS;
 using Kingdee.BOS.Util;
 using Kingdee.BOS.Core;
 using Kingdee.BOS.Core.Report;
 using Kingdee.BOS.Core.Report.PlugIn;
 using Kingdee.BOS.Core.Report.PlugIn.Args;
 using Kingdee.BOS.Core.List;
 using Kingdee.BOS.Contracts.Report;
 using Kingdee.BOS.App.Data;
 using Kingdee.BOS.Orm.DataEntity;
 namespace JDSample.ServicePlugIn.Report
 {
     /// <summary>
     /// 自定义简单账表:服务端插件
     /// </summary>
     /// <remarks>
     /// 开发目的:用以学习简单账表插件的各种事件、属性
     /// 
    /// 案例:
     /// 按日期,搜索采购订单,
     /// 输出:编号、状态、物料、数量、单位、单价、价税合计
     /// 可以对物料汇总;
     /// 默认按编号排序
     /// 数量、价税合计需要合计
     /// 数量、单价、价税合计,需控制精度
     /// 相同的采购订单行,编号不重复显示
     /// </remarks>
     [Description("自定义简单账表")]
     public class S151016MySysReport : SysReportBaseService
     {
         /***********事件执行顺序*************
             2015/8/31 18:04:12 : Initialize
             2015/8/31 18:04:12 : GetTableName
             2015/8/31 18:04:15 : BuilderReportSqlAndTempTable
             2015/8/31 18:04:15 : GetIdentityFieldIndexSQL
             2015/8/31 18:04:15 : ExecuteBatch
             2015/8/31 18:04:19 : GetReportHeaders
             2015/8/31 18:04:19 : GetReportTitles
             2015/8/31 18:04:27 : GetTableName
             2015/8/31 18:04:27 : GetIdentityFieldIndexSQL
             2015/8/31 18:04:28 : ExecuteBatch
             2015/8/31 18:04:28 : AnalyzeDspCloumn
             2015/8/31 18:04:28 : AfterCreateTempTable
             2015/8/31 18:04:28 : GetSummaryColumnInfo
             2015/8/31 18:04:28 : GetSummaryColumsSQL
             2015/8/31 18:04:28 : GetTableName
             2015/8/31 18:04:28 : GetTableName
             2015/8/31 18:04:29 : ExecuteBatch
             2015/8/31 18:04:29 : GetIdentityFieldIndexSQL
             2015/8/31 18:04:29 : ExecuteBatch
             2015/8/31 18:04:29 : CreateGroupSummaryData
             2015/8/31 18:04:29 : GetListData
             2015/8/31 18:04:30 : GetReportData
             2015/8/31 18:04:30 : GetRowsCount
             2015/8/31 18:04:30 : GetListData
          */
         /// <summary>
         /// 初始化事件:在此事件中,设置报表基本属性
         /// </summary>
         /// <remarks>
         /// 
        /// </remarks>
         public override void Initialize()
         {
             base.Initialize();
             // 简单账表类型:普通、树形、分页
             this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL;
             // 报表名称
             this.ReportProperty.ReportName = new LocaleValue("日采购报表", base.Context.UserLocale.LCID);
             // 
            this.IsCreateTempTableByPlugin = true;
             // 
            this.ReportProperty.IsUIDesignerColumns = false;
             // 
            this.ReportProperty.IsGroupSummary = true;
             // 
            this.ReportProperty.SimpleAllCols = false;
             // 单据主键:两行FID相同,则为同一单的两条分录,单据编号可以不重复显示
             this.ReportProperty.PrimaryKeyFieldName = "FID";
             // 
            this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true;
             
             // 报表主键字段名:默认为FIDENTITYID,可以修改
             //this.ReportProperty.IdentityFieldName = "FIDENTITYID";
             //
             // 设置精度控制
             List<DecimalControlField> list = new List<DecimalControlField>();
             // 数量
             list.Add(new DecimalControlField
             {
                 ByDecimalControlFieldName = "FQty",
                 DecimalControlFieldName = "FUnitPrecision"
             });
             // 单价
             list.Add(new DecimalControlField
             {
                 ByDecimalControlFieldName = "FTAXPRICE",
                 DecimalControlFieldName = "FPRICEDIGITS"
             });
             // 金额
             list.Add(new DecimalControlField
             {
                 ByDecimalControlFieldName = "FALLAMOUNT",
                 DecimalControlFieldName = "FAMOUNTDIGITS"
             });
             this.ReportProperty.DecimalControlFieldList = list;
         }
         public override string GetTableName()
         {
             var result = base.GetTableName();
             return result;
         }
         /// <summary>
         /// 向报表临时表,插入报表数据
         /// </summary>
         /// <param name="filter"></param>
         /// <param name="tableName"></param>
         public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
         {
             base.BuilderReportSqlAndTempTable(filter, tableName);
 
            // 拼接过滤条件 : filter
             // 略
             
             // 默认排序字段:需要从filter中取用户设置的排序字段
             base.KSQL_SEQ = string.Format(base.KSQL_SEQ, " FID ");
             
             // 取数SQL
             // FID, FEntryId, 编号、状态、物料、数量、单位、单位精度、单价、价税合计
             string sql = string.Format(@"/*dialect*/
                                 select t0.FID, t1.FENTRYID
                                        ,t0.FBILLNO
                                        ,t0.FDOCUMENTSTATUS
                                        ,t2.FLOCALCURRID
                                        ,ISNULL(t20.FPRICEDIGITS,4) AS FPRICEDIGITS
                                        ,ISNULL(t20.FAMOUNTDIGITS,2) AS FAMOUNTDIGITS
                                        ,t1.FMATERIALID
                                        ,t1M_L.FNAME as FMaterialName
                                        ,t1.FQTY
                                        ,t1u.FPRECISION as FUnitPrecision
                                        ,t1U_L.FNAME as FUnitName
                                        ,t1f.FTAXPRICE
                                        ,t1f.FALLAMOUNT
                                        ,row_number() over (order by t0.FID) as FIDENTITYID
                                   into {0}
                                   from T_PUR_POORDER t0
                                  inner join T_PUR_POORDERFIN t2 on (t0.FID = t2.FID)
                                   left join T_BD_CURRENCY t20 on (t2.FLOCALCURRID = t20.FCURRENCYID)
                                  inner join T_PUR_POORDERENTRY t1 on (t0.FID = t1.FID)
                                   left join T_BD_MATERIAL_L t1M_L on (t1.FMATERIALID = t1m_l.FMATERIALID and t1M_L.FLOCALEID = 2052)
                                  inner join T_PUR_POORDERENTRY_F t1F on (t1.FENTRYID = t1f.FENTRYID)
                                   left join T_BD_UNIT t1U on (t1f.FPRICEUNITID = t1u.FUNITID)
                                   left join T_BD_UNIT_L t1U_L on (t1U.FUNITID = t1U_L.FUNITID and t1U_L.FLOCALEID = 2052) ",
                         tableName);
             DBUtils.ExecuteDynamicObject(this.Context, sql);
         }
         protected override string GetIdentityFieldIndexSQL(string tableName)
         {
             string result = base.GetIdentityFieldIndexSQL(tableName);
             return result;
         }
         protected override void ExecuteBatch(List<string> listSql)
         {
             base.ExecuteBatch(listSql);
         }
         /// <summary>
         /// 构建出报表列
         /// </summary>
         /// <param name="filter"></param>
         /// <returns></returns>
         /// <remarks>
         /// // 如下代码,演示如何设置同一分组的分组头字段合并
         /// // 需配合Initialize事件,设置分组依据字段(PrimaryKeyFieldName)
         /// ReportHeader header = new ReportHeader();
         /// header.Mergeable = true;
         /// int width = 80;
         /// ListHeader headChild1 = header.AddChild("FBILLNO", new LocaleValue("应付单号"));
         /// headChild1.Width = width;
         /// headChild1.Mergeable = true;
         ///             
        /// ListHeader headChild2 = header.AddChild("FPURMAN", new LocaleValue("采购员"));
         /// headChild2.Width = width;
         /// headChild2.Mergeable = true;
         /// </remarks>
         public override ReportHeader GetReportHeaders(IRptParams filter)
         {
             // FID, FEntryId, 编号、状态、物料、数量、单位、单位精度、单价、价税合计
             ReportHeader header = new ReportHeader();
             // 编号
             var status = header.AddChild("FDocumentStatus", new LocaleValue("状态"));
             status.ColIndex = 0;
             var billNo = header.AddChild("FBillNo", new LocaleValue("单据编号"));
             billNo.ColIndex = 1;
             billNo.IsHyperlink = true;          // 支持超链接
             var material = header.AddChild("FMaterialName", new LocaleValue("物料"));
             material.ColIndex = 2;
             var qty = header.AddChild("FQty", new LocaleValue("数量"), SqlStorageType.SqlDecimal);
             qty.ColIndex = 3;
             var unit = header.AddChild("FUnitName", new LocaleValue("单位"));
             unit.ColIndex = 4;
             var price = header.AddChild("FTAXPRICE", new LocaleValue("含税价"), SqlStorageType.SqlDecimal);
             price.ColIndex = 5;
             var amount = header.AddChild("FALLAMOUNT", new LocaleValue("价税合计"), SqlStorageType.SqlDecimal);
             amount.ColIndex = 6;
             return header;
         }
         public override ReportTitles GetReportTitles(IRptParams filter)
         {
             var result = base.GetReportTitles(filter);
             DynamicObject dyFilter = filter.FilterParameter.CustomFilter;
             if (dyFilter != null)
             {
                 if (result == null)
                 {
                     result = new ReportTitles();
                 }
                 result.AddTitle("F_JD_Date", Convert.ToString(dyFilter["F_JD_Date"]));
             }
             return result;
         }
         protected override string AnalyzeDspCloumn(IRptParams filter, string tablename)
         {
             string result = base.AnalyzeDspCloumn(filter, tablename);
             return result;
         }
         protected override void AfterCreateTempTable(string tablename)
         {
             base.AfterCreateTempTable(tablename);
         }
         /// <summary>
         /// 设置报表合计列
         /// </summary>
         /// <param name="filter"></param>
         /// <returns></returns>
         public override List<SummaryField> GetSummaryColumnInfo(IRptParams filter)
         {
             var result = base.GetSummaryColumnInfo(filter);
             result.Add(new SummaryField("FQty", Kingdee.BOS.Core.Enums.BOSEnums.Enu_SummaryType.SUM));
             result.Add(new SummaryField("FALLAMOUNT", Kingdee.BOS.Core.Enums.BOSEnums.Enu_SummaryType.SUM));
             return result;
         }
         protected override string GetSummaryColumsSQL(List<SummaryField> summaryFields)
         {
             var result = base.GetSummaryColumsSQL(summaryFields);
             return result;
         }
         protected override System.Data.DataTable GetListData(string sSQL)
         {
             var result = base.GetListData(sSQL);
             return result;
         }
         protected override System.Data.DataTable GetReportData(IRptParams filter)
         {
             var result = base.GetReportData(filter);
             return result;
         }
         protected override System.Data.DataTable GetReportData(string tablename, IRptParams filter)
         {
             var result = base.GetReportData(tablename, filter);
             return result;
         }
         public override int GetRowsCount(IRptParams filter)
         {
             var result = base.GetRowsCount(filter);
             return result;
         }
         protected override string BuilderFromWhereSQL(IRptParams filter)
         {
             string result = base.BuilderFromWhereSQL(filter);
             return result;
         }
         protected override string BuilderSelectFieldSQL(IRptParams filter)
         {
             string result = base.BuilderSelectFieldSQL(filter);
             return result;
         }
         protected override string BuilderTempTableOrderBySQL(IRptParams filter)
         {
             string result = base.BuilderTempTableOrderBySQL(filter);
             return result;
         }
         public override void CloseReport()
         {
             base.CloseReport();
         }
         protected override string CreateGroupSummaryData(IRptParams filter, string tablename)
         {
             string result = base.CreateGroupSummaryData(filter, tablename);
             return result;
         }
         protected override void CreateTempTable(string sSQL)
         {
             base.CreateTempTable(sSQL);
         }
         public override void DropTempTable()
         {
             base.DropTempTable();
         }
         public override System.Data.DataTable GetList(IRptParams filter)
         {
             var result = base.GetList(filter);
             return result;
         }
         public override List<long> GetOrgIdList(IRptParams filter)
         {
             var result = base.GetOrgIdList(filter);
             return result;
         }
         public override List<Kingdee.BOS.Core.Metadata.TreeNode> GetTreeNodes(IRptParams filter)
         {
             var result = base.GetTreeNodes(filter);
             return result;
         }
     }
 }

本文转自51GT51CTO博客,原文链接:http://blog.51cto.com/yataigp/1861349 ,如需转载请自行联系原作者

k3cloud新建简单帐表教程相关推荐

  1. 简单帐表插件开发示例分享

    public class DemoSysReport : SysReportBaseService { public override void Initialize() { // 支持分组汇总 th ...

  2. 新账户的收发邮件服务器,Foxmail怎么用?Foxmail新建邮箱帐户接收邮件使用教程...

    foxmail是办公室美美常用的桌面邮件管理工具,假如您需要经常接收邮件,或者有几个邮箱需要管理,那么使用Foxmail会很方便.Foxmail是张小龙先生编写的Internet电子邮件客户端软件,以 ...

  3. asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程...

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...

  4. Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交

    在Java EE应用编程中Servlet是基础,JSP是建立在Servlet基础之上的,其他Web框架如Struts.WebWork和Spring MVC都是基于Servlet的.本文主要讲述MyEc ...

  5. MongoDB最简单的入门教程之二 使用nodejs访问MongoDB

    在前一篇教程 MongoDB最简单的入门教程之一 环境搭建** 里,我们已经完成了MongoDB的环境搭建.** 在localhost:27017的服务器上,在数据库admin下面创建了一个名为per ...

  6. mysql 的新建查询怎么弄_在Navicat中如何新建数据库和表并做查询

    上一篇文章,小编给大家分享了在Navicat中如何远程连接数据库,没有来得及上车的小伙伴可以戳这篇文章:在Ubuntu14.04中配置mysql远程连接教程.今天小编给大家分享一下如何在Navicat ...

  7. bootstrap-typeahead 自动补全简单的使用教程

    bootstrap-typeahead 自动补全简单的使用教程 参考链接: 参考1 : https://segmentfault.com/a/1190000006036166 参考2 : https: ...

  8. 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)

    转:https://blog.csdn.net/forezp/article/details/69808079 最新版本: 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign ...

  9. 史上最简单的git教程搭配Github和Gitee一起食用更佳

    史上最简单的git教程 开始之前 git的最简单使用 1. 安装 2. 配置 2.1 用户信息 3. 最基本使用 Github 1. 首先你需要一个账号 2. 你需要一个仓库 Gitee 开始之前 g ...

  10. MongoDB最简单的入门教程之五-通过Restful API访问MongoDB

    通过前面四篇的学习,我们已经在本地安装了一个MongoDB数据库,并且通过一个简单的Spring boot应用的单元测试,插入了几条记录到MongoDB中,并通过MongoDB Compass查看到了 ...

最新文章

  1. 打一场AI竞赛,让你知道我的厉害
  2. bigdecimal取小数部分_Java中BigDecimal保留两位小数点有哪些方法
  3. 【NLP】Transformer及其变种
  4. sscom 中文显示 乱码_解决SSM框架使用过程中的中文乱码问题
  5. 5 分钟上手 ECharts
  6. background-image使用svg如何改变颜色
  7. ES6学习笔记(五):轻松了解ES6的内置扩展对象
  8. sql语句截断_SQL Server中SQL截断和SQL删除语句之间的区别
  9. OpenCasCade中一个V3d_Viewer对应多个AIS_InteractiveContext的使用
  10. mac乱码 飞秋_ubuntu 下安装 dukto
  11. android开源系统brvah,Brvah——一个强大的Adapter框架
  12. fbx文件批量格式转换(glb/gltf)与压缩
  13. Fluent动网格知识汇总
  14. Redux-Router
  15. 网页登录页面模板下载
  16. java getday_Date类的getDay()和getDate()方法
  17. Oracle数据库 —— DDL
  18. 用python画地球_如何用PYTHON程序模拟一个太阳系?
  19. 数据结构基本操作总结(C语言版)---链表、栈与队列
  20. UE4 材质制作闪烁心脏起搏效果 学习笔记

热门文章

  1. Silverlight+WCF 新手实例 象棋 棋子移动-规则补充(三十七)
  2. 机器学习前沿热点--Deep Learning
  3. 【OpenCV学习笔记】【编程实例】六 (霍夫圆检测续)
  4. Unity实现导航到鼠标点击位置并显示路线
  5. STM32DMA搬运ADC只搬了一半数据的原因。
  6. 实习成长之路——设计模式四:什么是单一职责原则,如何判定某个类的职责是否够“单一”?
  7. 算法笔记-------基数排序
  8. 生产者消费者之爸爸妈妈儿子女儿苹果橘子编程实现
  9. 树莓派4烧录系统后黑屏_原创试用 | 树莓派3B+测评(二)ubuntu系统烧录+彩虹屏问题解决...
  10. php 一键wifi,Mac wifi 自动控制脚本