• 帆软报表常用功能


    一、常用链接地址

    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.检验所有控件条件必须输入一个

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

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

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

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

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

    4.正则校验输入值

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

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

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

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

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

    7.复选框批量打印

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

    8.JS中执行SQL语句

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

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

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

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

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

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

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

    12.自定义函数执行存储过程

     1 /*
     2 1.uuid函数用于生成UUID;
     3 2.函数ExcProc配置位置:WebReportWEB-INFclassescomfrfunction
     4            源文件位置:见链接
     5            参数说明:入参形式只有String、Int型,出参有几个就写几个'OutParameter','VARCHAR'
     6 3.该JS是调用存储过程后台执行,判断是否执行成功
     7 */
     8 function uuid() {
     9     var s = [];
    10     var hexDigits = "0123456789abcdef";
    11     for (var i = 0; i < 36; i++) {
    12         s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    13     }
    14     s[14] = "4";  // bits 12-15 of the time_hi_and_version field to 0010
    15     s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
    16     s[8] = s[13] = s[18] = s[23] = "-";
    17     var uuid = s.join("");
    18     return uuid;
    19 }
    20 var i_uid = uuid();
    21 var Widget1 = this.options.form.getWidgetByName("button0");
    22 Widget1.setEnable(true);
    23 var val = "ExcProc('RGRP','{call RGRP.prc_gj_chk_002(?,?,?,?,?,?)}','String','"+i_datadate+"','String','"+i_uid+"','Int','"+i_clearbad_num+"','Int','"+i_abs_num+"','Int','"+i_redrush_num+"','OutParameter','VARCHAR')";
    24 var a = FR.remoteEvaluate(val);
    25 var flag = a[0];
    26 if(flag == "SUCCESS"){
    27  _g().parameterCommit();
    28   var iframe = $("<iframe id='inp' name='inp' width='100%' height='100%' scrolling='yes' frameborder='0'>"); // 对话框内 iframe 参数的命名,默认宽高占比是 100%,可向下滚动 
    29 var url = '${servletURL}?reportlet=VehicleRpt/VehicleRptMonitor/gj_chk_result002.cpt&op=write&__cutpage__=v&baldate=' +querydate+'&uid='+i_uid;
    30 var title = '校验信息';
    31 iframe.attr("src", url); // 给 iframe 添加 src 属性
    32 var o = {  
    33 width : 1000,  //对话框宽度
    34 height: 550  //对话框高度
    35 }; 
    36 FR.showDialog(title,o.width, o.height, iframe,o);//弹出对话框
    37 
    38 }else{
    39  alert("校验失败,请检查!");
    40  return false;
    41 };

    三、常用公式整理

     1 //[日期和时间函数](https://help.finereport.com/doc-view-819.html)
     2 1.DATEINMONTH(today(),1) //获取当月第一天日期
     3 2.DATEINMONTH(today(),-1) //获取当月最后一天日期
     4 3.DATEINMONTH(today()-day(today()),1)//获取上月第一天日期
     5 4.DATEINMONTH(today()-day(today()),-1)//获取上月最后一天日期
     6 5.today()-day(today())//表示当前日期减去当前月已发生的天数,结果是上月最后日期
     7 6.DAYSOFMONTH(today())//获取当月天数
     8 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,"","")
     9 //在ds1.select(ACCOUNT_POST_TYPE)的结果中查找"实际实际控制人",找到显示■,否则显示□;ds1.select(ACCOUNT_POST_TYPE)的结果可以是“实际控制人”,可以是“实际控制人;正式员工;中国人” 等字符串
    10 8.TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",99)),99)) //截取最后一个空格后边的字符串
    11 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)
  • 相关阅读:
    引用&符号详解
    简单计算器
    while循环输出的表格
    设置和获取变量类型
    位运算符
    MySQL基础(一)SQL基础
    python 21天网络爬虫使用 代理
    Spark入门(一)
    Apache spark2.1.0编译hadoop-2.6-cdh5.11.2的对应版本
    Java 多线程
  • 原文地址:https://www.cnblogs.com/lgx5/p/13909482.html
Copyright © 2020-2023  润新知