一、截取函数righr()函数,right函数语法:right(text,num_chars)其中text表示要截取的字符串num_chars表示截取的字符的数量
二、脚本定义文本里的字体格式:
var gf = new GFont("Arial", BOLD, 50);
var loc = new Locator([], OBJECT, DETAIL);
var col=new Color(java.awt.Color.RED)
文本1.setForeground(loc,col)
文本1.setFont(loc, gf)
三、脚本定义绑定字段的字体格式
var gf = new GFont("Arial", BOLD, 20);
var loc = new Locator(["product"], CELL, DETAIL); //product为绑定的字段名
表1.setFont(loc, gf);
四、报错error ,cannot call method split of null,是因为文本的值是空的 就会报这个错,脚本修改下加个判断条件if(a!=null),例如:
var a=文本参数1.value if(a!=null){ param['a']=a.split(",")}
五、隐藏标记脚本:图表1.hiddenTip=true
六、市场分布的比例值大于合计值的比例,则红色高亮
1、新建一个文本,绑定要用的数列
2. 报表空白处右键脚本:
getViewData("文本1") param['a']=文本1.data
点击表格设置高亮,用过滤器将要用绑定的列设置为大于a。七、参数值 参数名 用法例如:param['week']=param['_THIS_YEAR_WEEK_']
blank string _BLANK_
last year _LAST_YEAR_
this year _THIS_YEAR_
next year _NEXT_YEAR_
last quarter _LAST_QUARTER_
this quarter _THIS_QUARTER_
next quarter _NEXT_QUARTER_
last month _LAST_MONTH_
this month _THIS_MONTH_
next month _NEXT_MONTH_
last week _LAST_WEEK_
this week _THIS_WEEK_
next week _NEXT_WEEK_
last day _LAST_DAY_
this day _THIS_DAY_
next day _NEXT_DAY_
last quarter group _LAST_YEAR_QUARTER_
this quarter group _THIS_YEAR_QUARTER_
next quarter group _NEXT_YEAR_QUARTER_
last month group _LAST_YEAR_MONTH_
this month group _THIS_YEAR_MONTH_
next month group _NEXT_YEAR_MONTH_
last week group _LAST_YEAR_WEEK_
this week group _THIS_YEAR_WEEK_
next week group _NEXT_YEAR_WEEK_
last day group _LAST_FULL_DAY_
this day group _THIS_FULL_DAY_
next day group _NEXT_FULL_DAY_
last day of week _LAST_WEEKDAY_
this day of week _THIS_WEEKDAY_
next day of week _NEXT_WEEKDAY_
current locale _CURRENT_LOCALE_
八、细节表达式dateGap(col['DATE'],now(),"year");现在日期和所需要的列日期相差年数,year可以改成month代表相差月数
九、细节表达式param['_THIS_YEAR_']-col['年']可以用这个建细节表达式,这个param['_THIS_YEAR_']表示当前的年份,col['年']这个代表您那个出生年份,但是您的字段是时间戳,得变成年份才可以
十、substring(col['DATE'],0,4)截取日期
十一、参数参与sql过滤的sql语句
例一:
select * from COFFEE_CHAIN where 1=1 <Sales> and SALES between ?{Sales} </Sales>
<Sales1>and ?{Sales1} </Sales1>
<Product_Type1> and PRODUCT_TYPE=?{Product_Type1} </Product_Type1>
例二:
select a.customerlotno,a.customertypename, TRIM(a.productionorderno) DD,
max(a.actiondate) as DT,sum(case when actionid=6 then 1 else 0 end) as ZQ,
sum(case when actionid=1 then 1 else 0 end) as WQ
from finishedproductlog a
where 1=1
<a> and a.actiondate between ?{a} </a>
<b> and ?{b} </b> and
a.actionid != 3 and a.actionid !=15
and (a.productionorderno like 'AC0%' OR a.productionorderno LIKE 'AC1%' OR a.productionorderno LIKE 'AC4%')
AND a.actiondate >=TRUNC(SYSDATE)-90
group by a.productionorderno,a.customerlotno,a.customertypename
例三:
select * from COFFEE_CHAIN <Product_Type> where PRODUCT_TYPE=?{Product_Type} </Product_Type>
例四:
select * from COFFEE_CHAIN where 1=1
<Sales> and SALES between ?{Sales} </Sales>
<Sales1> and ?{Sales1} </Sales1>
<Product_Type1> and PRODUCT_TYPE=?{Product_Type1} </Product_Type1>
十三、
不允许下拉参数自由选择:
if(下拉参数1.getSelectedObjects()[0]=='1'){
下拉参数2.setSelectedObjects(['3'],STRING);
}else if(下拉参数1.getSelectedObjects()[0]=='2'){
下拉参数2.setSelectedObjects(['4'],STRING);
}
允许第二个下拉参数自由选择:
var a; //设置一个变量,若是脚本不等于这个变量就按下边的两个if else执行
if(下拉参数1.getSelectedObjects()[0]!=a){
if(下拉参数1.getSelectedObjects()[0]=='1'){
下拉参数2.setSelectedObjects(['3'],STRING);
a=下拉参数1.getSelectedObjects()[0]; 脚本等于这个变量了,中间的两个if else 无效,2个下拉参数自由选择。
}else if(下拉参数1.getSelectedObjects()[0]=='2'){
下拉参数2.setSelectedObjects(['4'],STRING);
a=下拉参数1.getSelectedObjects()[0];
}}
十四、参数组件、过滤组件默认全选: 装载时运行: var a=getData('列表过滤1');//列表过滤1是列表过滤的名字,getData()可以获取列表过滤中绑定的值,以grid的形式返回。 var Vsize=a.size();//获取grid的行数 var arr1=new Array(); for(i=Vsize-1;i>0;i--){ arr1[i]=a.get(i,0); } getViewData("列表过滤1"); 列表过滤1.setSelectedObjects(arr1, STRING); 如果设置脚本后,组件右键清空、反选不可用,需要额外添加一句脚本: 列表参数1.pageSelection = false;//需要设置pageSelection为false,运行一次后可将该句脚本可删除,如果不删除建议放到脚本第一行
十五、文本脚本
Var y1=year(now());
Var m1=month(now());
Var d1=dayr(now());
文本1.data=’截止’+y1+’年’+m1+’月’+d1+’日,在网上任务数总计’+在网.data+’项,所选季度新增’+新增.Data+’项。’;
getViewData(“新增”)//新增和在网都是组件名,获取实时数据
十六、parseDate和formatDate的区别,引申的还有dateAdd和dateGap的用法,datePart返回日期指定的field的值,例如返回的日期是一年的第几天。日期时间是个大类包括时间、日期、时间戳。同比环比必须用时间戳来实现看连接
https://www.yonghongtech.com/webbbs/forum.php?mod=viewthread&fid=44&tid=1914&highlight=%E8%84%9A%E6%9C%AC
看截图
十七、更换y轴字段通过刷新组件。
var a = toString(图表1.binding.getYCol(0));//转换成字符串
var col1 = new ChartDimCol(new BCol("MARKET",STRING,false));
if(a.indexOf('Sum_SALES')==-1){ //使用indexOf的用法获取字符串中第一个出现的字段,-1代表没出现。
var col = ChartMeasureCol(SUM,new BCol("SALES",DOUBLE,false),null);
图表1.binding.clearYCols();
图表1.binding.addYCol(col);
}else {
var col = ChartMeasureCol(SUM,new BCol("PROFIT",DOUBLE,false),null);
图表1.binding.clearYCols();
图表1.binding.addYCol(col);
}
表格一列的设置超链接刷新,没刷新一次还换一行,其他组件都跟着变var c = getData('图表1').get(1,0);//获取现在柱状图绑定的
var b=getData('表1');//获取表1绑定的数据
for(var i=0;i<b.size();i++){
if(c==b.get(i,0)){
if(i==b.size()-1){//当前图表1上的数据是表1的最后一个时
param['a']=b.get(1,0);//让图表1绑定表1的第一个数据
}else{
param['a']=b.get(i+1,0);//让图表1绑定表1的后一个数据
}
}
}
十九、使用单元格尺寸隐藏表格某列回复方法
1、普通表
var loc = new Locator(["省份"], COL, DETAIL);
表1.setColWidth(loc,200);//200为像素
2、自由表
var loc = new Locator(['c-i'],COL,DETAIL);// 第一列 i 取 0,第 二列为 1,依次类推
自由式表格1.setColWidth(loc,200);
3、交叉表
var loc=new Locator(["市场分布","Sum_总成本"],COL,DETAIL) //市场分布为列表头字段
交叉表1.setColWidth(loc,20);
二十、文本拼接带有数据的,如何保留位数和单位
getViewData("文本10")
文本15.data='今日:'+(文本10.data/100000000).toFixed(2)+'亿'
保留2位小数,单位为亿
文本2.data = "hahaha"+formatNumber(getViewData("文本1"),"#,##0.##%");带百分号
二十一、将自由表的列循环表示
var a=getViewData("自由式表格1") //获取自有表格1数据
var b=a.size() //定义行数变量
var d = 0;
for(k=4;k<25;k=k+4){ //循环列数,每隔四列会出现审核效果这列
var c=new Array() //创建数组
for(i=0;i<b;i++){ //循环行数
c[i-2]=a.get(i,k) //生成数组,c[i-2]代表从第三行开始生成数组,因为前两行是表头
}
for(var j = 0;j<c.length;j++){ //数组循环相加
d = d+c[j];
}
}
if(d==0){ //如果相加等于0则正常否则异常
文本2.data="环节审核正常"
}else{
文本2.data="环节审核不正常"
}
//debug("d="+d)
效果图:
二十二、1.丢弃小数部分,保留整数部分
parseInt(5/2)
2.向上取整,有小数就整数部分加1
Math.ceil(5/2)
3,四舍五入.
Math.round(5/2)
4,向下取整
Math.floor(5/2)
二十三、提交组件背景颜色和字体颜色
var color=new Color(0xDD7D47);//橙色 var color1=new Color(0xFFFFFF);//白色 var color2=new Color(0x000000);//黑色 var loc=new Locator([],OBJECT,DETAIL); 提交1.setBackground(loc, color); 提交1.setForeground(loc, color1);
二十四、判断列表参数是否全选:
if(列表参数1.getObjects().length==列表参数1.getSelectedObjects().length){
全选
}else{
不全选
}//length==0可以判断为不选
判断列表过滤是否全选
if((getData('列表过滤1').size()-1) == 列表过滤1.getSelectedObjects().length){ debug('1111111') }//-1是去掉标题头
二十五、下拉参数设置日期默认值
var a = now()
//debug(a)
var b=formatDate(a,'yyyyMM')
//debug(b)
getViewData("下拉参数1")
下拉参数1.setSelectedObjects([b],STRING)
二十六、脚本执行顺序问题可以使用cleardata("biao")