请上传宽度大于 1200px,高度大于 164px 的封面图片
    调整图片尺寸与位置
    滚轮可以放大缩小图片尺寸,按住图片拖动可调整位置,多余的会自动被裁剪掉
取消
EchoMengjiong(uid:56952)
职业资格认证:尚未取得认证
如果渡渡鸟会跳弗拉明戈
渡渡鸟可能都不是一只鸟,他都不会飞!就好像我,连编程都编不利索怎么敢说自己是一个程序员? 这世上有的鸟会飞,有的鸟会跑,有的会跳,有的会唱,有的会卖萌撒娇,有的会越货杀人,有的会填海,有的会变鱼。而我什么都不会,稀里糊涂地选专业,懵懵懂懂地找工作,把自己过成了一堆臭臭泥,每天蠕动着上班,挪动着下班。反正遇到帆软的时候我正在望着雾霾天思考人生,它“嗖”一声就跳我面前了: “喂!你!对,就你,啧,甭看别人,我说的就是你,长得丑的那个!对!就你,过来!” 我一步三挪到它面前——怕它吃我。我听说过这世上有伪装的素食者,像我这样没进化的小白分分钟被吃得毛都不剩。 “啪!”迎面摔过来一张华丽的海报糊我脸上,上书几个金光灿烂的大字:“FineReport 8.0 帮助文档完善活动” “会写字儿么?”它蹲我对面用爪子剔着牙。 我喏喏点着头,仍不忘斜着眼觑它额上怪模怪样的“帆软”二字——我还是怕它吃我。 “嗯”它满意地点点头,“看你虽然外表粗鄙不堪,但想来也应该略通点文墨,不然你我也无缘得见。罢了,这张电简你拿回去细细研读吧。” 捧着这张“电简”回去粗推精敲薄批细抹此处细节表过不提,等再次见面已是轮了一个夏秋冬春。 它比我上次见到更高大了。 我一低头想装作不认识赶紧绕开。 “呔!哪儿走!”它一伸大长腿横我面前,左一展翅露出一串金光闪闪的名字:万豪 阿迪 静静 阿土 亚当 ……右一撩胸毛又露出一排璀璨斑斓的称号:FCRA、FCRP、叫兽组、砖家组、各路勋章……直晃得人眼花缭乱自惭形秽。 我伏地瑟瑟:“那个……要没什么大事儿……我先洗洗睡了……” “睡你** 起来嗨!”话音未落长啸一声,霎时只见飞沙走石,风云变色。顺着这一股子力我也止不住旋转~跳跃~我闭着眼,隐隐间只听得一个声音:“你原本应被逐出我族,但上次的比赛的结果让我们觉得你算是一支潜力股,所以我不远万里再来探视你,岂料你竟还是当年模样,可惜可惜~” 我虽然身不自觉地跟着转啊转,灵台却倏忽一片澄澈,竟从天灵盖上“biubiu~”出来俩小人,一人额上写:“一个与客户友好交互的考核类填报报表制作体验”,一个脸大一点,密密麻麻写着:“来一起偷懒吧----绕开存储过程实现数据抽取计算入库的两个案例”。读来颇有些拗口。俩小人儿蹦蹦跳跳一路攀上了面前巨兽的手臂,它低头看看满意地点点头,“赶早不如赶巧,看来你的进化之日就在此时。” “进化?”我心底一震,低头一看,自己竟也变得手是手,脚是脚了。电光火石见我心下明了,原来我从一开始就弄错了自己的属性,龟息之法并不是我的进化之路。 “既然你有心精进,我就再助你一臂之力吧”,巨兽说着又劈手扔过来一封和上次一样的“电简”,只是金光灿灿的大字变成了:“FineReport第二届平台主题开发大赛”,只看得人热血沸腾。 “去吧”巨兽言毕就消失了。 那以后的四个月我每天都沉浸在研习这张电简的内容里。这张电简的精要就在于“开发”二字,但我并不曾研习过此类技术,只能汲汲营营地依葫芦画瓢,俯仰间已是夏去冬来。这天又是一阵狂风大作,巨兽果然如约而至。我战战兢兢捧出主题二枚,一曰“青绿”,一名“琉璃”。“竟没想到你能坚持到此”巨兽接过主题仔细审视,终于满意地点点头撩开左胸毛将两枚主题别了上去。再细看它额上的“帆软”二字,似也不如之前狰狞,竟生出了许多亲切。 我低头看看自己,虽然已经脱离了臭臭泥的形态,却也没有如我所想进化成金雕大鹏,不,竟连麻雀都不如,因为我不但不会飞甚至都没有大长腿!!!我看向那些金光闪闪的名字,我是站在火烈鸟队伍里的渡渡鸟,永远跟不上节奏跳弗拉明戈。 我看看面前的帆软,它想带我装逼带我飞,带我跳着弗拉明戈吃火锅,虽然我终究还是没有学会飞,没有成为那些金光闪闪的名牌其中之一。但也并没有感到遗憾,也许我可以发掘自己别的技能,也许我还会有下一次的进化。 后记:我叫梦炯,论坛上很多同仁叫我“萌囧”,供职于成都联通。一年前我感谢帆软在我胆怯犹疑的时候伸手拉了我一把,把我拉出了画地为牢的窠臼。而今年我尝试了更多的可能,讲课,给图表提建议,参加主题开发大赛。 八、九、十三个月是我感觉最好的时间,快乐得像一个小陀螺,每天围着手上的两个主题绕圈圈。但等到十一月中旬一切尘埃落定后我突然觉出无数地沮丧,因为我并没有因为这次尝试得到任何质的飞跃,我提交的两个主题不过是用大量的时间和一点小聪明垒出的一个量的假象。 这次比赛结束后我给自己放了一个月的假,人和面团一样都是需要静静发酵的。写下这些文字的时候,我依然没有思考得很清楚,关于未来,关于方向,但那样沮丧的心情是已经被挥发掉了。这一年里,我依然感谢帆软,给了我很多尝试的机会,因了这些尝试我有了更多思考的机会。毕竟,成长才是最重要的 52571
【插件评论】公式插件用法理解
本帖最后由 EchoMengjiong 于 2016-7-15 17:19 编辑 这是一张根据自己的理解来写的关于插件公式里各种公式的用法,以及适用范围的研究(见附件)40013。 作为非刚入门帆软低级选手,帆软论坛万年留级生,我个人认为公式最好的状态就是在它被使用的时候,所以我希望能够尝试各种公式在不同环境下使用时的效果。也希望和我一样的初级能力用户在看了这篇报表后能够有所裨益;更希望我的报表能够起到一个抛砖引玉的作用,引来各位高手不断完善,最终形成一本《公式使用宝典》,造福大众。 另: 报表中的公式并不完整,除了我觉得没必要列举出来,一目了然的公式外,最后一个我真的理解不了是什么意思,盼高手解答,谢谢。
来一起偷懒吧----绕开存储过程实现数据抽取计算入库的两个案例
因社区改版,观看地址已移至讲堂(http://bbs.fanruan.com/course-5.html) 注:有购买过此课程的用户,请联系管理员珠珠(QQ:2671766282)转移观看权限 你可以登陆帆软YY频道84461177观看直播(不知如何参加等常见问题请点此:http://bbs.fanruan.com/thread-75786-1-1.html) 你也可以于20:30,通过网页观看http://www.huya.com/1742448141或者安装虎牙APP,在app内搜索“EchoMengjiong”进入房间 点击课程大纲,可试听前三小节,购买本课程后(如何购买请戳我),可观看所有章节全套视频(第二、三章会在直播后更新),可打包下载全套课件(40169 戳我下载 下载密码见视频第三章12小节。PPT、需求、数据流图、讲义、模板、公式等均已上传) 如果你的水平正处于菜鸟之上,高手不满;如果你对数据库的了解和使用能力仅限于简单的增删改查;如果你和我一样,认为案例先行,技能替补也不失为一种好的学习方法;那么,这真是一堂非常适合你的课程。来和我一起偷个小懒吧,让我们一起来探究看似简单的帆软填报还能够实现哪些奇妙的功能。 课程题目:《来一起偷懒吧----绕开存储过程实现数据抽取计算入库的两个案例》 讲师:EchoMengjiong (帆软核心粉) 首次开课时间:2016年7月18日 周一 20:00第二次开课时间:2016年7月26日 周二 20:30 讲课通过YY,帆软YY频道84461177,欢迎您的光临! 如果您尚未加入帆软微信培训群(群命名方式为:帆软⑨群-培训、干货、动态),可以联系传说哥(微信ID:FanRuanBD 或扫描下方二维码)发送“培训”2字。 39759 *****课程大纲***** 第1章 报表数据计算后入库 1-1 背景介绍 1-2制作考核得分表 1-3制作薪酬表 1-4填充数据入薪酬数据表 1-5利用报表自带功能绕开存储过程 第2章 底层表数据提取后入库 2-1 背景介绍 2-2 制作投诉表上传过程 2-3 制作统计表 2-4 从底层表抽取数据到统计表 2-2 绕开存储过程抽取数据入库 第3章 总结 线上培训常见问题解答(先看再问) http://bbs.fanruan.com/thread-75786-1-1.html
【6.15免费线上培训报名】一个与客户友好交互的考核类填报报表制作体验【续】
5月31日,我为大家进行了一期题为《一个与客户友好交互的考核类填报报表制作体验》的在线培训,在此次培训中我为大家讲解了怎样在制作填报报表的过程中,实现一些能够与客户友好交互的功能。因为时间关系呢,当时的直播只进行了前三章的讲解。所以,本周三(6月15日)晚上21:00到22:00,我将对剩下的一章《对填报结果的修改》进行详细讲解,并且将对前三章中小伙伴们有疑惑的地方进行答疑。 对前三章的内容感兴趣的同学可以通过以下链接购买视频和相关资料,这样能够帮助你更高效地利用答疑时间。视频链接:http://bbs.fanruan.com/thread-74783-1-1.html 本次课程涉及的知识点包括:帆软的填报过程,控件事件,简单的JS语言。希望准备报名听课的同学能够事先预习,对JS语言完全小白的同学也不用惊慌,我们课程中涉及的相关内容非常少非常初级也非常好理解,你只需要简单的记下来,下次遇到同样的情况直接拿出来用就好了。 本次课程的报名方式是给传说哥微信发送“你的论坛用户名+培训报名”,让他邀请你加群,传说哥有福利赠送哦~~上一次培训前已入群的同学就不需要再次申请了。 38062 <---灵活的小手指请扫描传说哥的二维码 本次课程结束后将向大家发送课后调查,凡是回复课后调查的同学都将得到一份本次讲课的讲义,欢迎大家踊跃参加~ *****课程安排***** 填报结果修改 1-增加修改按钮和修改功能 2-修改按钮隐藏/显示 3-修改过后单元格变色 4-增加修改按钮 答疑 周三晚上九点~我在直播教室恭候各位哦~
tomcat服务器部署后500错误解决方案
1.问题描述报表内嵌入系统,使用Tomcat服务器部署。部署完成后通过浏览报表确定部署已经成功,并且在本地运行良好。将系统迁到公司服务器后,系统运行正常,但点击进入报表后报500错误。在地址栏中输入http:/ip:公司服务器端口号/项目所在目录/ReportServer,能成功看到部署成功页面。系统报错截屏如下: http://help.finereport.com/uploads/201606/1465268678AKkxLKwt.png 2.解决方案经查,出现这种情况一般就是启动tomcat的用户无法访问Xserver,包括Xserver没有启动或者没有权限访问. 以下为转贴:1.什么是Headless mode? Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。 2.何时使用和headless mode? Headless模式虽然不是我们愿意见到的,但事实上我们却常常需要在该模式下工作,尤其是服务器端程序开发者。因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用他们提供的功能,生成相应的数据,以提供给客户端(如浏览器所在的配有相关的显示设备、键盘和鼠标的主机)。 3.如何使用和Headless mode? 一般是在程序开始激活headless模式,告诉程序,现在你要工作在Headless mode下,就不要指望硬件帮忙了,你得自力更生,依靠系统的计算能力模拟出这些特性来: System.setProperty("java.awt.headless","true"); 3.实现步骤http://help.finereport.com/uploads/201606/1465268971jFimzbbQ.png 帮助文档链接:tomcat服务器部署后500错误解决方案- FineReport帮助文档 http://help.finereport.com/doc-view-1550.html
多层饼状图需求
本帖最后由 EchoMengjiong 于 2016-6-3 09:56 编辑 1.多层饼状图不限于仅两层,可同时显示但不固定于1·4层。可自由选择固定显示层数,并且和数据集联动的时候可拖拽某一块出来单独形成饼图,并且根据设定的固定显示层数显示 (例:adcd四个数据分别是被包含关系:a->b->c->d;当设定“固定显示层数”为3时,内层显示d数据,第2层显示c数据,最外层显示b数据,a数据被隐藏。当把c单独拖拽出来时,内层显示c数据,第2层显示b数据,最外层显示a数据。) 2.多层图容易出现块颜色冲突,建议直接采用块-颜色,层数-花纹设定,每一层用户设定一种花纹(波点,条纹,格子等),每一块用户自定义颜色。大概如下图(网络用图,不够准确) 37797 3.利用多层图开发时间轴饼图,类似下图 37813
一个与客户友好交互的考核类填报报表制作体验
因社区改版,观看地址已移至讲堂(http://bbs.fanruan.com/course-6.html) 注:有购买过此课程的用户,请联系管理员珠珠(QQ:2671766282)转移观看权限 点击课程大纲,可试听前四小节,购买本课程后(如何购买请戳我),可观看所有章节全套视频(第二、三章会在直播后更新),可打包下载全套课件( 40171戳我下载 课件下载密码见视频最后一小节。) 本视频所介绍内容于 2016.05.31晚在帆软YY频道进行了直播+互动 130位番薯参与了满意度问卷调查,满意度为98.5%,好评如潮!!! 3779937800 第四章PPT:38382 培训过程中记录的sql语句+操作步骤(这个就免费共享啦):37755 友情提醒:本课程共12节,购买总价是10F币,前4节课可免费试听。试听满意后直接购买即可,若F币不足,又想继续购买可以→_→点击查看如何充值
填报应用 >> 行式填报表 >>批量生成字符串类型卡号
本帖最后由 加菲喵 于 2015-9-10 16:36 编辑 批量生成字符串类型卡号 问题描述 实现思路 示例 在数据库中设计数据表 制作上传数据模板 保存填报 制作查看模板 保存预览 1. 问题描述批量生成字符串类型卡号是指,用户上传了一段位数很长的字符串类型卡号的开头和结尾(如图),然后要求系统自动生成这一段所有的卡号并且成功输出。27331用户上传卡号2. 实现思路 主要从三个方面进行思考:1.对过长的字符串进行截断,使其可以被转化成数字;2.使用公式批量生成;3.输出过程进行拼接;4.对数字0进行标注。3. 示例 3.1 设计数据表 此处使用Oracle数据库,在数据库中设计以下这样一张数据表,数据类型和属性如下:273343.2 制作上传数据模板 新建数据连接 新建一个数据连接,连接至该数据库,新建数据连接的方法详细请参照数据连接。 模板设置 新建一张模板,在在模板设计主体页面第二行C单元格添加公式: if(lenA2)==0,"", RANGE(TOINTEGER(RIGHT(LEFT(A2,len(A2)-4),3)), TOINTEGER(RIGHT(LEFT(B2,len(B2)-4),3)))) 下面对公式做出解释,从用户上传卡号可以看出,1.卡号位数较多;2,卡号位数不固定;3.卡号自带字符串后缀; 针对以上情况作出以下解决方案:1. 通过len(B5)-4)获取卡号位数;2.通过LEFT(B5,len(B5)-4)截断字符串后缀;3.通过RIGHT(LEFT(B5,len(B5)-4),3)获得起始卡号和终止卡号最后三位(注,此处只取了后三位,用户可以根据实际需要取位数);4.通过TOINTEGER(RIGHT()将获取的三位卡号转换成整数型;5.利用RANGE()公式实现卡号后三位的自增长。将C2单元格获取的结果传进D2单元格27335 填报属性设置 点击模板>报表填报属性,增加一个内置SQL27336对填报内容作出解释:id采用随机数来表示,用UUID();papername是用来存放产生的卡号尾数,因为此时所有的卡号位数都是采用字符串形式存放在D2单元格里用“,”分开,因此此处采用split公式,将字符串根据“,”分离,split(D2,”,”);basename用来存放卡号前几位left(B2,len(B2)-7),取B2的长度减7然后取左边这几位。suffix用来存放卡号的后缀right(B2,4);3.3 保存填报保存模板,采用填报预览。 27438点击导入按钮导入Excel表。27439 导入后效果 27337可以看到C单元格已经自动生成卡号的后三位,正式报表可以将CD两列隐藏提交进数据库后数据库保存的数据如下:273383.4 制作查看模板新建一张模板,添加数据集select filed||suffix as cardnumber from(SELECT BASENAME||PAPERNAME AS FILED,suffix FROM (select case when length(papername)=2 then '0'||papername when length(papername)=1 then'00'||papername else papername end aspapername, basename, suffix from CPTZ_PAPERNAME) order by to_number(FILED) )27487注:自增长函数range只能对数字类型实施运算,因此被存进数据库的数字会自动截断首位的0,因此在此处需要对自增长产生的数字位数进行判断,并且根据位数选择填补的0。本例截取的末尾数为三位。 在模板设计主体页面第二行添加一个单元格,并将数据列拖曳至对应单元格中,如下图:273403.5 保存预览 保存模板,查看效果如下:27440页面显示 273472734527344274412748827501
填报应用 >>及时对用户申请数量和数据库中余量进行校验的方法
本帖最后由 susie 于 2015-9-2 11:09 编辑 填报应用 >> 行式填报表 >> 及时对用户申请数量和数据库中余量进行校验的方法 及时对用户申请数量和数据库中余量进行校验的方法 问题描述 实现思路 示例 打开报表 编辑Js语句进行数据校验 保存并预览 1. 问题描述 用户需要申请一定数量的书,但申请的数量要小于数据库中对应的余量。如果要求用户每填写一条数据就点击一次数据校验按钮很容易在填报的时候报错,所以,需要在用户编辑完 申请数量后做出及时校验。2. 实现思路 增加临时单元格用sql语句提取余量,然后在用户申请数量的单元格文本控件中添加Js事件,通过JS事件进行数据的校验。3. 示例 3.1打开报表http://localhost:8075/WebReport/ReportServer?reportlet=rowindatabase.cpt&op=write3.2编辑Js语句进行数据校验 在申请数量的文本控件处右键在控件设置中添加事件编辑,添加编辑结束事件,在Js事件中增加参数:row=row()-1.Js事件如下:varv1=contentPane.curLGP.getCellValue(2,row);//2是库存量所在的单元格列var v2=this.getValue();var t=v2-v1;if (v2 == 0){ alert("申请数量不能为0");}if(t>0){ alert("当前输入的申请数量,大于余量:"+v1+",请重新输入"); this.setValue(""); }27242 3.4保存并预览申请的数量如果大于数据库余量则提示用户申请数量大于余量,请重新输入,并且清空当前申请的数量文本框。 272432724527246
填报应用 >> 行式填报表 >> 采用复选框控件对数据进行删除
本帖最后由 susie 于 2015-8-30 09:58 编辑 填报应用 >> 行式填报表 >> 采用复选框控件对数据进行删除 采用复选框控件对数据进行删除 问题描述 实现思路 示例 打开报表 编辑按钮控件 编辑报表填报属性 增加参数查询功能 编辑报表Web属性 保存并预览 1.问题描述当一张报表展示后需要对其中某些行进行删除,并且需要连接到数据库对数据表中的数据进行修改。因为帆软中没有现成的功能针对此项需求,因此需要连接多个功能进行开发。 2.实现思路首先需要利用复选框对表中数据进行选定,然后通过一个按钮调用填报功能进行数据的删除。但因为复选框只能传值不能对页面的静态数据进行删除,因此还需要对页面进行刷新。但如果页面含有参数是通过参数查询后的页面则需要在刷新的同时传递当前页面参数。具体实现方法如下。3.示例这张报表是为了查看图书信息创建的展现报表,因此只简单展现图书信息,在每一行最后增加一个单元格,设置为复选框控件。为了展现传递参数的过程,这里增加了通过参数进行筛选的过程。在报表适当位置增加删除按钮。为了让读者更清楚地看到数据库中数据的变化,我们用已完成权重来展现数据库中所有权重和。3.1打开报表http://localhost:8075/WebReport/ReportServer?reportlet=Bookshow.cpt&op=write26901将书本信息分别展现在对应的字段下,在最后新增一个单元格设置为复选框控件。再在合适位置增加按钮控件,按钮文本为:删除。3.2编辑按钮控件我们需要通过按钮控件调用报表的填报事件,因此需要编辑按钮控件的事件。新增点击事件,编写Js语句:_g().writeReport();269023.3 编辑报表填报属性首先设置填报属性,点击模板à填报属性编辑填报事件,此处是通过书本的ID实现删除,因此将ID当做主键,选择类型为删除提交。此处为了演示方便只对一张数据表进行了操作。如果在实际应用当中涉及到多张数据表的操作可以通过增加事件来实现。经过测试,该过程非常稳定,可以省掉很多编写数据库存储过程或者编写触发的过程。 然后设置提交条件,点击提交条件,类型是公式,然后编写公式:F3 == 'true',F3 == true 此处的F3是复选框单元格所在位置,两句公式之间用‘or’来连接。26903269043.4增加参数查询功能到3.3这一步就已经成功完成了删除功能,演示图片如下。26911可以看到经过删除后虽然数据库中的数据发生了变化,但是因为复选框没有在页面删除静态数据的功能,页面上的数据还是没有发生变化的,需要重新刷新后才可以看到效果。因为需要在报表的Web属性里增加刷新页面的功能。但如果该页面是带有参数的,并且是在带参查询后进行的删除操作,则需要刷新页面时带上当前页面的参数。以下就是带参刷新的编写方法。 为了方便读者查看,我们为报表增加了参数页面。并且将整行报表下移一行,在A1单元格写入:=$f,此处的f是进行筛选的参数。且为了方便查看我们将点击查看前不显示正文内容的勾选取消。26905269063. 5编辑报表Web属性单击模板à报表Web属性à填报页面设置,将设置修改为:为该模板单独设置。在事件设置中新增填报成功后事件。 编写Js语句,首先新增Js参数,f,f在此刻等于A1单元格(注意,传参的这个单元格只能在顶端,不能在展现数据的单元格下端,否则会报错,如果需要多个查询参数可以分别写进不同的单元格),然后编写语句:window.location.href=FR.cjkEncode("${servletURL}?reportlet=Bookshow.cpt&op=write&finishrate="+f);若要传递多个参数则继续在id后添加”&a=”+a+”&b=”+b类似的语句。2690726908注意,此处需要把填报属性中的填报条件修改为F4=‘true’269093.6保存预览 保存报表预览,查询权重为17的书本,报表显示为:孽海花和霍乱时期的爱情。A1单元格显示此刻查询参数:17。勾选霍乱时期的爱情,点击删除按钮,该选项被删除,页面被刷新,此刻参数框仍然显示刚才查询的参数。26912
填报应用 >> 行式填报表 >> 单行数据存进数据库后进行删除的方法
本帖最后由 加菲喵 于 2015-9-11 09:46 编辑 单行数据存进数据库后进行删除的方法 · 问题描述· 实现思路· 示例 打开报表 新增删除按钮 编辑Js语句跳转到删除页面 编辑删除页面 编辑填报事件 编辑报表Web属性 保存并预览 1. 问题描述 单行数据存储进数据库后涉及到删除,倘若新添加的这行数据发生了错误需要删除,就涉及到再次修改数据库数据。2. 实现思路 在进行删除动作的时候,我们同样只能采用填报属性实现。但一张报表只有一个填报属性,所以这里我们通过Js语句调用另一张报表的填报属性,通过两张报表联动,实现数据在数据库中的删除。注意:此处只是根据实际需要调用数据库,实现添加、删除两种功能。读者可以举一反三,调用多张报表实现多种方式的数据库调用。 3. 示例通过填报应用 >> 行式填报表 >> 单行与数据库交互的方法一文我们实现了产品库存量的改变,但如果用户要删除订购,就需要通过填报将数据还原3.1打开报表打开报表http://localhost:8075/WebReport/ReportServer?reportlet=Rowdel.cpt3.2新增删除按钮在添加按钮旁边新增单元格新增删除按钮,编辑按钮属性,按钮类型:删除行,图标:红色小叉叉,按钮名字:无。268503.3编辑Js语句跳转到删除页面点击删除按钮右键-->控件设置-->事件编辑-->点击,创建新的JS事件。新增参数:id,参数的值用公式绑定单元格A3。restnum,参数的值用公式绑定单元格D3。编写Js脚本,脚本如下: if(id==null||id==""||id=="null"){ alert("删除空数据");//该行语句是为了验证删除行是否为空。 }else{ var $iframe = $(""); $iframe.attr("src", "${servletURL}?reportlet=Rowdel.cpt&op=write&__showtoolbar__=true&id="+id+"&restnum="+restnum); var o = { title : "", width : 280, height: 200 };//删除成功后,删除报表会以弹窗的方式提示删除的书名,这个是弹窗报表的尺寸。 FR.showDialog(o.title, o.width, o.height, $iframe,o); } 注意:如果传递的参数是中文,有可能报表无法识别272353.4编辑删除页面新创建报表http://localhost:8075/WebReport/ReportServer?reportlet=Rowdel.cpt以下是各类参数,可供读者参考:A列:4mm,B列:11mm,C列:49mm1行:11mm,2、3、4行:8.5mm,5行9mm。在B1单元格=$id,C1:号产品订购信息删除成功,D1单元格写下:=$num,E1单元格写下:=$restnum因为这两个单元格只用来传递参数,并不在报表中体现,因此将这两列进行隐藏。B5和C5合并单元格,在此处添加按钮控件,文本内容写:确定。因为填报成功后会有成功弹窗,所以2、3、4行留给弹窗272363.5编辑填报事件 模板->报表填报属性-->提交-->内置SQL,在这个地方实现对数据的删除。272373.6编辑报表Web属性边界Web属性:模板-->模板Web属性-->填报页面设置-->将设置改为:为该模板单独设置à在事件设置中添加加载结束事件。然后编写Js语句:_g().writeReport();26854因为要把删除页面伪装成弹窗,所以为了页面美观,我们将顶部工具栏全部清空。268553.5保存并预览可以看到数据被订购后,库存量发生了变化,在删除了这条订购信息后,库存量又恢复到订购前的数量。 27238272392724027241
填报应用 >> 行式填报表 >> 单行与数据库交互的方法
本帖最后由 EchoMengjiong 于 2015-9-18 16:41 编辑 填报应用 >> 行式填报表 >> 单行与数据库交互的方法 单行与数据库交互的方法 l 问题描述l 实现思路l 示例§ 打开报表§ 编辑Js语句记录订购产品名§ 调用填报功能,设置填报条件§ 编辑添加按钮,调用填报事件§ 保存并预览 1. 问题描述 我们在做一张报表填报的时候经常会遇到需要在一行进行添加动作,将该行数据直接与数据库交互,执行存储过程过程。我们可以通过每一行增加帆软“插入”按钮实现插入动作,并且在控件事件中增加和数据库的交互,但当事件过多时帆软无法稳定地实现交互,会出现数据丢失或者数据库连接出错等问题。因此,这篇文档介绍一种单行数据和数据库交互的方法2. 实现思路 在帆软报表的设计思路中,通过模板-->报表填报属性实现和数据库的交互才是常规手段,且过程稳定不容易出错。因此,采用在按钮事件中写入JS事件,调用填报属性,并且用填报条件来限制入库数据来实现单行填报。3. 示例 我们假设产品库存量为现有量,然后申请订购后就从库存量里减去订购的数量,在每一行的数据进入数据库后,可以看到库存量的变化3.1打开报表打开报表http://localhost:8075/WebReport/ReportServer?reportlet=rowindatabase.cpt&op=write3.2编辑Js语句记录订购产品名右键产品名称-->控件设置-->事件编辑-->新建事件-->编辑结束。写js语句,contentPane.setCellValue("G1",null,this.getValue());。将新增记录在G1单元格。27212编写Js语句3.3调用填报功能,设置填报条件 模板-->报表填报属性-->内置SQL-->提交类型选择智能提交,在提交内容中分别将要提交的字段和单元格一一对应。通过验证添加的数据是否是最新的数据来进行筛选。注意,G1单元格一定要设置成文本控件27213填报数据27214设置条件 3.4编辑添加按钮,调用填报事件 在倒数第二个单元格添加按钮控件,并对该控件的图标、类型进行设置。注意,所有的单元格都要设置成向下的扩展方向,带有sql语句的单元格插入行策略都是原值,按钮对应的扩展单元格是B3。27215对按钮的基本信息进行设置 对按钮进行事件编辑,点击-->编写Js语句:_g().writeReport();调用填报功能。26558编写js语句调用填报功能。3.5保存并预览保存模板,点击填报预览,效果如下27216报表样式27217添加过程演示可以看到库存量发生了变化(此处为demo数据库,无法增加新的字段,读者在实际使用的时候可以在数据库中增加一个字段,专门用来存放原始的库存量,为了页面美观,可以将H列隐藏2722527218
成品卡台账管理系统实例分享(一)
成品卡台账管理系统实例分享笔者供职于国内某电信运营商,负责为公司各部门开发内部办公系统,各部门要求开发的系统五花八门,虽然大部门都只涉及数据存储展现,但有时候会有逻辑关系相对复杂的过程。以下就是我最近负责开发的一个专门对手机卡进行管理的系统。说到这样的管理系统,不管针对的对象是什么,基本概念都很一致,:数量上的增减(也就是出入库)。但实例中的系统在设计思路上有两个较为特殊的地方。第一是分块管理,也就是说进入数据库的数据并不是按“个数”分条,而是按照“块数”逐条存储,而这样的块又会被用户不断切割。第二个特殊的地方是操作流程的不断反复,从原始数据导入系统后分别会经历预申请、确定申请、取消申请、特殊申请、二次预申请、二次确认申请、二次取消申请、二次特殊申请……整个过程像瀑布一样,不断重复。因此在完成了此次系统的交付后,我将这次开发的经验写成了如下这篇实例分享,供同样被需求方折磨的同行参考。案例按照用户操作的顺序,依次介绍每一张报表中用到的一些方法。一:原始数据导入到余量表这一步比较简单,直接上传,导入到原始数据表(图1.0),但因为原始数据字段太多,在后期也用不到,且在后期中卡段会被不断切割。因此,在原始表导入的同时,筛选了部分数据导入到余量表(图2.0),以后的所有操作都是在余量表中进行。26280原始数据导入表样1.026281填报进入余量表2.0为了避免用户重复导入相同数据,保存数据进入数据库前先对报表中相同的数据进行了删除。二:文件名的逐条导入文件名的导入是原始数据导入的另一个难点,用户上传时只上传了首文件的文件名和末尾文件的文件名(如图3.0),中间所有文件名称都是按照数字顺序排列的,而我要做的就是后期对文件名逐条进行展现(如图4.0)。 26282 26283用户上传的文件名样式3.0 逐条展现的文件名4.0这里应用到了帆软RANGE函数,但因为文件名的数字太长(12~13位),因此不能直接使用该函数。在这里我做了两次转换,第一次转换是对文件名进行截断,只取后三位数字,利用RANGE函数得到起始数字和结尾数字中间所有的数字(如图5.0),公式如下:if(len(d5)==0,"",RANGE(TOINTEGER(RIGHT(LEFT(D5,len(d5)-4),3)),TOINTEGER(RIGHT(LEFT(E5,len(e5)-4),3))))2628426285第一次转换后的文件名5.0接下来的第二次转化是把得到的数字用字符串的方式暂存于单元格,再采用字符串分离的方式按照数组形式逐个存进数据库。在此处同时被保存进数据库的还有文件名中除开被截断三位数字后剩下的前几位数字(如图6.0),注意:此时数据库中的ID不能是主键26286字符串分离后保存进数据库6.0三:卡号申请 申请卡号的表格样式如下(图7.0),其中涉及到的一些固定信息比如申请人信息、号码描述、配置产品等均另开报表填报存入数据库,此处填报的时候只需要下拉框选择即可(图8.0)。26294申请卡号表样7.02628826289固定信息填报报表8.0由于对卡号的存储都是按照“块/段”来进行的,因此涉及到一个潜在的BUG:用户要求的卡号段不在原始号段以内或者根本就是输错了卡号 因此,我们在用户申请卡的起始号单元格内添加了下拉框控件,规定用户申请的卡号起始段只能是余量中存有的卡号段的开头卡号(图9.0)26292下拉框限制起始卡号9.0四:提示申请数量限制 为了用户操作的便捷,每一行数据的结尾卡号、余量、卡片类型、卡片规格等均通过sql语句从数据库中存储的原始数据处得到(图10.0)26293自动匹配的各类信息10.0 在用户申请数量单元格的文本控件里,我增加了一个事件来限制用户申请的卡数量,即申请数量必须小于余量(图11.0)26279限制用户申请数量11.0
新人报道
小女姓白,现居成都,编程菜鸟,目标前端,学习帆软,磕磕绊绊,还望大牛,不吝赐教~
个人成就
内容被浏览2,705,015
加入社区9年362天
返回顶部