#实践案例#关于星空财务报表平台导出批注解决方法原创
金蝶云社区-BobbyLIU
BobbyLIU
39人赞赏了该文章 504次浏览 未经作者许可,禁止转载编辑于2023年02月01日 18:19:54

一、业务背景

需求来自客户财务部汇报领导数据时产生,这个需求不是很大众化,但是对于系统功能的可扩展性是一个比较大的考验。

二、需求内容

客户想要在星空财务报表平台即:财务会计》报表》双击数据行》导出excel功能下实现导出内容添加个性化批注功能。并且批注内容来自不同的固定科目。


这个需求在我们系统是没有已经存在的功能进行配置,并且由于涉及到财务报表的开发,我们系统也是不支持二开财务报表。后面在经过多方确认和沟通,联系到总部那边反馈这个财务报表是集成的微软的office,是没法做扩展支持。

多方辗转研究,最后研究出一套替代方案。在客户同意的情况下得到实现。并且在以后的工作中客户在其他业务系统上多次请求添加此功能。


功能实现样式如下:

image.png

三、解决方案

1、实现方式描述:

1、在财务报表系统先用acct配置出批注计算的金额写入excel对应的单元格

2、客户通过财务报表系统导出对应的报表

3、我们这边开发一个excel转换插件,

4、客户将导出的excel,通过导入excel插件,转换成想要的批注形式下载下来


2、客户操作:

1、 客户先从财务报表系统导出需要的报表

2、 客户上传上面导出的报表到excel转换功能

3、 点击转换并下载按钮


实现的关键逻辑代码:

    /// <summary>

    /// 分析并设置每一行批注(利润表)

    /// </summary>

    /// <param name="sheet"></param>

    /// <param name="drawing"></param>

    /// <param name="maxCol">最大的列数</param>

    /// <param name="setCommentRow">需要设置批注行</param>

    /// <param name="staRow">起始行</param>

    /// <param name="endRow">结束行</param>

    public static void CalculationEveryRow(ISheet sheet, IDrawing drawing,int maxCol, int setCommentRow, int staRow, int endRow)

    {

        //循环原来的sheet行,给原来的sheet行赋值

        IRow commentNameRow = sheet.GetRow(2);//利润中心行

        IRow commentRow = sheet.GetRow(setCommentRow - 1);//获取需要赋值的行

        for(int r=0;r< commentNameRow.Cells.Count; r++)

        {

            ICell commentNameCell = commentNameRow.Cells[r];//具体利润中心

            if (commentNameCell != null)

            {

                string commentName = commentNameCell.ToString();//利润中心名称

                if (commentName.Contains("编制单位"))

                {

                    continue;

                }

                for (int t =2;t< commentRow.Cells.Count;t++)

                {

                    ICell everycell = sheet.GetRow(2).GetCell(t);

                    if (everycell != null)

                    {

                        if (commentName.Equals(everycell.ToString()))//定位到每个利润中心对应的列

                        {

                            ICell lineNoCell = commentRow.GetCell(1);

                            string lineNo = lineNoCell.ToString();//序号


                            //根据对应序号和利润中心查找对应的批注信息并赋值

                            IComment comment1 = CalculationAmount(sheet, commentRow.GetCell(t), drawing, commentName, Convert.ToInt32(lineNo),  0, staRow, endRow);

                            IComment comment2 = CalculationAmount(sheet, commentRow.GetCell(t + 1), drawing, commentName, Convert.ToInt32(lineNo), 1, staRow, endRow);

                            if (comment1 != null)

                            {

                                commentRow.GetCell(t).CellComment = comment1;// 设置批注行本期金额

                            }

                            if (comment2 != null)

                            {

                                commentRow.GetCell(t + 1).CellComment = comment2;// 设置批注行累计金额

                            }

                        }

                        t = t + 1;

                    }

                }

            }

        } 

    }

包含三张报表

1、 财务报表系统配置批注数据生成规则(这里有两条数据点无法配置)(此处用户可以配置,金蝶实施也可以配置)

2、 Excel 转换功能:

1、 导入功能Demo中已经完成基础部分,功能还需要细化

2、 下载功能Demo中已经完成基础部分,细化功能及数据处理还需要调整

3、 批注数据梳理写入

4、 两条无法配置的批注数据取数逻辑及数据导入

5、 重新定义表格样式功能(此处需要集成到金蝶云星空,需要测试重定义方式是否支持)


四、推广价值

客户对星空财务报表平台(集成微软office)功能扩展的一种新的解决方试,弥补因无法扩展星空财务扩展平台而项目流失。提升客户满意度。

赞 39