分享

帆软报表常用功能

 阿白mvo3hep7cv 2020-03-25

一、常用链接地址

1.复选框获取选中的值
2.复选框全选
3.小写金额转换大写金额
4.点击单元格空白处可实现超级链接
5.两个日期控件校验日期在一定范围内
6.控件常用方法列表(隐藏/可见,可用/不可用)
7.动态打印
8.JS调用FR打印方法
9.JS实现自定义导出文件名称
10.控件实际值和显示值获取
11.单元格标识说明
12.特殊字符转码
13.excel导入自由报表
14.excel导入行式报表
15.填报预览JS实例
16.清空(重置)查询条件
17.判断多项字符串至少一项被包含
18.帆软开发者文档
19.帆软代码包地址
20.角标颜色设置注解
21.自定义阳历转阴历函数

二、常用代码整理

1.检验所有控件条件必须输入一个

var a=_g().parameterE1.getWidgetByName('a').getValue();var b=_g().parameterE1.getWidgetByName('b').getValue();if(a=='' && b==''){alert('至少输入一个查询条件!');return false;}//检验输入值开始必须小于结束if((b-a) >0 ){alert('开始值不可大于结束值!');return false;}//检验开始日期不可大于结束日期if(a>b){alert('开始日期不可大于结束日期!');return false;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.检验日期在某个输入范围内

//控件输入的日期格式为yyyyMMdd的不做日期校验,需转换成yyyy-MM-dd格式var start=this.options.form.getWidgetByName('startdate');var end=this.options.form.getWidgetByName('enddate');var a=start.substr(0,4);var b=start.substr(4,2);var c=start.substr(6,2);var start1=a+'-'+b+'-'+c;var d=end.substr(0,4);var e=end.substr(4,2);var f=end.substr(6,2);end1=d+'-'+e+'-'+f;var startdate1=new Date(start1);//将开始日期转化成Date型var enddate1=new Date(end1);//将结束日期转化成Date型var subdate=(enddate1-startdate1)/(1000*60*60*24);//将两个日期相减得到的毫秒数转化成天if(subdate>31){alert('结束日期必须在开始日期31天之内!');return false;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.自定义弹出框跳转其他模板

var iframe=$('<iframe id='inp' name='inp' width='100%' height='100%' scrolling='yes' frameborder='0'>');//对话框内iframe参数的命名,默认宽高占比是100% 可向下滚动var url='${servletURL}?reportlet=test.cpt&op=write&__cutpage__=v&no='+no+'&para='+para;//no,para为跳转时传递进来的参数var title='***';iframe.attr('src',url);//给iframe添加src属性var o = {width:1000,//对话框宽度height:550 //对话框高度};if(no != 0){FR.showDialog(title,o.width,o.height,iframe,o);//弹出对话框}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

4.正则校验输入值

var ch=this.getValue();var patrn=/^[0-9]*$/;//正则表达式只允许输入0-9的数字if(ch==''){	FR.Msg.alert(FR.i18n,Alert,'请输入值!');	return false;}if(!patrn.test(ch)){//做正则匹配	FR.Msg.alert(FR.i18n,Alert,'请输入正确值!');	return false;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5.日期控件管控日期输入范围(控件编辑后事件)

//写于日期开始控件var datebegin=this.options.form.getWidgetByName('datebegin').getValue();var dateend=this.options.form.getWidgetByName('dateend').getValue();var date=FR.remoteEvaluate('format(MONTHDALTA(format(''+dateend+'','yyyy-MM-dd'),-1),'yyyyMMdd')');var date2=FR.remoteEvaluate('format(today(),'yyyyMMdd')');if(datebegin<date && dateend != ''){ FR.Msg.alert('提示','日期差不得大于一个月'); return false;}//写于日期结束控件var datebegin=this.options.form.getWidgetByName('datebegin').getValue();var dateend=this.options.form.getWidgetByName('dateend').getValue();var date=FR.remoteEvaluate('format(MONTHDALTA(format(''+datebegin+'','yyyy-MM-dd'),1),'yyyyMMdd')');var date2=FR.remoteEvaluate('format(today(),'yyyyMMdd')');if(dateend<datebegin){ FR.Msg.alert('提示','结束日期不可小于开始日期'); this.options.form.getWidgetByName('datebegin').reset();}else if(dateend>date){ FR.Msg.alert('提示','日期差不得大于一个月'); this.options.form.getWidgetByName('dateend').reset();}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

6.起始日期编辑后结束日期增加若干天

//写于起始日期编辑结束事件var date=new Date(this.getValue());var date2=new Date();date2.setTime(date1.getTime()+(7*24*60*60*1000));//在date1的基础上加7天this.options.form.getWidgetByName('endtime').setValue(date2);//将添加后的日期赋值给结束日期控件
  • 1
  • 2
  • 3
  • 4
  • 5

7.复选框批量打印

//--**1.全选按钮状态改变事件var flag=this.getValue(); //获取当前复选框控件的状态,true /falsefor(var i=0;i<window.lineboxes.length;i++){ //循环遍历每个复选控件var cr=FR.cellStr2ColumnRow(window.lineboxes[i].options.location); //由每个控件位置获取行号列号_g().setCellValue(cr.col, cr.row, flag); //逐一赋值当前状态}//--**2.单选按钮初始化事件if (!window.lineboxes) { window.lineboxes = []; } lineboxes[lineboxes.length] = this;//状态改变事件//当前复选框未选择时,设置全选不选中 if(this.getValue()==false){ _g().setCellValue('D3',null,false); } else { var allChecked=true; //循环判断所有复选框都选中时,将全选复选框选中 for(var i=0;i<lineboxes.length;i++){ if(lineboxes[i].getValue()==false){ allChecked=false; } } //如果全选中时,自动让A1全选复选框选中 _g().setCellValue('D3',null,allChecked); //D3为全选按钮所在位置} //--**3.打印按钮点击事件var currno=_g().parameterEl.getWidgetByName('currno').getValue();var branch=_g().parameterEl.getWidgetByName('branch').getValue();var hand=_g().parameterEl.getWidgetByName('hand').getValue();var cells=[]; for(var i=0;i<window.lineboxes.length;i++){ if(window.lineboxes[i].getValue()==true){ var cr=FR.cellStr2ColumnRow(window.lineboxes[i].options.location); var co=cr.col; var ro=cr.row; var a='test.cpt'; //调用的打印模板 var itemno=contentPane.getCellValue(co+1, ro);//所取数所在列 var trdate=contentPane.getCellValue(co+6, ro); var f='{reportlet:''+a+'',itemnum:''+itemno+'',branch:''+branch+'',currno:''+currno+'',trdate:''+trdate+'',hand:''+hand+'',&__cutpage__=v}'; cells.push(f); //alert(cells); } } var printurl='${servletURL}';var k=cells.join(',');if(k.length==0){ alert('请勾选要打印的内容'); return false; }var reportlets='['+k+']'; var config = { url : printurl, isPopUp : false, data : { reportlets: reportlets } }; FR.doURLPDFPrint(config);//若不需打印,传数调用也可以(k中放入所需传递值的列表)var REPORT_URL='/WebReport/ReportServer?reportlet='+a+'&P_STATDATE='+P_STATDATE+'&op=write&__cutpage__=v&k='+k;window.open(FR.cjkEncode(REPORT_URL)); // /WebReport/ReportServer = ${servletURL}//调用模板数据集中接收k${if(len(k)=0,'and 1=0','and aa in(''+SUBSTITUTE(k,',','','')+'')')}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

8.JS中执行SQL语句

/*fanruan:对应使用的数据连接con:对应使用的参数loan_org:获得sql执行结果*/var sql = 'SQL(\'fanruan\',\'SELECT a from test where 1=1  and test.b=''+con+''\',1,1)'var loan_org = FR.remoteEvaluate(sql);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

9.单元格按钮控件获取单元格的值

var location = this.options.location; var cr = FR.cellStr2ColumnRow(location);//获取当前控件的位置var ro = cr.row; //行号(点击了的按钮所在的行号)var applyid = $('tr[tridx='+ro+']','div.content-container').children().eq(0).html();//第一列(A)ro 行对应的值var contractnum = $('tr[tridx='+ro+']','div.content-container').children().eq(1).html();//第二列(B)ro 行对应的值var cert_no = $('tr[tridx='+ro+']','div.content-container').children().eq(7).html();//第六列(H)ro 行对应的值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

10.按钮控件结合文本控件跳转新模板并回传选中值

/*main.cpt中文本控件中嵌入的按钮点击事件*/var branchs=_g().parameterEl.getWidgetByName('branch').getValue();var datebeg=_g().parameterEl.getWidgetByName('datebegin').getValue();var dateends=_g().parameterEl.getWidgetByName('dateend').getValue();var count=_g().parameterEl.getWidgetByName('count').getValue();var currnos=_g().parameterEl.getWidgetByName('currno').getValue();/*以上是事件中想要拿到的参数*/var $iframe = $('<iframe id='inp' name='inp' width='100%' height='100%' scrolling='no' frameborder='0'>'); // iframe参数的命名及宽高等$iframe.attr('src', '${servletURL}?reportlet=test.cpt&op=write&branch='+branchs+'&datebegin='+datebeg+'&dateend='+dateends+'&count='+count+'&currno='+currnos); //对话框中显示的子报表test.cptvar o = {title : '账号提示',width : 800,height: 700};//设置对话框宽高以及标题FR.showDialog(o.title, o.width, o.height, $iframe,o);/*test.cpt需要选中的单元格中写JavaScript脚本*/ //window.parent.location.reload(); //刷新url='${servletURL}?reportlet=main.cpt&op=write&__cutpage__=v'window.parent.location.replace(url+'&count='+count+'&branch='+branchs+'&datebegin='+datebeg+'&dateend='+dateends+'&currno='+currnos); //回传参数(参数为新模板获得的参数,参数名需要跟main.cpt中的控件名一致,可以回显)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

11.根据条件选用不同模板打印

/*打印按钮点击事件(复选框控件设置为A列)*/var g=[]; for(var i=0;i<window.lineboxes.length;i++){ //行循环 if(window.lineboxes[i].getValue()==true){ //当复选框勾上时要走的逻辑var cr=FR.cellStr2ColumnRow(window.lineboxes[i].options.location); var co=cr.col; var ro=cr.row; var a='test.cpt'; var a1='test1.cpt'; var a2='test2.cpt'; var a3='test3.cpt'; var d=contentPane.getCellValue(co+4,ro);//获取当前行第5列的值 var f=contentPane.getCellValue(co+5,ro);//获取当前行第6列的值 var loan_org=contentPane.getCellValue(co+6,ro);//获取当前行第7列的值 var tiexi=contentPane.getCellValue(co+7,ro);//获取当前行第8列的值 if(loan_org=='###') //判断条件 :不同条件使用不同的模板 { if(tiexi==0){var u='{reportlet:''+a2+'',ar:''+f+'',cnum:''+d+''}';} else var u='{reportlet:''+a3+'',ar:''+f+'',cnum:''+d+''}';} else if(f==0) {var u='{reportlet:''+a+'',cnum:''+d+''}';} else {var u='{reportlet:''+a1+'',ar:''+f+'',cnum:''+d+''}';} g.push(u);// alert(u); } } var printurl='${servletURL}';var rp=g.join(',');var reportlets='['+rp+']'; var config = { url : printurl, isPopUp : false, data : { reportlets: reportlets } }; FR.doURLPDFPrint(config);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

三、常用公式整理

//[日期和时间函数](https://help./doc-view-819.html)1.DATEINMONTH(today(),1) //获取当月第一天日期2.DATEINMONTH(today(),-1) //获取当月最后一天日期3.DATEINMONTH(today()-day(today()),1)//获取上月第一天日期4.DATEINMONTH(today()-day(today()),-1)//获取上月最后一天日期5.today()-day(today())//表示当前日期减去当前月已发生的天数,结果是上月最后日期6.DAYSOFMONTH(today())//获取当月天数7.if(LEN(GREPARRAY(SPLIT('实际控制人', ';'), INARRAY(item, IF(FIND(';', ds1.select(ACCOUNT_POST_TYPE)) > 0, SPLIT(ds1.select(ACCOUNT_POST_TYPE), ';'), ARRAY(ds1.select(ACCOUNT_POST_TYPE)))) > 0)) > 0,'  ■','  □')//在ds1.select(ACCOUNT_POST_TYPE)的结果中查找'实际实际控制人',找到显示■,否则显示□;ds1.select(ACCOUNT_POST_TYPE)的结果可以是“实际控制人”,可以是“实际控制人;正式员工;中国人” 等字符串8.TRIM(RIGHT(SUBSTITUTE(A1,' ',REPT(' ',99)),99)) //截取最后一个空格后边的字符串9.'截至日期:'+if(len(rdate)==0,format(DATEINMONTH(today()-day(today()),-1),'yyyy年MM月dd日'),format(DATEINMONTH(format(CONCATENATE(rdate,'01'),'yyyy-MM-dd'),-1),'yyyy年MM月dd日')) //日期控件rdate若未输入则使用上月最后一天日期,输入则换算输入月份最后日期(日期格式为yyyyMM)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多