帆软报表开发常用公式
前言
记录常用公式与js
提示:以下是本篇文章正文内容,下面案例可供参考
一、常用公式
--1.参数为空选择全部
${if(PRO_ID =="总体情况","","and FILL_PRO_COST_DETAILS.PRO_ID= ('" + PRO_ID + "')")}
--2.在公式编辑窗口调用sql
if($TREE_COST="总成本","总成本",SQL("LINKA","SELECT ACCLEV FROM FILL_DIM_ACCOUNT WHERE ACCCODE = '"+$TREE_COST+"'",1,1))
--3.利用存储过程在提交时同步表格内容
设置web属性为填报成功
contentPane.setCellValue(3,0,"已经填报成功")//填报成功给第四列第三行单元格赋值为“已经填报成功”
contentPane.setCellValue(3,0,"")//给第四列第三行单元格赋值为“”
IF(LEN(d1)==0,"",sql("ZJBI","exec dbo.PRO_COST_FOLLOW '"+year+"','"+PRO_NAME+"'",1))
//第四列第三行单元格为空则执行多参数的存储过程
--4.在报表页面计算年累计值
一个行列式表格在单元格拓展,本质上是一个行号为科目名称,列号为月份的数组。以下公式的含义是:当前单元格的取值为对 E6 单元格求和,其中筛选列号小于等于当前月份的、且行号与数组当前行号相等的元素。单元格实际情况见下图1.
sum(E6[!0;!0]{right(E4, 2) * 1 <= month(now()) && C6 = $C6})
--5.数据集中引用帆软公式的案例
表FILL_DIM_ACCOUNT中有列 ACCNAME ACCCODE ACCLEV,给${CANSHU}赋值 NAME CODE LEV 可以查出对应列。也就是不含引号的文本参数在数据集中可用于数据拼接,用于将 1-12 月份直接建表在数据库的极端情况。-_-
select
ACC${CANSHU}
from dbo.FILL_DIM_ACCOUNT
--6.cpt 文件填报刷新(继承参数)
contentPane.refreshAllSheets()
--7.富文本编辑公式的引用方式
${if(len(a3)==0,a5,a3)}

图1
二、相关JS
--1.1frm文件标签保留两位小数js
FR.contentFormat(this.value, '#.##%')--规范图表标签值为保留两位小数
--1.2frm文件标签引用单元格进行计算-瀑布图
function(){ return this.category+' '+FR.contentFormat(Math.round(this.value),'#,##0.00')+'万元 '+'占比 '+ FR.contentFormat(this.value / _g().getWidgetByName("background7").getCellValue("g15"), '#.##%');}
--2.cpt/frm文件在决策平台内跳转
window.parent.FS.tabPane.addItem({title:"项目合同信息填报",src:"${servletURL}?viewlet=DIM_BASE/Fill_Opt_Project_FinishedJob_Only.cpt&op=write&CONTRACT_NAME="+CONTRACT_NAME+"&pro_id="+pro_id});
//title表示新打开页面的标题
//js参数定义框引用报表参数,js代码框引用js参数定义框的参数,在“”外部通过 + 拼接
--3.用js写折叠 方法一:适用于多sheet场景的折叠
// 定义数组
var sheet = [2,3,4,5]
var i0 = ['Y','Z','AF','AG'];
var i1 = ['F','G','H','J','K','R','S','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AP','AQ','AY','AZ','BF','BG','BM','BN','BT','BU','CA','CB','CH','CI','CO','CP','CV','CW','DC','DD','DJ','DK','DQ','DR','DX','DY','EE','EF','EL','EM','ES','ET','EZ','FA','FH','FI','FO','FP','FT','FU','FZ','GA'];
var obj = $(".x-table tr");
var bl = obj.length;
alert(bl)
var ad = _g().getParameterContainer().getWidgetByName("line_fold_assist");
// 根据 line_fold_assist 的值选择数组
var iArray;
switch (ad.getValue()) {
case '0':
iArray = i0;
break;
case '1':
iArray = i1;
break;
default:
return;
}
for (var p = 0; p < iArray.length; p++) {
for (var j = 0; j < bl; j++) {
$("#" + iArray[p] + j +"-" +sheet +"-0").toggle();
//alert("#" + iArray[p] + j +"-" +value +"-0")
}
};
4.用js写折叠 方法二 适用于单sheet 的折叠
// 定义数组 i
var i0 = [6,7,8];
var i1 = [6,7,8,11,12];
var i2 = [6,7,8,11,12];
var i;
var ad = _g().getParameterContainer().getWidgetByName("line_fold_assist");
//获取参数面板的text对象
// 检查 line_fold_assist 是否等于 '1'
if (ad.getValue() == '0') {
alert('执行第一个循环分支');
// 使用 forEach 循环遍历数组 i
i2.forEach(function(index) {
_g().getColumn(index).setWidth(75);
});
i = i0
i.forEach(function(index) {
_g().getColumn(index).setWidth(0);
});
}
else if (ad.getValue() == '1') {
alert('执行第二个循环分支');
// 使用 forEach 循环遍历数组 i
i2.forEach(function(index) {
_g().getColumn(index).setWidth(75);
});
i = i1
i.forEach(function(index) {
_g().getColumn(index).setWidth(0);
});
}
else if(ad.getValue() == '2')
{
alert('执行第三个循环分支');
// 使用 forEach 循环遍历数组 i
i2.forEach(function(index) {
_g().getColumn(index).setWidth(75);
});
}
三、开发功能
3.1 点击标题排序
1.添加动态参数

2.设定排序属性
=if($a = 1,eval($asc),eval($asc) * -1)

四、其他注意事项
1.涉及到复杂拓展关系的填报表 报表填报属性对更新人、更新日期的设置要写成公式而不能引用单元格。可能导致最后一行删除失效(推测前端单元格的取值不会被送到报表填报属性做校验或主键校验)
2.SqlSever在帆软提交数据的应用中 主键自增不可用,uuid()。在提交时uuid列要在报表上存在并且设置新值(报表填报属性对应单元格不可为公式)
if(len($$$)=0,uuid(),$$$)
3.若不适用唯一主键(自增或uuid) 填报时维度列不可更改,否则会导致修改反而数据行增加。
4.隐藏行列使用条件属性
5.以表格为单位纵向拓展的填报表涉及到复杂的主子表关系时,多表查看与多表填报功能不能并存(插入行锁定不了拓展后表格位置,会默认添加在最后的表格中)
本文分享了帆软报表开发中的实用公式与JS技巧,包括参数处理、数据集引用、填报刷新、公式计算、决策平台跳转及开发注意事项,助力报表开发效率提升。
878

被折叠的 条评论
为什么被折叠?



