[老]选中内容批量打印/导出

编辑
  • 文档创建者:caixiaolan
  • 浏览次数:3469次
  • 编辑次数:6次
  • 最近更新:jiangsr 于 2018-11-16
  • 1. 问题描述

    有些时候在进行批量导出或者批量打印时,只想实现对勾选选中的部分行进行打印,并且选中行的内容传递给新的模板,进行打印,不同行传递的模板不一样。那么该如何实现呢?


    2. 示例

    2.1 数据准备

    新建一个数据查询ds1:SELECT * FROM 订单 where 1=1 ${if(len(p1) == 0,"","and 订单ID in ('" + p1 + "')")} limit 10

    2.2 报表设计

    主报表设计


    C1、C2单元格设置为按钮控件,C1单元格的按钮名称为批量打印,C2单元格的按钮名称为批量导出。

    B4单元格设置为复选框控件。

    将ds1中的订单ID,货主名称,是否已付拖入到单元格C4、D4、E4中。

    参数界面设置:


    给下拉复选框控件绑定数据字典,类型设置为数据查询,实际值和显示值都是订单ID。

    将报表另存为test.cpt

    子报表设置


    将此子报表另存为test10001.cpt,用于接收test.cpt传过来的参数。


    将此子报表另存为test10002.cpt,用于接收test.cpt传过来的参数。

    2.3 添加批量打印JS事件

    右击C1单元格,点击控件设置,弹出控件设置对话框,添加点击事件,如下图所示:


    批量打印JS代码如下:

    var printurl="http://localhost:8075/WebReport/ReportServer";
    var names = [];    
    var paths = [];    
    var singlepaths = [];    
    var url = "ReportServer?reportlets=(";
    var $span = $('.fr-checkbox-checkon');  //获取选中的复选框  
    var $tds = $("td").has($span);     //定义选中复选框的单元格   
    var $trs = $("tr").has($tds);   
    var p=[]; 
    for(var i=0; i<$trs.length;i++){   
    var name = $("td:eq(2)",$($trs[i])).html();  
    //获取选中的C4单元格的值  
    var a =  $("td:eq(3)",$($trs[i])).html();
    var b = $("td:eq(4)",$($trs[i])).html();    
    //names.push(name);     //将选中的值放到数组中 
    var cptpath ="test"+ name+".cpt"
    var urlstring = "{reportlet:" +"'"+FR.cjkEncode(cptpath)+"'"
                              +",p1:"+"'"+name+"'"
                              +",p2:"+"'"+a+"'"
                              +",p3:"+"'"+b+"'"
                              +
                             "}"; 
    debugger;
    paths.push(urlstring);      
    debugger;
    }  
    if(paths.length>0){var rpaths=paths.join(",");
     var reportlets="["+rpaths+"]"; 
     var config = {    
                    url : printurl,    
                    isPopUp : false,  
                    data : {    
                        reportlets:reportlets
                        
                    }    
            };    }  
            debugger;
     FR.doURLPDFPrint(config);

    2.4 添加批量导出JS事件

    右击C2单元格,点击控件设置,弹出控件设置对话框,添加点击事件,如下图所示:


    批量导出JS代码如下:

    var names = []; //盛放cpt名字和参数值的数组
    var as=[];//盛放参数值的数组
    var bs=[];//盛放参数值的数组
    var paths = [];    
    var singlepaths = [];    
    var url = "ReportServer?reportlets=(";
    var $span = $('.fr-checkbox-checkon');  //获取选中的复选框  
    var $tds = $("td").has($span);     //定义选中复选框的单元格   
    var $trs = $("tr").has($tds);    
    for(var i=0; i<$trs.length;i++){    
    var name = $("td:eq(2)",$($trs[i])).html();   //获取选中的C3单元格的值  
    //names.push(name);     //将选中的值放到数组中  
    var a = $("td:eq(3)",$($trs[i])).html();  
    console.log(a);
    //获取选中的D3单元格的值  
    //as.push(a);     //将选中的值放到数组中  
    var b = $("td:eq(4)",$($trs[i])).html();
    console.log(b);
    //获取选中的E3单元格的值  
    //bs.push(b);     //将选中的值放到数组中  
    var cptpath = "/test"+name+".cpt&p1="+name+"&p2="+a+"&p3="+b;   //获取选中的D3单元格的值 
    var urlstring = "{reportlet:" + FR.cjkEncode(cptpath) + "}"; 
    //paths.push(urlstring);        
    //singlepaths.push(FR.cjkEncode(cptpath));
    debugger;
    window.open("ReportServer?reportlet=" + FR.cjkEncode(cptpath+"&format=pdf"),"name" + i);
    //FR.Msg.toast(i);
    }    
    //alert(names + ";" + paths + ";" + singlepaths);    
    //url = url + paths + ")" + "&format=word&__filename__=Xname";
    //window.open(url);

    2.5 效果预览

    保存后,点击填报预览,即可对选中行的数据根据不同模板打印或导出。

    3. 移动端

    移动端不支持各种打印和导出方式

    附件列表


    主题: 设计思路
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]