请上传宽度大于 1200px,高度大于 164px 的封面图片
    调整图片尺寸与位置
    滚轮可以放大缩小图片尺寸,按住图片拖动可调整位置,多余的会自动被裁剪掉
取消
用户a8068717(uid:438780)
职业资格认证:尚未取得认证
verify-sheet克隆xls导出
通过修改库文件已经实现了报表sheet克隆功能,不过修改库文件存在兼容性问题,通过对自定义校验类DefinedVerifyJob研究,也可以实现报表sheet克隆功能。 不过由于原始报表载入之后,新增的sheet无法展现,因此只能将其导出成xls文件。   关键步骤:   1、将自定义校验类"Verify_sheetClone.class"放入"\FineReport_8.0\WebReport\WEB-INF\classes\com\wz",需要新建wz目录   2、添加自定义校验类:填报属性->数据校验->自定义校验->选择类->添加属性,注意所有参数均为String类型 sheetClone参数:用于指定克隆报表名称,对于多个名称需要使用","分割符; 由于只支持String类型,对于公式以及单元格,开头需要使用"#",如"#b2"表示取b2单元格;如"#range(2)"使用公式range(2)   cellName参数:用于报表名称写入指定单元格,便于注入数据集查询   xlsfilePath参数:用于指定导出xls路径以及文件名,如"r:\aa.xls" Verify_sheetClone.zip (5.95 K)
verify填报查询
通过自定义校验类TotalVerifyJob将下传的填报数据赋值给原始报表相应的单元格,然后刷新数据集查询。 关键步骤:   1、将自定义校验类"Verify_setCell.class"放入"\FineReport_8.0\WebReport\WEB-INF\classes\com\wz",需要新建wz目录 2、添加自定义校验类:填报属性->数据校验->自定义校验->选择类->添加属性,名字必须是单元格名 3、添加刷新脚本:填报页面单独设置->添加检验后事件->刷新查询 _g().refreshAllSheets()   4、对于多sheet,每个sheet都需要重复第2步添加自定义校验类 Verify_setCell.zip (4.3 K)  
单元格注入查询
目前只能通过改变参数栏中的参数来再次刷新查询,尝试通过改变某个单元格的值(该单元格已设为参数注入到某个数据集)来刷新查询。   思路: 通过修改库文件,在报表运行之前截取参数(wz_setCellValue),根据(wz_sheetIndex)以及(wz_cellName)定位到指定的单元格,将(wz_setCellValue)写入,最后通过参数注入到数据集中,刷新查询结果。     说明: 将a8-report-ReportSessionIDInfor.jar拷入到“\FineReport_8.0\WebReport\WEB-INF\lib”目录下 单元格注入查询-多sheet跳转.zip (18.46 K)
填报查询
发现参数下拉框控件可以实时刷新其绑定的数据集查询,利用这一功能做了一个填报实时查询。 思路: 1、创建数据库查询ds1 select   姓名||','||年龄 as items --将所需的字段合并 from Salary ${if(len(fr_id)=0,'--','')}where id = ${fr_id}   2、单元格id控件增加一个编辑结束事件 var cell = this.getValue();//获取编辑后的id if (cell.length > 0){ _g().parameterEl.getWidgetByName("comboBox0").reset(); //复位参数下拉框控件 _g().parameterEl.getWidgetByName("fr_id").setValue(cell);//将id赋值给参数栏绑定全局变量"fr_id"控件 }   3、给参数下拉框控件"comboBox0"增加一个编辑结束事件 var items = this.getValue().split(',');//将合成字段分割复原成单个字段 var fr_id = _g().parameterEl.getWidgetByName("fr_id").getValue();//获取全局变量"fr_id" var w_id = _g().getWidgetByName("w_id");//获取单元格id控件 var cr = FR.cellStr2ColumnRow(w_id.options.location)//获取单元格id控件位置 if (w_id.getValue() == fr_id) {//只对id相同的行进行操作 contentPane.setCellValue("B"+(i+1+cr.row),null,items);//赋值第1个字段 contentPane.setCellValue("C"+(i+1+cr.row),null,items);//赋值第2个字段 }else{//处理扩展单元格id控件 var w_id = _g().getWidgetsByName("w_id"); for(i = 0; i < w_id.length; i++){填报查询.zip (14.65 K) if (w_id.getValue() == fr_id) { contentPane.setCellValue("B"+(i+1+cr.row),null,items); contentPane.setCellValue("C"+(i+1+cr.row),null,items); break; }  } }    说明:参数下拉框控件需要手动点击才能触发刷新,如果哪位大神有好的方法请告知。
数据库lib
通过对u8数据库访问,将物料信息(存货编码、存货名称、规格型号以及现存量等)转换成xls表格,通过Database_Lib展现在EDA软件中,开发工程师设计的时候可以方便、无误的选用。
sheet工具集
sheet工具集   1、跨报表运算函数 f_SessionEval(sessionid,index,exp):返回指定session(sessionid)的sheet页(index)公式(exp)计算结果。   有了这个函数,链接打开一个子报表只需要传递一个参数:sessionid 其它需要传递的参数直接通过该函数进行获取,非常方便。   2、sheet动态克隆 通过修改帆软库文件实现。 参数wz_sheetCountClone:克隆开关,同时指定克隆数量,对于跨报表克隆,数量由具体的数组而定 参数wz_Session:待克隆报表sessionid,用于跨报表克隆 参数wz_sheetIndex:待克隆报表sheet索引号index   3、sheet隐藏 直接修改帆软库文件实现。 参数wz_sheetIndexHide:指定要隐藏sheet索引号index 参数wz_sheetNameHide:指定要隐藏sheet名称     说明:样例基于8.0 1、将附件a-report-8.0.jar放入“\FineReport_8.0\WebReport\WEB-INF\lib”目录中,需要重启设计器 2、f_SessionEval.class请放入"\FineReport_8.0\WebReport\WEB-INF\classes\wz"目录中 3、functions.xml覆盖"\FineReport_8.0\WebReport\WEB-INF\resources\functions.xml",如果已注册过其它函数,请手动添加。 4、样例请放入"\FineReport_8.0\WebReport\WEB-INF\reportlets\sheet"目录中 5、母报表(eval_main.cpt、eval_excel.cpt)必须使用填报预览方式。 6、请不要直接预览子报表(eval_sun_clone.cpt、eval_sun_Poly.cpt、eval_sun_view.cpt)   sheet工具集.zip (28.44 K)    
跨报表运算函数
跨报表运算函数 f_SessionEval(sessionid,index,exp):返回指定session(sessionid)的sheet页(index)公式(exp)计算结果。   有了这个函数,链接打开一个子报表只需要传递一个参数:sessionid 其它需要传递的参数直接通过该函数进行获取,非常方便。   f_SessionEval.zip (5.7 K) 说明:样例基于8.0 1、f_SessionEval.class请放入"\FineReport_8.0\WebReport\WEB-INF\classes\wz"目录中 2、functions.xml覆盖"\FineReport_8.0\WebReport\WEB-INF\resources\functions.xml",如果已注册过其它函数,请手动添加。 3、样例请放入"\FineReport_8.0\WebReport\WEB-INF\reportlets\f_SessionEval"目录中 4、母报表必须使用填报预览方式。
sheet报表间克隆
sheet报表间克隆 通过修改库文件实现。   说明:样例基于8.0 1、将附件a-report-8.0.jar放入“\FineReport_8.0\WebReport\WEB-INF\lib”目录中,需要重启设计器 2、超链接网络报表,添加参数:wz_sheetHold,公式=sessionID 3、超链接网络报表,添加参数:wz_sheetIndexHold,“0”为第一个sheet 4、请使用填报预览方式。 clone2sun.zip (20.61 K)  
多sheet层次坐标函数
多sheet层次坐标函数   对于多sheet,我们希望在当前sheet能够使用其它sheet层次坐标函数,比如sheet1!e2{sheet1!d2=$A2} 可惜的是帆软并不支持,通过修改库函数,拓展了sheet层次坐标函数   f_HoldSheetEval(eval): 返回锁定sheet页的公式计算结果。 示例: f_HoldSheetEval("e2{d2='" + A2 + "'}")等于 sheet1!e2{sheet1!d2=$A2},假设HoldSheet名为"sheet1"   说明:样例基于8.0 1、a-report-8.0.jar,该附件放入“\FineReport_8.0\WebReport\WEB-INF\lib”目录中 2、f_HoldSheetEval.class请放入"\FineReport_8.0\WebReport\WEB-INF\classes\wz"目录中 3、functions.xml覆盖"\FineReport_8.0\WebReport\WEB-INF\resources\functions.xml",如果已注册过其它函数,请手动添加。 4、添加模板参数:wz_sheetIndexHold,“0”为第一个sheet 5、请使用填报预览方式。 f_HoldSheetEval.zip (8.13 K)
函数REPEAT变种
函数REPEAT变种   f_REPEAT123(text,number_times,separator): 根据指定的次数序列化重复显示文本。 Text:需要重复显示的文本或包含文本的单元格引用。 Number_times:指定文本重复的次数,且为正数。如果number_times为0,函数将返回“”(空文本)。如果number_times不是整数,将被取整。函数的最终结果通常不大于32767个字符。 separator:分割符,缺省为",",分割符只添加在文本之间。   示例: f_REPEAT123("Qty",3,"+")等于“Qty1+Qty2+Qty3”。 f_REPEAT123("SUM(Qty",3,"),") + ")" 等于“SUM(Qty1),SUM(Qty2),SUM(Qty3)”。"),"为分割符,最后还需要补一个")"。 如果单元格B10的内容为“客户”,f_REPEAT123(B10,3)等于“客户1,客户2,客户3”。再使用SPLIT(f_REPEAT123(B10,3),",")就可以纵向/横向扩展了。   样例基于8.0,f_REPEAT123.class请放入"\FineReport_8.0\WebReport\WEB-INF\classes\wz"目录, functions.xml覆盖"\FineReport_8.0\WebReport\WEB-INF\resources\functions.xml",如果已注册过其它函数,请手动添加。 f_REPEAT123.zip (2.65 K) with中一个示例: WITH a(yyy,${f_REPEAT123('sum_Qty',3)}) AS( SELECT f_REPEAT123("SUM(Qty",3,"),") + ")" FROM xxx GROUP BY yyy ) 编辑于 2021-8-23 13:31
xls导入锁定
web端xls导入后,如果执行查询,导入的内容将被清除,如果能够锁定导入内容,将极大扩展后续的查询设计。   直接修改帆软库文件,根据参数“wz_sheetIndexHold”来指定要xls导入锁定sheet的index。 index从0开始,对应于第一个sheet。帆软只能第一个sheet导入,因此该参数设为0。 添加“Excel导入后”js: _g().loadSheetByIndex(1); _g().refreshAllSheets();   参考附件a-report-8.0-sheethold.jar,该附件放入“\FineReport_8.0\WebReport\WEB-INF\lib”目录中 a-report-8.0-sheethold.jar.zip (4.08 K)sheet_xls.zip (10.28 K)    
sheet动态克隆
sheet动态克隆 通过修改库文件实现。 a-report-8.0.jar.zip (19.32 K)sheet_clone.zip (2.13 K) 步骤: 1、将附件a-report-8.0.jar放入“\FineReport_8.0\WebReport\WEB-INF\lib”目录中,需要重启设计器 2、将sheet名存入到一个类似于数组的变量(如内置数据集)中,当然也可以来自于数据库查询,放入单元格 3、通过超链接将数组名变量传递给参数“wz_sheetNameClone” 4、超链接打开待克隆的cpt,效果是对cpt最后一个sheet进行克隆。
sheet隐藏
直接修改帆软库文件,根据参数“wz_sheetHide”来指定要隐藏sheet的index。 index从0开始,对应于第一个sheet。 实际效果是,当点击要隐藏的sheet后会显示其它sheet。也可以添加“加载结束”js: $(".fr-sheetbutton-container").eq('${=wz_sheetHide}').hide();//隐藏sheet 参考附件a-report-8.0-SheetSequenceExecutor.jar,该附件放入“\FineReport_8.0\WebReport\WEB-INF\lib”目录中 a-report-8.0-SheetSequenceExecutor.jar.zip (3.54 K) 编辑于 2021-8-3 16:30
多sheet执行顺序调整
多sheet执行顺序调整   正常情况下,多sheet执行顺序是按照index从小到大的顺序。如果sheet单元格里引用了后面sheet中的单元格,如"sheetX!A1",帆软会调整sheet执行顺序,将后面的sheet置前执行,这样能够保证获取到正确的数据。   我们习惯将后续sheet的值汇总到第一个sheet中,直接在sheet单元格使用公式,输入诸如"sheetX!A1",不会存在问题;但sheet很多的时候,输入会很繁琐,我们希望将所有sheet名存入到一个类似于数组的变量(如内置数据集)中,然后与单元格名称拼接,来间接获取所有sheet相同的单元格。 如将内置数据集存有sheet名的字段放入单元格“A2”,单元格“B2”输入公式:EVAL(A2 + "!A1") 这种方法比较简单,但却不能如愿,原因是帆软只对公式中诸如"sheetX!A1"的字符进行识别,而不会对公式EVAL(A2 + "!A1")的执行结果进行识别。   方法一:使用js,在sheet切换时,获取当前sheet单元格,然后写入到第一个sheet相应单元格。参考附件on_sheetOp.js   方法二:直接修改帆软库文件,始终将第一个sheet最后执行。参考附件a-report-8.0-SequenceExecutor.ja,该附件放入“\FineReport_8.0\WebReport\WEB-INF\lib”目录中 sheet.zip (3.19 K) 编辑于 2021-8-2 16:18 编辑于 2021-8-2 16:18
基于values表的xls导入查询
基于values表的xls导入查询web端xls导入之后,将所需的字段按照values要求进行合并,然后传递给单元格缓存,通过超级链接将单元格缓存赋值给参数,查询数据集中将参数转换成values表,结合其它表最终生成所需的查询。大概思路如下:1、首先按照xls设置相应字段,需要有足够的列用于导入xls。2、在最后增加一列用于某行所需字段的合并缓冲。用公式输入:"('"+b2+"','"+e2+"','"+f2+"')"取的是b、e、f列为所需字段该列“其他属性”必须设置为“原值”,另外可以将其设置为隐藏1481163、缓冲列第一行用于最终values缓冲,添加超级链接,参数fr_values等于该单元格1481174、打开web模板属性,在“填报页面设置”中,修改设置为“为该模板单独设置”,添加导入,事件设置中增加“Excel导入后”,拷入xls_values.js内容1481191481185、查询数据集设置,参见《values妙用》 编辑于 2021-7-19 20:20
values妙用
values妙用 对于跨库数据聚合,目前只能通过设置过滤条件或者动态参数注入,但是无法像sql那样灵活处理。 SQLServer 2008以上可以使用Value将其它数据源转换成一个结果集,然后再与SQLServer数据库进行聚合。 大概思路如下: 1、新建查询数据集:ds1 with a as( select * from( values ${fr_value} ) t(id,name) ) select * from a 其中参数fr_value用于传入其它数据源结果 145959 2、对于其它数据源,将查询结果放入第一行单元格,扩展方向都选“不扩展” 在最右侧单元格如C1,公式输入:"('"+A1+"','"+B1+"')",这样就把(A1,B1)打包成了(id,name) 145960 3、对于第一行可以选择隐藏,第二行开始放入ds1 对于A2,动态参数注入:参数fr_value为公式C1 注意:左父格和上父格一定要选“无” 编辑于 2021-6-30 21:22
函数TABLEDATAFIELDS变种
函数TABLEDATAFIELDS变种 TABLEDATAFIELDS用于获取tableData中所有的字段名,好处是不用一个一个输入字段名,当字段名量多的时候非常方便。 基于TABLEDATAFIELDS编了两个变种函数:f_GetColNameLike和f_GetColNameNotLike f_GetColNameLike用于指定某个(或多个)字段,适用于某个字段单独开一列的情况, 而f_GetColNameNotLike则相反,用于指定某个(或多个)字段之外的所有字段。 对于输入字段,两个函数均使用了"Like"功能,即用字段中的部分字符来定位该字段。 样例基于8.0,f_GetColNameLike.class请放入"\FineReport_8.0\WebReport\WEB-INF\classes\wz"目录, functions.xml覆盖"\FineReport_8.0\WebReport\WEB-INF\resources\functions.xml"
嵌入式web程序数据集
嵌入式web程序数据集 公司研发的设备在调试的时候需要根据log来分析定位问题,对于新员工而言,即使查到错误码也不知道如何处理。现在想通过知识库来帮助他们方便地获取到前人的经验。 这里先解决错误码的获取,设备中的log可以通过嵌入式web来获取。于是搞了一个嵌入式web程序数据集。 帆软集成了apache相关的库,于是直接调用apache.http来处理post和get。 嵌入式web需要用户名和密码,格式是"application/json",刚开始试了很多都没有成功,调试的时候才发现,格式变成了application/x-www-form-urlencoded,最后通过添加entity.setContentType("application/json")才算搞定。 具体可以参考https://blog.csdn.net/sinat_28505133/article/details/77477640 获取到的log是JSONArray和JSONObject格式,处理参考https://blog.csdn.net/qq_32253371/article/details/78083391 ini中,在提取到JSONArray之后作为全局变量进行保存,没有进一步提取json_key和json_value,而是留到了getValueAt函数中进一步提取。
xls导入查询
xls导入查询 量少的参数查询可以通过参数面板,数量多的时候可以通过xls中的某个字段来查询,帆软提供web端xls导入功能,但是xls处理功能较弱,导致后续处理比较麻烦。 大概思路如下: 1、首先通过帆软文件控件将xls文件上传到服务器。 2、通过js获取文件id,将id放入"C3"单元格 _g().setCellValue("C3",null,this.wrap.attach_array.attach_id); 3、设置超链接查询报表,传递id 参数file_id为公式输入:C3 4、查询报表创建文件数据集,设置文件类型:"Excel",文件地址选"URL",http://${fr_file} 参数fr_file为公式输入:serverName +":"+serverPort+ servletURL + "?op=fr_attach&cmd=ah_download&id=" + fr_id 也可以使用集算器来完成后续的xls导入处理 4、查询报表创建查询数据集, =${xls_file} =httpfile(A1).xlsimport@tx() 传入文件http地址,参数xls_file为公式输入:serverURL + servletURL + "?op=fr_attach&cmd=ah_download&id=" + file_id 关于集算器的集成,参见《集算器在帆软中的应用》 编辑于 2021-6-19 15:52 编辑于 2021-6-19 15:54
集算器在帆软中的应用
集算器在帆软中的应用 对于跨库数据聚合,设置过滤条件只能实现简单的逻辑,复杂逻辑需要使用程序数据集,这需要有java编程技能,而且要死一堆脑细胞。 在另辟途径的过程中发现集算器的功能非常强大,而且很方便嵌入到帆软,具体可参考https://blog.csdn.net/cainiao_M/article/details/78769430 上述文章提到可以在数据库查询中调用dfx文件,而dfx文件的编辑需要esproc.exe软件,其实可以直接在数据库查询中写入语句,具体参见教程.chm中6.2.4直接执行语句 教程中提到的“\n”可以直接使用回车键,而“\t”用tab键 下面就是调用FRDemo一个例子: --查询数据集中编辑-- =FRDemo =connect(A1) =A2.query("select * from Air_Accidents") >A2.close() -------------- FRDemo需要在raqsoftConfig.xml中进行设置 对于复杂的sql,可以通过外部文件来实现 --查询数据集中编辑-- =FRDemo =file("r:/test.sql") =connect(A1) =A2.query(B1.read()) >A2.close() --- 为了便于sql调试,我编了一个函数TABLESQL,可以获取查询数据集中的sql文本,这样sql文本放入查询数据集中如"ds2",方便调试而且还可以使用参数,非常方便。
12下一页
个人成就
内容被浏览106,470
加入社区4年175天
返回顶部