帆软报表开发常用公式_20200909

本文分享了帆软报表开发中的实用公式与JS技巧,包括参数处理、数据集引用、填报刷新、公式计算、决策平台跳转及开发注意事项,助力报表开发效率提升。

帆软报表开发常用公式



前言

记录常用公式与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.以表格为单位纵向拓展的填报表涉及到复杂的主子表关系时,多表查看与多表填报功能不能并存(插入行锁定不了拓展后表格位置,会默认添加在最后的表格中)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值