finereport中,让填报表的下拉框控件显示本年第几周,并和日期控件相关联

如下图

①我想让红色的下拉框里面的数据是第1周、第2周、第3周、第4周,以此类推到第53周

②当我勾选第45周时,左边的日期控件开始日期自动跳转成2019-11-03,结束日期自动跳转成2019-11-10


求大神指教(#^.^#)先谢谢啦

image.png

FineReport 楚小白 发布于 2019-11-22 08:48
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
shirokoLv6资深互助
发布于2019-11-22 14:43(编辑于 2019-11-25 10:27)

从你题意来推断?

  1. 开始日期是第一天,结束日期是第八天,(一周以周日开始作为第一天)

  2. 1月1号固定算第一周,即使不是完整的一周,也就是2019的第一周是2019-12-30到2019-01-05,第八天则是2019-01-06

按以上条件作出这个报表。

第几周cpt.cpt

如果有偏差,自己改改吧


image.png

  • 楚小白 楚小白(提问者) 您好,我按照你提供的cpt打开,复制你的公式,设置都相同,但是显示的数据不同呐,刚好差了7天,不知道为什么 你的cpt文件,我打开,选择 47周,开始日期=11月17日,结束日期=11月23日刚好是我要的 我复制你的开始日期、结束日期公式、下拉框公式以后,我的开始日期=11月25日,结束日期=12月1日 不知道为什么这样,唯一有一点不同的是,我的开始日期和结束日期,不是直接选择的日期而且设置的两个参数,date1和date2
    2019-11-25 09:24 
  • shiroko shiroko 回复 楚小白(提问者) 你的系统,星期开始时间是周一不是周日吧。
    2019-11-25 10:26 
  • 楚小白 楚小白(提问者) 回复 shiroko 谢谢,我查了,我的系统设置的周开始时间就是周日; 我现在的情况是出来的结果和你的错开了7天(一周)的时间,不是错开1天 ┭┮﹏┭┮(*^▽^*)
    2019-11-25 11:43 
  • shiroko shiroko 回复 楚小白(提问者) 那你就自己改公式把weeknum加一或者减1,可以用就行了
    2019-11-25 12:55 
  • 楚小白 楚小白(提问者) 回复 shiroko o(╥﹏╥)o 不知道是我的电脑问题还是FR问题,因为我现重新导你的文件进去,预览出来的结果都不对了
    2019-11-25 15:01 
最佳回答
0
No1-王子阳Lv5中级互助
发布于2019-11-22 09:03

你自己做一个表来维护吧,这样能达到你要的效果。

最佳回答
0
CD20160914Lv8专家互助
发布于2019-11-22 09:38

45周的开始日期不是2019-11-04吗?

还有第1周的话开始日期是2018-12-31号?

  • 楚小白 楚小白(提问者) 开始日期是11月3日,周天算一个星期的第一天呢
    2019-11-22 13:12 
最佳回答
0
fofantasyLv5初级互助
发布于2019-11-22 09:53(编辑于 2019-11-22 13:52)

WorkBook11.cpt

给你的方法,供你参考:

前提:周默认指的是当前年的周。

假设:

开始日期控件名为sdate,结束日期控件名为edate

周列表我这用的是一个纯数字的下拉菜单,如果要改成“第xx周”,也可以根据下面的方法,再完善。


设置“周”下拉菜单的“编辑后”事件JS为:

var value=this.getValue(); 
var gs1="=format(DATEINWEEK(DATEDELTA(today(),("+value+"-week(today()))*7),1),\"yyyy-MM-dd\")";
var gs2="=format(DATEINWEEK(DATEDELTA(today(),("+value+"-week(today()))*7),-1),\"yyyy-MM-dd\")";
var sdate=FR.remoteEvaluate(gs1);
var edate=FR.remoteEvaluate(gs2);
this.options.form.getWidgetByName("sdate").setValue(sdate);
this.options.form.getWidgetByName("edate").setValue(edate);

image.png


说明:

因为FR的公式没有直接可以通过周数推算出开始和结束日期的(可能是我了解有限),所以改成根据当前日期today()的周数与目标周数(默认为当前年)的差值,通过DATEDELTA()计算出目标周数中的一个日期。

然后再通过公式DATEINWEEK(),计算出目标周的开始和结束日期。

PS:这里是在JS中使用了FR内置公式进行的计算,JS高手也可以直接用JS计算。

最后再通过JS给“开始日期”和“结束日期”控件赋值。

  • 楚小白 楚小白(提问者) 大神你好,我按照你的操作来了,但还是不太会,方便加QQ帮我看一下吗?Thanks♪(・ω・)ノ谢谢
    2019-11-22 13:22 
  • 楚小白 楚小白(提问者) 或者您可以把写好的这个 cpt文件发给我一下吗,我导入FR里面自己看下然后照着做
    2019-11-22 13:25 
  • fofantasy fofantasy 回复 楚小白(提问者) 模板上传到上面答案里了。
    2019-11-22 13:53 
  • 楚小白 楚小白(提问者) 回复 fofantasy 谢谢您传的cpt文件,我想要每周天作为一周的开始,比如 第46周的日期是2019年11月10日-2019年11月16日,但您的第46周我选择了出来的是 11月18日-11月24日,不知道为什么会这样
    2019-11-25 09:39 
  • fofantasy fofantasy 回复 楚小白(提问者) 这个就是不同系统里计算的方式不同了,在FR里2019年11月11日这周就是是第45周,在mysql里也是第45周。 sqlserver里是第46周。 关于周数和以周日为开始,这个你可以按照你的标准,修改一下公式就行了,+1或者-1。
    2019-11-25 13:43 
  • 5关注人数
  • 1161浏览人数
  • 最后回答于:2019-11-25 10:27
    请选择关闭问题的原因
    确定 取消
    返回顶部