
# 简易账表改造成横向展示报表示例:多账簿日报表改多账簿日报表(横向)
# 本篇文章反编译的方法可以用继承类的方式优化
## 一 业务场景
星空标准报表,很多是竖向展示的,如多账簿现金流量表的数据展示是按不同的账簿竖向展示,如下图

现客户需要对比不同账簿的现金流项目金额,需要将表按账簿做成横向展示的,如下图

## 二 解决方法
将原来的多账簿现金流量表改造成透视表,透视表可以对行、列以及数据展示字段进行设置。
解决思路主要来源于以下文章,在此感谢原作者。
[57.2、报表插件,透视表](https://wenku.my7c.com/article/71378182103646976?productLineId=1)
## 三 实现步骤
前面展示的多现金流量表的横向展示改造是之前开发好的,为了能更好展示开发的细节,在这我重新改造一张标准报表,将多账簿日报表 改为 按账簿横向展示。
新建一张透视表,取数逻辑和过滤界面还是使用原多账簿日报表的,简单改造部分代码便可实现。
### 1.创建透视表
BOS平台搜索“多账簿日报表”

引入业务对象后,可以在简单账表分类看到多账簿日报表,在透视表节点右键新增,选择空白对象。

如下图,编号PKSQ_MultiDailyReport_H是自定义的,开发商标识加多账簿日报表标识加_H。

确定后保存,透视表这里就出现了新增的。

具体可参考官方贴:[透视表简单示例教程](https://wenku.my7c.com/article/10134?productLineId=1&isKnowledge=2)
### 2.使用多账簿现金流量表的过滤框
找到过滤条件框,右键新增

这里选择复制,找到原报表的过滤框,输入自定义名称和编号,确定,保存。这里编号是:PKSQ_MultiDailyReport_H_Filter

创建好后,将过滤框唯一标识,也就是创建时输入的编号:PKSQ_MultiDailyReport_H_Filter复制到多账簿日报(横向)的过滤窗口业务对象(报表),保存。


此时,过滤框和报表就绑定好了,接下来可以发布到主控制台验证一下,最好是和原来的报表发布在同一个位置。具体可参考以下帖子
[57.1、报表插件,透视表,界面](https://wenku.my7c.com/article/71357429627448320?productLineId=1)
效果如下,但是这里没有配置取数逻辑,关闭的时候会报错,所以接下来需要编写报表服务插件。

### 3.使用多账簿日报表的取数逻辑
1)找到多账簿日报表的服务器插件的dll组件

插件: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搜索,如下图


2)反编译dll
反编译dll需要使用到这个
这个工具就是附件ILSpy_binaries_4.0.1.4530.zip,压缩包解压后

双击运行ILSpy.exe

将Kingdee.K3.FIN.GL.App.Report.dll拖动到反编译工具

找到多账簿日报表取数插件

3)项目中新增类
Ctrl+A复制所有代码,在项目中添加新类,更改描述和类名,原类名后面加_H。

引用报错添加对应的dll组件

添加完需要的dll组件后,引用不报错了

### 4.改造部分代码
1)初始化,找到初始化方法Initialize,新增如下代码

```
//初始化
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)设置行字段、列字段和数据展示字段
这里借用上面的图说明:

找到方法BuilderReportSqlAndTempTable,加上以下代码

```
//修改临时表
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.Selecte