找文章 / 找答案
精选问答 更多内容

[报错信息处理] 在脚本里调用today函数报错

zhhony白银一 显示全部楼层 发表于 2022-8-22 09:50:33 |阅读模式 打印 上一主题 下一主题
1
已解决
本帖最后由 root 于 2022-8-22 10:10 编辑

版本:9.4.2.2桌面版
PS:问题一解决了,是我应该在前面的某段代码里把today作为变量名给覆盖掉了。关了软件重新进去这段代码就可以运行了。



PS:请帮忙看一下问题二



一、我尝试在脚本里面调用today(),目的是取当前系统日期,并赋值给我的globalDataSelect日期过滤控件。但是我遇到了报错。

源代码我贴一下:

  1. function transformStrByTime(timeStr) { //将文本字符串类转化为时间类
  2.     timeStrList = timeStr.split('-')
  3.     var year = Number(timeStrList[0]);
  4.     var month = Number(timeStrList[1]);
  5.     var day = Number(timeStrList[2]);
  6.     return date(year, month, day);
  7. }

  8. function getGlobalDateSelectTime(bar, flag) { //获取日期过滤组件的值
  9.     var year;
  10.     var month;
  11.     var day;
  12.     if (flag == 'start') {
  13.         var TimFroBar = right(bar.firstDates[0], len(bar.firstDates[0]) - 1);
  14.         var TimFroBarList = TimFroBar.split('-');
  15.     } else if (flag == 'end') {
  16.         var TimFroBar = right(bar.secondDates[0], len(bar.secondDates[0]) - 1);
  17.         var TimFroBarList = TimFroBar.split('-');
  18.     }
  19.     year = Number(TimFroBarList[0]);
  20.     month = Number(TimFroBarList[1]) + 1;
  21.     day = Number(TimFroBarList[2]);
  22.     TimFroBar = date(year, month, day);
  23.     return TimFroBar
  24. };

  25. function getCurrentDateSourceTime(bar, flag) { //获取日期范围控件的值
  26.     if (flag == 'start') {
  27.         return bar.getSelectedObjects()[0]
  28.     } else if (flag == 'end') {
  29.         return bar.getSelectedObjects().slice(-1)[0]
  30.     }
  31. }

  32. function switching(key) { //输入0的时候返回1,输入1的时候返回0
  33.     return -key + 1
  34. }

  35. //定义左上角时间控件的值
  36. var currentDate = now();
  37. globalDateNow.data = '当前日期:' + formatDate(currentDate, "yyyy年MM月dd日 HH点mm分");

  38. //定义报告期间的起始和结束日期
  39. var theDayofToday = today(); //  <--------------------------------------------------------------------------------<<<<<报错的行<<<<<
  40. globalDataSelect.secondDates = ["t" + currentDate] ; //最终日期;
  41. globalDataSelect.firstDates = eomonth(currentDate, 1) ; //起始日期

  42. //获取报告期间的起始和结束时间
  43. param["globalDataSelectByfirst"] = getGlobalDateSelectTime(globalDataSelect, 'start');
  44. param["globalDataSelectBySecond"] = getGlobalDateSelectTime(globalDataSelect, 'end');

  45. //让currentDateSource控件包含最小值
  46. currentDateSource.includeMin = true;

  47. //获取currentDateSource控件选择的最小值和最大值
  48. param["currentDateSourceByStart"] = getCurrentDateSourceTime(currentDateSource,'start');
  49. param["currentDateSourceByEnd"] = getCurrentDateSourceTime(currentDateSource,'end');

  50. var imageKey = 0;
  51. currentDateSourceMode.image = '家庭账本/mode' + imageKey + '.png';
  52. currentDateSourceModeLab.data = '吼';

复制代码
不知道是什么情况这是。

二、另外我发现一个不知道是不是bug的问题
我尝试调取日期控件的firstDates和secondDates方法,目的是取控件所选择的两个日期,但是我发现返回的月份一直都比选择的月份少一个月,导致我不得不在函数里给月份+1(详解上面代码的getGlobalDateSelectTime函数),不知道是本来就这么设计的,还是说是一个bug。


最佳答案

社区管理员
yhdata_yzm 关注Ta

2022-08-22 09:50:34

https://www.yonghongtech.com/help/Z-Suite/9.4/ch/datefilterscript.html#datefilterformat 你看看这个月份是0-11所以都要加1的
查看完整内容
回复

使用道具 举报

精彩评论12

yhdata_yzm 显示全部楼层 发表于 2022-8-22 09:50:34
root 发表于 2022-8-22 10:26
bar我放在那里是想代表日期过滤组件。
使用起来我是这么使用的

https://www.yonghongtech.com/hel ... ml#datefilterformat 你看看这个月份是0-11所以都要加1的
回复

使用道具 举报

yhdata_yzm 显示全部楼层 发表于 2022-8-22 10:03:18
函数这么写没错啊!
回复

使用道具 举报

zhhony白银一 显示全部楼层 发表于 2022-8-22 10:06:04
yhdata_yzm 发表于 2022-8-22 10:03
函数这么写没错啊!

你是说那个today是吧,对啊,就一个简单的函数调用,不知道为啥会报错
回复

使用道具 举报

zhhony白银一 显示全部楼层 发表于 2022-8-22 10:08:28
yhdata_yzm 发表于 2022-8-22 10:03
函数这么写没错啊!

噢找到原因了,我应该是不小心把today重新赋值了,关了软件重开就没事了
回复

使用道具 举报

lwaaa白银三 显示全部楼层 发表于 2022-8-22 10:08:54
是把函数识别成你写的脚本,可以把today删除,然后在函数中双击选中today,看看;或者直接把你这一行放到最上面一行看看
回复

使用道具 举报

zhhony白银一 显示全部楼层 发表于 2022-8-22 10:12:06
lwaaa 发表于 2022-8-22 10:08
是把函数识别成你写的脚本,可以把today删除,然后在函数中双击选中today,看看;或者直接把你这一行放到最 ...

嗯,问题一搞定了,是我写的问题。现在就问题二不知道是啥情况。
回复

使用道具 举报

lwaaa白银三 显示全部楼层 发表于 2022-8-22 10:22:42
root 发表于 2022-8-22 10:12
嗯,问题一搞定了,是我写的问题。现在就问题二不知道是啥情况。

函数 中 bar是什么,从哪里来的 bar.firstDates[0],这个是不是有问题
回复

使用道具 举报

zhhony白银一 显示全部楼层 发表于 2022-8-22 10:26:52
本帖最后由 root 于 2022-8-22 10:38 编辑
lwaaa 发表于 2022-8-22 10:22
函数 中 bar是什么,从哪里来的 bar.firstDates[0],这个是不是有问题

bar我放在那里是想代表日期过滤组件。我在设计器里有个叫globalDataSelect的日期过滤组件。bar本身没有firstDates,但是globalDataSelect有。但是如果我把日期控件赋值给了bar,也就是bar = globalDataSelect。那么globalDataSelect的方法应该就能给bar调用了吧


我不太懂js,我是用python的编程思路去理解的,不知道这么使用对不对。
使用起来我是这么写的
  1. param["globalDataSelectByfirst"] = getGlobalDateSelectTime(globalDataSelect, 'start');
复制代码
传入日期过滤组件globalDataSelect,以及关键词'start',然后执行start对应的那部分代码。
回复

使用道具 举报

zhhony白银一 显示全部楼层 发表于 2022-8-22 10:39:41
yhdata_yzm 发表于 2022-8-22 10:36
https://www.yonghongtech.com/help/Z-Suite/9.4/ch/datefilterscript.html#datefilterformat 你看看这个 ...

哈哈,好的,我还以为是bug。
回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 免费注册

  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
50W

会员等你来哦

Copyright   ©2012-2024  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
返回顶部