关于报表增加监听类后,导致采用变量的序号递增方式无效的问题,麻烦帮解决一下,谢谢
关于序号的问题:
1、报表里面声明一个变量:a=0
2、序号:a=a+1
当增加监听类的时候,a=a+1 编号表达式无效,后续的所有序号都变成了 1,如果不增加监听类则无此问题。
"关于序号的问题: 1、报表里面声明一个变量:a=0 2、序号:a=a+1 当增加监听类的时候,a=a+1 编号表达式无效,后续的所有序号都变成了 1,如果不增加监听类则无此问题。"
关于序号的问题:
1、报表里面声明一个变量:a=0
2、序号:a=a+1
当增加监听类的时候,a=a+1 编号表达式无效,后续的所有序号都变成了 1,如果不增加监听类则无此问题。
用的是报表监听类还是分页监听类?按道理监听类里获取到 ireport 都是计算后的结果,已经计算完成不会重置变量。
序号的话看下是否能改成其他形式,参考下这个 http://c.raqsoft.com.cn/article/1550803235243
是分页监听类,我们跟客服进行了沟通,我们的需求好像只能用变量的方式。
报表截个图看下,看下序号那块怎么弄的
不好意思,跟研发仔细沟通了一下,上面的场景是报表组场景下出现的问题,我们在报表组上设置了监听类,如下图所示:
在这个监听类中进行了报表的重新计算:IReport iReport = engine.calc(); 就会导致序号计算失效的问题,如果把这一行重新计算去掉,就可以正常生成序号了。
麻烦问一下,如何在重新计算的情况下,序号可以正常显示,谢谢。
即使重新计算那应该也是整张表的重新计算,序号还是会按照公式计算生成。把报表的截图以及展示后需要有问题的截图发下看看
您好,关于报表组的监听导致序号出现问题的情况,你们 QQ 技术支持 1002, 已经重现该问题,麻烦帮跟进解决一下,谢谢。
您好,这个问题是我们用户的生产环境出现的,比较影响用户的使用,用户催的比较急,能否辛苦今天帮我们解决一下,非常感谢。
企业 qq 复现的话会第一时间和研发沟通的,具体进度可关注下企业 qq 回复。
序号计算失效很正常,因为 engine.calc() 时报表里的 a=a+1 会导致 a 不停的加 1
我们目前的情况是,后续的所有序号都是 1, 没有变成顺序递增。
1、要勾选连续计算
2、报表中给 a 赋值的表达式是否只有 a=a+1
1、已经勾选了连续计算;
2、报表中给 a 赋值的表达式只有 a=a+1;
这个问题润乾的 QQ 客服已经复现了,他们正在解决,非常感谢您的回复。
这个问题是由于监听类里面的代码处理存在问题。
在侦听类里计算报表的时候,用 Context 时,应该由初始 context 生成,用 new Context(iniCtx),以避免其中的参数设置在计算报表后改变。
具体到这个问题,a 本来是报表中使用的临时变量,不存在于参数列表中的,但是在 listener 中执行计算后被添加到了 context 中,如果这时用的是初始 context,就被添加到了初始参数中。
报表的参数是作为“常量”使用的,这样在解析表达式的时候,会优化处理,对于常量是不必每次计算的,也就是说计算 B10 中 =if(一览表检测项目. 是否合格 ==‘实测值’,‘*’,a=a+1) 这个表达式的时候,a=a+1 会优先计算出来,前面 B6 中给 a 赋值为 0,这里 a=a+1 得到的结果就是 1,B10 中的表达式就会优化为 =if(一览表检测项目. 是否合格 ==‘实测值’,‘*’,1),再在每个扩展格中计算,而不是在每个扩展格中再去重复处理
作为测试,你可以试着单独计算子报表,添加一个参数 a=1,其实 a 的初始值是几都无所谓,因为报表里面有一个赋值,当然其实对参数赋值也是不安全的。执行后,序号就都会是 1 了。
在 listener 中如果执行报表项的预计算的话,不要直接用初始的 context 就好了
Context ctx = new Context(arg0);
再用
Engine engine = new Engine(rd, ctx);
IReport iReport = engine.calc();
就不会影响初始上下文 arg0 中的参数设定了。