#实践案例# 简易账表行转列改造案例:多账簿日报表改多账簿日报表(横向)
# 一、业务场景
星空标准报表,很多是竖向展示的,如多账簿现金流量表的数据展示是按不同的账簿竖向展示,如下图
![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](/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)
## 四 总结
此种方法适用于星空简易账表行转列的改造,二开的难度低,且查询效率与标准报表一样高。
唯一的不足就是当系统标准的报表随着版本更新而改变了,二开的横向报表也要进行维护。
好厉害 !!!
#实践案例# 简易账表行转列改造案例:多账簿日报表改多账簿日报表(横向)
# 一、业务场景星空标准报表,很多是竖向展示的,如多账簿现金流量表的数据展示是按不同的账簿竖向展示,如下图![image.webp](/download/0...
点击下载文档
本文2024-09-16 18:32:48发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-22854.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章