9.6 自动计算
方法
当报表中的一些单元格中的数据是通过自动计算其他一些单元格中录入的值得到时,可以通过定义自动计算属性来实现。
一般情况下,如果自动计算定义较简单,则可以通过点击自动计算属性右侧的按钮,通过单元格内的公式自动生成,当公式复杂无法生成时则可以手动输入。
‘自动计算’用于在Web页面上修改单元格后自动计算并修改该单元格影响的单元格,一般情况下,返回值为数值类型。如:有一张商品价格的报表,当某一个商品价格改变后,商品的总价会被自动更新成新值。
例:商品价格=商品单价商品数量商品折扣,则自动计算表达式定义如下:
{a1}*{b1}*{c1}
如果需要指定横向、纵向偏移量,则可以使用JSCell公式,如下:
{JSCell(‘a1’,null,’’)}*{JSCell(‘b1’,null,’’)}*{JSCell(‘c1’,null,’’)}
自动计算中不能直接填写报表公式,而应该使用填报表达式。
【注意】因为在Web页面中不会输出隐藏行、列,所以隐藏行、列中的数据不能参与自动计算。
效果
填报中自动计算功能,是在修改某一单元格值后,相关联的需要自动计算的单元格中的数据就会自动被修改,以符合自动计算表达式,如下图所示,修改折扣的值后,总价以及合计的值将自动发生变化:
自动计算也适用于不同布局间的数据计算,如上图中合计值发生改变后,另一布局中的总额值也自动发生改变,如下图所示:
使用js实现
在实际应用中,通常希望修改了单元格中的数据后,可通过事先约定好的规则,将相关联单元格中的数值自动修改填入,这就用到了填报报表中的自动计算功能,报表中默认内置了加减乘除四则运算的自动计算逻辑,但业务千变万化,内置的计算很难满足所有填报场景需求,这里介绍如何能够通过自定义js函数实现更复杂的自动计算业务逻辑。
编写js函数
首先是编写js函数,实现既定的自动计算业务逻辑。这里简单举例,产品总销售=单价*数量
function calcSales(unitprice,amount){
return unitprice*amount;
}
引用js函数
将编写的js函数在报表中引用,这里有两种方式:
一种是在报表定义中添加js函数,既在报表属性的js函数体属性中设置如下图
另一种是把js函数写在clientshow.jsp中,或者新建一个js文件,在clientshow.jsp中引用这个js文件。
在单元格的自动计算属性中,调用编写的js函数
这里需要注意的是,引用单元格要使用“{}”括起来,比如{e3}或者JSCell('e3')等