报表填报时,如何实现多个单元格绑定一个字段?

场景描述

如下图所示报表,科目名称栏目里面的数据不是从数据库中拖曳扩展得来的,而是直接在单元格中输入,需要将每个科目的期初余额和期末余额填报入库,数据库中有科目ID、会计科目、期初余额和期末余额几个字段,在填报时,将每一行数据都填入到一张数据表中,本来要想将所有科目都填报入库,则需要添加多个内置SQL,会非常影响填报效率,今天我来告诉大家可以在一个内置SQL中为单个数据表字段绑定多个单元格,即单元格组。

实现思路

在报表填报属性中为某个字段绑定单元格组,如下图,数据表中的会计科目和科目代码字段在一个内置SQL中分别绑定了一个单元格组,那么在执行填报功能的时候,报表开发工具FineReport后台会自动将单元格组根据位置拆分为多条内置SQL。

如上填报属性绑定单元格示例,在执行填报过程的时候,就会拆分为以下4个内置SQL分别执行:

[uuid(),A2,B2]、[uuid(),A3,B3]、[uuid,A4,B4]、[uuid(),A5,B5]

注:拆分内置SQL时是根据位置拆分,并且当单元格和单元格组并存的时候,单元格的值重复根据单元格组内单元格个数进行复制。

和分别定义4个内置sql一致,4个uuid的结果是不一样的,并且其中一个失败,其他两个都会回滚,保持事务的一致性

注:绑定单元格组是先拆分为多个内置sql入库规则,然后再形成SQL语句提交入库,而不是直接形成sql,因为单元格的值可能也是数组。

示例

以描述中的模板样式为例,我们在web端录入几个会计科目的期初余额和期末余额,然后通过单个内置SQL将数据填报入库。

1、 模板样式设计

按照上图所示样式设计报表,期初余额和期末余额控件类型均设置为文本控件。

2、报表填报属性设置

点击模板>报表填报属性,点击添加按钮,添加一个内置SQL,为数据字段绑定单元格组,如下图:

注:单元格组手动编辑的时候,单元格间的分隔符支持英文的逗号、分号和空格。

另:如果单元格组内单元格个数超过5个,将不再显示所有单元格,而是直接显示“已经选择X个单元格”,如下图:

注:绑定多个单元格时,不能使用公式,因为单元格数组是先拆分为多个内置SQL,然后再形成入库sql语句,而公式数组则是直接形成入库sql语句,不会拆分为内置sql。

3、校验

如果列的值设置为单元格组,则需要保证设置的各单元格组个数相等,这样才能够一一匹配起来,不允许如一个列是3个单元格,一个列是4个单元格,在智能添加单元格组对话框时点击确定或者在填报属性界面修改之后点击确定会弹出警告框,如下图:

4、效果查看

点击填报预览,在前面4个科目输入对应的期初余额和期末余额,如下图:

注:由于在设置填报属性的时候,单元格数组只绑定了前面4行的数据,故我们这里只对前面4行操作。

点击提交按钮,将数据入库,点开日志面板,可以看到如下图所示日志信息,从日志中我们可以看出内置sql绑定的单元格数组的确是被拆分为多个内置sql之后,在形成sql语句执行提交操作:

然后再新建通过数据集查看科目余额表数据表中的数据,如下图,可以看到更改的4个科目数据发生了变化:

具体的模板设置可参考:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Form\TypicalApp\CellsArrayForm.cpt。

时间: 2024-10-14 18:56:10

报表填报时,如何实现多个单元格绑定一个字段?的相关文章

给所有的td单元格绑定一个click事件

$(document).ready(function() { //给所有的td单元格绑定一个click事件 //如果这个table的id为table1,那单给table1的所有td加click事件代码为: // var tds = $("#table1").find("td"); var tds = $("td"); tds.click(tdclick); }); function tdclick() { //var td = $(this);

NPOI 生成Excel (单元格合并、设置单元格样式:字段,颜色、设置单元格为下拉框并限制输入值、设置单元格只能输入数字等)

NPIO源码地址:https://github.com/tonyqus/npoi NPIO使用参考:源码中的 NPOITest项目 下面代码包括: 1.包含多个Sheet的Excel 2.单元格合并 3.设置单元格样式:字段,颜色 4.设置单元格为下拉框并限制输入值 5.设置单元格只能输入数字 // // GET: /Excel/ public ActionResult Write() { var workbook = new HSSFWorkbook();//从流内容创建Workbook对象

poi导出Excel报表多表头双层表头、合并单元格

效果图: controller层方法: /**     *      * 导出Excel报表     * @param request     * @return     *      */    @RequestMapping("/export")    @ResponseBody    public void export(HttpServletRequest request,            HttpServletResponse response, String year

Dev控件GridView单元格绑定控件

//文本按钮 RepositoryItemButtonEdit btnFields = new RepositoryItemButtonEdit();//创建控件 btnFields.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(btnField_ButtonClick);//事件绑定 gridView1.Columns["Fields"].ColumnEdit = btnFie

利用jxl读取excel合并的单元格的一个小例子

工作中我们可能要把Excel文件的记录保存到数据库, 今天我用jxl读取Excel文件时遇到了合并格的问题,记录如下: 如Excel文件如下: 读取出来的记录为: 由上图可以看出,合并的单元格只有第一次输出了,这样的话,在保存数据 到数据库时就会有数据遗漏,所以做了一定的改造,代码如下: package temp; import java.io.File; import java.io.IOException; import jxl.Range; import jxl.Sheet; import

C# FlexGrid的单元格绑定下拉列表

设定单元格的Style,对Style的DataMap 属性绑定ListDictionary ListDictionary dtBumonMap = getListDictionary(ds.Tables[0]); cmbBumonStyle.DataMap = dtBumonMap; 原文地址:https://www.cnblogs.com/-jwj/p/11686798.html

gridView 单元格绑定不同控件方法

1.主要代码: private void Form3_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("HZ"); dt.Columns.Add("PY",typeof(object)); dt.Rows.Add(1,1); dt.Rows.Add(2,2); gridControl1.DataSource = dt; } private void g

报表也可以根据单元格计算后结果进行排序

熟悉报表的人都知道,报表中实现数据排序通常有三种方法: 1. 在 sql 语句中增加 order by,如 order by id asc 2. select 函数取数时,指定排序字段,如 ds1.select(name:-1),或者按照其他字段排序,如 ds1.select(EMPID, ,,;NAME:1) 按照 NAME 字段升序排序 3. 还可以按照某字段汇总后的结果进行排序,如:ds1.group(省份; 省份:1; ds1.sum( 工业产值):-1),对数据集 ds1 按照省份进行

如何通过报表单元格右键控制报表跳转到不同链接地址

需求说明: 润乾报表的单元格中支持超链接属性,用户可以通过设置该属性,实现在浏览器端用鼠标点击某个单元格跳转到指定页面,并且还能够传递所需要的参数,从而实现数据的钻取(详见<玩转报表超链接>).不过这种超链接的设置方式只能跳转到单一的指定页面,在一些特殊的业务要求中,用户可能需要基于一个单元格查看不同的明细信息.比如,用户在访问一个地区列表时,既想经由该页面查看某地区的销售收入情况,又想查看该地区的其他信息.这样,在原有方式下就需要增加多个超链接按钮,每个按钮设置不同的超链接,而这种做法不一定