透视表应用: 简易账表改造成横向展示报表示例
# 简易账表改造成横向展示报表示例:多账簿日报表改多账簿日报表(横向)
# 本篇文章反编译的方法可以用继承类的方式优化
## 一 业务场景
星空标准报表,很多是竖向展示的,如多账簿现金流量表的数据展示是按不同的账簿竖向展示,如下图
![image.webp](/download/01004515310277a24dafa7c7e860a4147c0f.webp)
现客户需要对比不同账簿的现金流项目金额,需要将表按账簿做成横向展示的,如下图
![image.webp](/download/0100e5ca1f2d04c64b9bbf2d7b9d14cd540a.webp)
## 二 解决方法
将原来的多账簿现金流量表改造成透视表,透视表可以对行、列以及数据展示字段进行设置。
解决思路主要来源于以下文章,在此感谢原作者。
[57.2、报表插件,透视表](https://wenku.my7c.com/article/71378182103646976?productLineId=1)
## 三 实现步骤
前面展示的多现金流量表的横向展示改造是之前开发好的,为了能更好展示开发的细节,在这我重新改造一张标准报表,将多账簿日报表 改为 按账簿横向展示。
新建一张透视表,取数逻辑和过滤界面还是使用原多账簿日报表的,简单改造部分代码便可实现。
### 1.创建透视表
BOS平台搜索“多账簿日报表”
![image.webp](download/010089eeeafad63841eba28e8b679fbf8897.webp)
引入业务对象后,可以在简单账表分类看到多账簿日报表,在透视表节点右键新增,选择空白对象。
![image.webp](/download/0100f107efbe46ab4895853eecfc03e5c22d.webp)
如下图,编号PKSQ_MultiDailyReport_H是自定义的,开发商标识加多账簿日报表标识加_H。
![image.webp](/download/0100d36dbfb86b674b7c869cce61ffa74f4f.webp)
确定后保存,透视表这里就出现了新增的。
![image.webp](/download/010088080f05a80b4810a241e0a026bf0f21.webp)
具体可参考官方贴:[透视表简单示例教程](https://wenku.my7c.com/article/10134?productLineId=1&isKnowledge=2)
### 2.使用多账簿现金流量表的过滤框
找到过滤条件框,右键新增
![image.webp](/download/01004fe443096fa242ae8b931b0dc4acbfb7.webp)
这里选择复制,找到原报表的过滤框,输入自定义名称和编号,确定,保存。这里编号是:PKSQ_MultiDailyReport_H_Filter
![image.webp](/download/01003e6e16f5ffcc43f7a40a7a947389cb5a.webp)
创建好后,将过滤框唯一标识,也就是创建时输入的编号:PKSQ_MultiDailyReport_H_Filter复制到多账簿日报(横向)的过滤窗口业务对象(报表),保存。
![image.webp](12)
![image.webp](/download/01000db7f52c7a4d40db84023b13678691f9.webp)
此时,过滤框和报表就绑定好了,接下来可以发布到主控制台验证一下,最好是和原来的报表发布在同一个位置。具体可参考以下帖子
[57.1、报表插件,透视表,界面](https://wenku.my7c.com/article/71357429627448320?productLineId=1)
效果如下,但是这里没有配置取数逻辑,关闭的时候会报错,所以接下来需要编写报表服务插件。
![image.webp](/download/010065929124b17144d68f48e43faafc975a.webp)
### 3.使用多账簿日报表的取数逻辑
1)找到多账簿日报表的服务器插件的dll组件
![image.webp](/download/01000b071b4cb09148ff8e4aeb81d0c01bf0.webp)
插件:Kingdee.K3.FIN.GL.App.Report.MultiDailyReportService, Kingdee.K3.FIN.GL.App.Report
这里包含插件的信息,首先复制后面部分(Kingdee.K3.FIN.GL.App.Report),到安装目录C:\Program Files (x86)\Kingdee\K3Cloud\WebSite\bin搜索,如下图
![image.webp](/download/01003020c24bfd23434d9d6003d5c87d012d.webp)
![image.webp](/download/0100f6242abd171c48ea847b23d6d8968e32.webp)
2)反编译dll
反编译dll需要使用到这个![image.webp](/download/0100134306a28ea04d2d88ba1dfccc328603.webp)
这个工具就是附件ILSpy_binaries_4.0.1.4530.zip,压缩包解压后
![image.webp](/download/0100c60aef0e5ca4470eba0996eb5ae1e95f.webp)
双击运行ILSpy.exe
![image.webp](/download/010008a55cd6dedd476080b5b7984178c38c.webp)
将Kingdee.K3.FIN.GL.App.Report.dll拖动到反编译工具
![image.webp](/download/01009d1cfc090cbf4f7a8d56027413920317.webp)
找到多账簿日报表取数插件
![image.webp](/download/0100f8ca7fcea98b42e3aadceccb0d85d29a.webp)
3)项目中新增类
Ctrl+A复制所有代码,在项目中添加新类,更改描述和类名,原类名后面加_H。
![image.webp](/download/0100bc0a2309de0448cba62d5e00a84db2e6.webp)
引用报错添加对应的dll组件
![image.webp](/download/0100736fc2743e314d58a2921a5bfad22e78.webp)
添加完需要的dll组件后,引用不报错了
![image.webp](/download/010022e5ba95a14c4370b5e5fe1792a514c5.webp)
### 4.改造部分代码
1)初始化,找到初始化方法Initialize,新增如下代码
![image.webp](/download/0100953a84bac3424b908dbedf95f9e8f9c4.webp)
```
//初始化
public override void Initialize()
{
base.ReportProperty.ReportName = new LocaleValue("多账簿日报表(横向)");
base.ReportProperty.DetailReportId = "GL_RPT_SubLedger";
base.ReportProperty.DetailReportType = ReportType.REPORTTYPE_MOVE;
base.ReportProperty.BillKeyFieldName = "FACCOUNTID";
}
```
2)设置行字段、列字段和数据展示字段
这里借用上面的图说明:
![image.webp](/download/010091ff9083e9c440c38397a0c06fbcf4aa.webp)
找到方法BuilderReportSqlAndTempTable,加上以下代码
![image.webp](/download/010088cc13bcab3c4646b7d09d298715979f.webp)
```
//修改临时表
base.SettingInfo = new PivotReportSettingInfo();
//不合计
base.SettingInfo.IsShowGrandTotal = false;
//添加标题字段
#region
//设置行
SettingField FACCOUNTNUMBER = PivotReportSettingInfo.CreateColumnSettingField(new TextField()
{
Key = "FACCOUNTNUMBER",
FieldName = "FACCOUNTNUMBER",
Name = new LocaleValue("科目编码")
}, 0);
FACCOUNTNUMBER.IsAllowDrag = false;
FACCOUNTNUMBER.IsShowTotal = false;
base.SettingInfo.RowTitleFields.Add(FACCOUNTNUMBER);
base.SettingInfo.SelectedFields.Add(FACCOUNTNUMBER);
SettingField FACCOUNTNAME = PivotReportSettingInfo.CreateColumnSettingField(new TextField()
{
Key = "FACCOUNTNAME",
FieldName = "FACCOUNTNAME",
Name = new LocaleValue("科目名称")
}, 0);
FACCOUNTNAME.IsAllowDrag = false;
FACCOUNTNAME.IsShowTotal = false;
base.SettingInfo.RowTitleFields.Add(FACCOUNTNAME);
base.SettingInfo.SelectedFields.Add(FACCOUNTNAME);
//设置列
SettingField FACCOUNTBOOKNAME = PivotReportSettingInfo.CreateColumnSettingField(new TextField()
{
Key = "FACCOUNTBOOKNAME",
FieldName = "FACCOUNTBOOKNAME",
Name = new LocaleValue("账簿")
}, 0);
base.SettingInfo.ColTitleFields.Add(FACCOUNTBOOKNAME);
base.SettingInfo.SelectedFields.Add(FACCOUNTBOOKNAME);
//数据展示
SettingField FYDAYDEBITAMOUNT = PivotReportSettingInfo.CreateColumnSettingField(new DecimalField()
{
Key = "FYDAYDEBITAMOUNT",
FieldName = "FYDAYDEBITAMOUNT",
Name = new LocaleValue("上日余额(借)")
}, 0);
FYDAYDEBITAMOUNT.SumType = 1;
base.SettingInfo.AggregateFields.Add(FYDAYDEBITAMOUNT);
base.SettingInfo.SelectedFields.Add(FYDAYDEBITAMOUNT);
SettingField FYDAYCREDITAMOUNT = PivotReportSettingInfo.CreateColumnSettingField(new DecimalField()
{
Key = "FYDAYCREDITAMOUNT",
FieldName = "FYDAYCREDITAMOUNT",
Name = new LocaleValue("上日余额(贷)")
}, 0);
FYDAYCREDITAMOUNT.SumType = 1;
base.SettingInfo.AggregateFields.Add(FYDAYCREDITAMOUNT);
base.SettingInfo.SelectedFields.Add(FYDAYCREDITAMOUNT);
SettingField FBALDEBITAMOUNT = PivotReportSettingInfo.CreateColumnSettingField(new DecimalField()
{
Key = "FBALDEBITAMOUNT",
FieldName = "FBALDEBITAMOUNT",
Name = new LocaleValue("本日余额(借)")
}, 0);
FBALDEBITAMOUNT.SumType = 1;
base.SettingInfo.AggregateFields.Add(FBALDEBITAMOUNT);
base.SettingInfo.SelectedFields.Add(FBALDEBITAMOUNT);
#endregion
```
相关说明如下:
![image.webp](/download/0100a9e656d1942e4006b13ae8ea9fb76fd1.webp)
关于字段类型,一般要么是文本类型,就是new TextField。另一种是金额或者数字类型就用new DecimalField。
![image.webp](/download/01009387c668e85b4b3baa18fbd8d8dee3cd.webp)
关于字段标识,标准方法里一般都有写明,如下,找到GetShowText方法。
![image.webp](/download/0100f9cd6746e1f048e08f9bfe80a1eec44d.webp)
3)编译代码注册插件到多账簿日报表(横向)
![image.webp](/download/010099b5afb9f1af432cb8dad8f19c71a353.webp)
4)最终效果
客户端展示效果,相同过滤条件
多账簿日报表(横向)
![image.webp](/download/010009299c93a2854c9e9e2641bc6331e2bb.webp)
多账簿日报表
![image.webp](/download/01001fccccc5d21c4b778611d7dad9997ef4.webp)
说明:
改横向展示报表是通过透视表实现的,其展示的行数据排序是根据行字段决定的,如果行数据与原报表展示不一致可通过调整该字段的先后顺序或增减字段来解决。
![image.webp](/download/010010088a570304449ca51708efa31688e9.webp)
## 四 总结
此种方法适用于星空各种简易账表的横向数据展示的改造,二开的难度低且查询效率与标准报表一直,可复用性高。
唯一的不足就是当系统标准的报表随着版本更新而改变了,二开的横向报表也要进行维护。
优秀再次学习到了
透视表应用: 简易账表改造成横向展示报表示例
# 简易账表改造成横向展示报表示例:多账簿日报表改多账簿日报表(横向)# 本篇文章反编译的方法可以用继承类的方式优化## 一 业务场景...
点击下载文档
本文2024-09-16 18:32:51发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-22861.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章