FVS的组件标签用js获取sql中的字段展示,但是不会跟据时间动态变化

function(){ 

 var fenlei = FR.remoteEvaluate("value('首页-期间费用','分类','分类','"+this.category+"')");

  var absshiji = FR.remoteEvaluate("value('首页-期间费用','实际值绝对值','分类','"+this.category+"')");

  var absshiji= (absshiji*1).toFixed(2);

 var shijifh = FR.remoteEvaluate("value('首页-期间费用','实际负数标识','分类','"+this.category+"')");

  var yusuanfh = FR.remoteEvaluate("value('首页-期间费用','预算负数标识','分类','"+this.category+"')");

var absyusuan = FR.remoteEvaluate("value('首页-期间费用','预算绝对值','分类','"+this.category+"')");

var absyusuan =(absyusuan *1).toFixed(2);  

 return fenlei+':'+shijifh+absshiji+'/'+yusuanfh+absyusuan;}

image.png

数据集里面给时间绑定的参数默认值标签会展示,但是把默认值删除用时间控件赋值就展示0,把时间等于空的结果放到标签里了

image.png

image.png

image.png

image.png

image.png

FineReport yzm158840 发布于 2025-6-20 10:46 (编辑于 2025-6-20 11:11)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共6回答
最佳回答
0
yzm158840Lv3见习互助
发布于2025-6-24 11:21

function(){ 

 var fenlei = FR.remoteEvaluate("value('首页-期间费用','分类','分类','"+this.category+"')");

  var absshiji = FR.remoteEvaluate("value('首页-期间费用','实际值绝对值','分类','"+this.category+"')");

  var absshiji= (absshiji*1).toFixed(2);

 var shijifh = FR.remoteEvaluate("value('首页-期间费用','实际负数标识','分类','"+this.category+"')");

  var yusuanfh = FR.remoteEvaluate("value('首页-期间费用','预算负数标识','分类','"+this.category+"')");

var absyusuan = FR.remoteEvaluate("value('首页-期间费用','预算绝对值','分类','"+this.category+"')");

var absyusuan =(absyusuan *1).toFixed(2);  

 return fenlei+':'+shijifh+absshiji+'/'+yusuanfh+absyusuan;}

把js代码FR.remoteEvaluate换成duchamp.remoteEvaluate就可以动态获取到值了

最佳回答
0
用户k6280494Lv6专家互助
发布于2025-6-20 10:50

不用value 用ds1.select()函数试试呢

最佳回答
0
snrtuemcLv8专家互助
发布于2025-6-20 10:50

这个你要用sql()函数,直接数据库获取,value()数据集获取不生效的

  • yzm158840 yzm158840(提问者) sql()这个里面是直接写sql语句吗,可以动态传参数${q}这种吗?
    2025-06-20 10:53 
  • snrtuemc snrtuemc 回复 yzm158840(提问者) 是的,例如
    var fenlei = FR.remoteEvaluate("sql('数据库连接名','select 字段 from 表 where 分类='"+this.category+"'',1,1)");
    2025-06-20 10:58 
最佳回答
0
ScyalcireLv7高级互助
发布于2025-6-20 10:52(编辑于 2025-6-20 10:53)

‌使用ds1.select()或sql()函数‌:

  • 替代FR.remoteEvaluate("value(...)"),直接使用ds1.select()或sql()函数从数据库获取数据。

---------

  • 方法一:ds1.select()示例:var data = ds1.select("SELECT * FROM table WHERE date = '" + this.timeControlValue + "'");

  • 方法二:sql()函数示例(需确保SQL语句正确,并考虑SQL注入风险):var data = sql("SELECT * FROM table WHERE date = '{0}'", this.timeControlValue);

最佳回答
0
技术支持--哈哈Lv4初级互助
发布于2025-6-20 10:56
  1. 问题核心原因

    • 当前JS代码直接调用FR.remoteEvaluate获取数据,但未处理时间参数为空的情况

    • 时间控件绑定参数后,删除默认值会导致参数传空值到SQL查询中

  2. 解决方案方法一:使用FVS时间组件替代JS动态获取

    方法二:修正JS逻辑修改代码增加参数校验逻辑:


    function(){

    // 先校验时间参数是否有效

    if(!this.starttime || !this.endtime) return "请选择时间范围";



    var fenlei = FR.remoteEvaluate("value('首页-期间费用','分类','分类','"+this.category+"')");

    var absshiji = FR.remoteEvaluate("value('首页-期间费用','实际值绝对值','分类','"+this.category+"')");

    // 其余逻辑保持不变...

    }
    • 新增「时间组件」自动获取客户端本地时间(无需JS轮询)时间组件效果

  3. 时间控件配置要点

    • 必须设置日期时间控件的默认值(如示例中的2011-05-22)控件配置示例

  4. 版本兼容性

    • 确保使用V2.2.0及以上版本(该版本新增时间组件)

建议优先采用「时间组件」方案,可避免JS轮询造成的服务器压力问题。如需保留当前实现,务必在SQL中增加对空参数的默认值处理。

最佳回答
0
CD20160914Lv8专家互助
发布于2025-6-20 13:18
  • yzm158840 yzm158840(提问者) 不管用
    2025-06-20 14:28 
  • CD20160914 CD20160914 回复 yzm158840(提问者) 你设置有问题吧,参数变了。你看看数据集的数据到底变没有?
    2025-06-20 14:31 
  • yzm158840 yzm158840(提问者) 回复 CD20160914 有变化啊
    2025-06-20 14:33 
  • CD20160914 CD20160914 回复 yzm158840(提问者) 你换成普通的柱形图看看。不用你现在这个图表
    2025-06-20 14:56 
  • 7关注人数
  • 105浏览人数
  • 最后回答于:2025-6-24 11:21
    请选择关闭问题的原因
    确定 取消
    返回顶部