-
fenglan 初学数据Lv2
发表于2023-10-16 15:47
楼主
本帖最后由 fenglan 于 2023-10-16 15:51 编辑
报表使用折叠式钻取,希望通过点击全部展开折叠
实现步骤如下:
1.添加一个文本,配置万能式钻取
万能式脚本:var bbq = g_rptpage.calcInfo.calcparams.elements["@bbq"];
javascript:_z('<#=srcrpt.id#>','drillpath=;hiddencalcparams=false;@expand=true;@bbq='+bbq)
2.添加客户端计算前脚本
客户端计算前脚本:
//机构的维表元
def jgCellName="A3";
//机构维的级次
def dimMaxLevel=2;
//缩进距离
def indent = 15;
def jgRow = 0;
def jgCol = 0;
//设置浮动范围
def setFloatRange(rc,left,top,right,bottom){
rc.setTop(top);
rc.setLeft(left);
rc.setRight(right);
rc.setBottom(bottom);
}
//展开所有级次
def expandAll(jgCellName,dimMaxLevel,indent){
jgCell = rpt.getCell(jgCellName);
jgRow = jgCell.getRow();
jgCol = jgCell.getCol();
//注意此脚本只适合机构表元在第一个分析区的情况
//浮动分析区的范围
fxqRect = rpt.getFxq(0).getRange();
//添加行数
rpt.insertRow(jgRow+1,dimMaxLevel);
//设置行的显示条件
setRowVisible(jgCellName,jgRow,dimMaxLevel);
if (fxqRect.getBottom()==jgRow+1){
//需要调整分析范围
fxqRect.setBottom(fxqRect.getBottom()+dimMaxLevel);
}
for(r in 0..<dimMaxLevel){
row = r +jgRow+1;
for(c in 0..<rpt.getColCount()){
precl = rpt.getCell(jgRow,c);
cl = rpt.getCell(row,c);
cl.copyAll(precl);
cl.adjustCellExp(true,true,jgRow-1,r+1);
if (precl.isDimCell()){
cl.copyToDimCell(precl);
//设置浮动范围
rc = precl.getFloatRange();
setFloatRange(cl.getFloatRange(),rc.getLeft(),row,rc.getRight(),dimMaxLevel+jgRow+1);
cl.setProperty('indent',indent*(r+1)+'');
cl.setProperty('url','');
cl.setFloatSumLevel(r+1);
//把源行的浮动表元范围设置下
if (r==0){
precl.getFloatRange().setBottom(dimMaxLevel+jgRow+1);
precl.setFloatSumLevel(0);
precl.setProperty('url','');
}
}
}
}
}
//行的显示条件保持一致
def setRowVisible(jgCellName,jgRow,dimMaxLevel){
rb = rpt.getRb();
visibleStr = rb.getRowInfo(jgRow).getVisibleStr();
if(visibleStr != ""){
addStartRow = jgRow+1;
for(r in addStartRow..<(addStartRow + dimMaxLevel)){
str = visibleStr.replaceAll(jgCellName, jgCellName.substring(0,1) + String.valueOf(r+1));
//System.out.println("rowvisible:" +r + str);
rb.setRowVisible(r, str);
}
}
}
if("true".equals(params.getValue("@expand"))){
expandAll(jgCellName,dimMaxLevel,indent);
}
3.报表样例:
折叠式一键式展开.zip
(5.22 KB, 下载次数: )
报表使用折叠式钻取,希望通过点击全部展开折叠
实现步骤如下:
1.添加一个文本,配置万能式钻取
万能式脚本:var bbq = g_rptpage.calcInfo.calcparams.elements["@bbq"];
javascript:_z('<#=srcrpt.id#>','drillpath=;hiddencalcparams=false;@expand=true;@bbq='+bbq)
2.添加客户端计算前脚本
客户端计算前脚本:
//机构的维表元
def jgCellName="A3";
//机构维的级次
def dimMaxLevel=2;
//缩进距离
def indent = 15;
def jgRow = 0;
def jgCol = 0;
//设置浮动范围
def setFloatRange(rc,left,top,right,bottom){
rc.setTop(top);
rc.setLeft(left);
rc.setRight(right);
rc.setBottom(bottom);
}
//展开所有级次
def expandAll(jgCellName,dimMaxLevel,indent){
jgCell = rpt.getCell(jgCellName);
jgRow = jgCell.getRow();
jgCol = jgCell.getCol();
//注意此脚本只适合机构表元在第一个分析区的情况
//浮动分析区的范围
fxqRect = rpt.getFxq(0).getRange();
//添加行数
rpt.insertRow(jgRow+1,dimMaxLevel);
//设置行的显示条件
setRowVisible(jgCellName,jgRow,dimMaxLevel);
if (fxqRect.getBottom()==jgRow+1){
//需要调整分析范围
fxqRect.setBottom(fxqRect.getBottom()+dimMaxLevel);
}
for(r in 0..<dimMaxLevel){
row = r +jgRow+1;
for(c in 0..<rpt.getColCount()){
precl = rpt.getCell(jgRow,c);
cl = rpt.getCell(row,c);
cl.copyAll(precl);
cl.adjustCellExp(true,true,jgRow-1,r+1);
if (precl.isDimCell()){
cl.copyToDimCell(precl);
//设置浮动范围
rc = precl.getFloatRange();
setFloatRange(cl.getFloatRange(),rc.getLeft(),row,rc.getRight(),dimMaxLevel+jgRow+1);
cl.setProperty('indent',indent*(r+1)+'');
cl.setProperty('url','');
cl.setFloatSumLevel(r+1);
//把源行的浮动表元范围设置下
if (r==0){
precl.getFloatRange().setBottom(dimMaxLevel+jgRow+1);
precl.setFloatSumLevel(0);
precl.setProperty('url','');
}
}
}
}
}
//行的显示条件保持一致
def setRowVisible(jgCellName,jgRow,dimMaxLevel){
rb = rpt.getRb();
visibleStr = rb.getRowInfo(jgRow).getVisibleStr();
if(visibleStr != ""){
addStartRow = jgRow+1;
for(r in addStartRow..<(addStartRow + dimMaxLevel)){
str = visibleStr.replaceAll(jgCellName, jgCellName.substring(0,1) + String.valueOf(r+1));
//System.out.println("rowvisible:" +r + str);
rb.setRowVisible(r, str);
}
}
}
if("true".equals(params.getValue("@expand"))){
expandAll(jgCellName,dimMaxLevel,indent);
}
3.报表样例:
1个回答
解决了https://bbs.esensoft.com/thread-132454-1-1.html该帖子里面的脚本出现的以下2个问题:
1.维表层级不齐,例如有的有的3级,有的4级,没有4级的会显示空行的问题;
2.在计算结果页面重新选择参数,在点一键式展开,参数不生效的问题。