反馈已提交

网络繁忙

动态切换年月日查询报表

  • 文档创建者:文档助手1
  • 历史版本:42
  • 最近更新:Fairy.Zhang 于 2024-11-14
  • 1. 概述

    1.1 版本

    报表服务器版本
    功能变更
    11.0-

    1.2 应用场景

    希望根据不同的报表类型查询处相应数据:

    • 报表类型为空时,查询所有数据;

    • 报表类型为年报时,出现年份选项,可查询相应的年份数据;

    • 报表类型为月报时,出现年份选项、月份选项,可查询相应年份的相应月份的数据;

    • 报表类型为日报时,出现年份选项、月份选项、日期选项,可查询相应年份的相应月份的相应日期的数据。

    如下图所示:

    2024-09-25_16-34-25.gif

    1.3 实现思路

    为 type 控件添加一个编辑结束事件,在事件处理函数中,使用 JavaScript 代码根据 type 控件的值来设置 year 、month 、date 控件的可见性:

    var Widget = _g().getParameterContainer().getWidgetByName("[ParaName]"); //通过控件名获取控件,其中ParaName为控件名
    Widget.setVisible(true);//设置该控件可见
    Widget.setVisible(false);//设置该控件不可见

    2. 示例

    2.1 新建报表

    点击菜单栏「文件>新建普通报表」,新建一张普通报表。如下图所示:

    新建普通报表.png

    2.2 准备数据

    新建数据库查询 ds1 ,输入 SQL 语句:

    SELECT * FROM 订单
    where 1=1
    ${if(type=="","", 
    if(type=="日报"," and date(订购日期)='"+ date +"'",
    if(type=="月报"," and strftime('%m',订单.订购日期)='"+ month+"'"+" and strftime('%Y',订单.订购日期)='"+ year+"'",
    " and strftime('%Y',订单.订购日期)='"+ year+"'")))}

    表示如果type为空,查询所有订单;如果type是 日报 ,则查询date参数指定的日期的订单;如果type是 月报 ,则查询monthyear参数指定的月份和年份的订单;如果type既不是 日报 也不是 月报 ,则查询year参数指定的年份的订单。如下图所示:

    准备数据.jpg

    2.3 设计报表

    1)A1-H1 单元格输入文本内容。

    2)A2-H2 单元格拖入相应的数据列,设计报表样式。如下图所示:

    设计报表.jpg

    2.4 参数绑定控件

    1)点击参数面板的编辑按钮进入参数面板编辑界面,将参数全部添加至参数面板。如下图所示:

    添加参数至参数面板.jpg

    2)参数date绑定日期控件,参数monthyeartype分别绑定下拉框控件。如下图所示:

    2024-09-25_14-33-41.gif

    3)调整控件的位置,从左到右依次为:Labeltype 、type 、Labelyear 、year 、Labelmonth 、month 、Labeldate 、date 及查询按钮。如下图所示:

    调整控件的位置.jpg

    2.5 设置控件

    2.5.1 标签控件

    1)依次设置标签控件 Labeltype 、Labelyear 、Labelmonth 、Labeldate 的控件值为「报表类型:」、「年份:」、「月份:」、「日期:」。

    2)Labeltype 控件勾选「可见」,其余三个标签控件均取消勾选「可见」。如下图所示:

    标签控件控件值.jpg

    2.5.2 下拉框控件

    1)设置参数控件 type 的数据字典,类型设置为「自定义」,实际值和显示值相同,为:年报 、月报 、日报 。如下图所示:

    type数据字典.jpg

    2)设置参数控件 year 的数据字典,类型设置为「自定义」,实际值和显示值相同,为:1996 、1997 、1998 、2010 、2011 。如下图所示:

    注:因订单表中只有 1996年 、1997年 、1998年 、2010年 、2011年 的数据,故设置数据字典为 1996 、1997 、1998 、2010 、2011 。

    year数据字典.jpg

    3)设置参数控件 month 的数据字典,类型设置为「自定义」,实际值和显示值相同,为:01-12 。如下图所示:

    month数据字典.jpg

    4)参数控件 year 的控件值设置为 1996 ,month 的控件值设置为 07 ,均取消勾选「可见」和「允许为空」。如下图所示:

    注:因订单表中的数据是从 1996 年 7 月 4 号开始的,故设置 year 的控件值设置为 1996 ,month 的控件值设置为 07 。

    year和month设置不可见和默认值.jpg

    2.5.3 日期控件

    参数控件 date 取消勾选「可见」和「允许为空」,控件值为 1996/07/04 。如下图所示:

    注:因订单表中的数据是从 1996 年 7 月 4 号开始的,故设置 date 的控件值设置为 1996/07/04 

    date取消勾选允许为空.jpg

    2.6 添加编辑结束事件

    1)为 type 控件添加编辑结束事件实现动态切换年月日查询。如下图所示:

    type编辑结束事件.jpg

    JavaScript 代码如下所示:

    var yearWidget = _g().getParameterContainer().getWidgetByName("year");//获取year控件的值
    var monthWidget = _g().getParameterContainer().getWidgetByName("month");//获取month控件的值
    var dateWidget = _g().getParameterContainer().getWidgetByName("date");//获取date控件的值
    var LabelyearWidget = _g().getParameterContainer().getWidgetByName("Labelyear");//获取Labelyear控件的值
    var LabelmonthWidget = _g().getParameterContainer().getWidgetByName("Labelmonth");//获取Labelmonth控件的值
    var LabeldateWidget = _g().getParameterContainer().getWidgetByName("Labeldate");//获取Labeldate控件的值
    var value = this.getValue(); //获取当前控件即type控件的值
    //判断当前控件的值,根据判断结果显示或隐藏其他控件
    if (value == "日报") {
    yearWidget.setVisible(true);
    LabelyearWidget.setVisible(true);
    monthWidget.setVisible(true);
    LabelmonthWidget.setVisible(true);
    dateWidget.setVisible(true);
    LabeldateWidget.setVisible(true);
    } else if (value == "月报") {
    yearWidget.setVisible(true);
    LabelyearWidget.setVisible(true);
    monthWidget.setVisible(true);
    LabelmonthWidget.setVisible(true);
    dateWidget.setVisible(false);
    LabeldateWidget.setVisible(false);
    } else if (value == "年报") {
    yearWidget.setVisible(true);
    LabelyearWidget.setVisible(true);
    monthWidget.setVisible(false);
    LabelmonthWidget.setVisible(false);
    dateWidget.setVisible(false);
    LabeldateWidget.setVisible(false);
    } else {
    yearWidget.setVisible(false);
    LabelyearWidget.setVisible(false);
    monthWidget.setVisible(false);
    LabelmonthWidget.setVisible(false);
    dateWidget.setVisible(false);
    LabeldateWidget.setVisible(false);
    }

    2)为 year 控件添加编辑结束事件实现与日期控件联动。如下图所示:

    year控件编辑结束事件.jpg

    JavaScript 代码如下所示:

    // 获取年份和月份下拉框的值
    var year = _g().getParameterContainer().getWidgetByName("year").getValue();
    var month = _g().getParameterContainer().getWidgetByName("month").getValue();
    // 构造日期字符串
    var dateStr = year + '-' + month + '-01';
    // 获取日期控件
    var dateWidget = _g().getParameterContainer().getWidgetByName("date");
    // 设置日期控件的值
    dateWidget.setValue(dateStr);

    3)为 month 控件添加编辑结束事件实现与日期控件联动。JavaScript 代码与为 year 控件添加的编辑结束后事件的JavaScript 代码相同。如下图所示:

    month控件编辑结束事件.jpg

    2.7 效果预览

    注:不支持移动端。

    PC 端效果如 1.2 节所示。

    3. 下载模板

    点击下载已完成模板:动态切换年月日查询报表.cpt

    附件列表


    主题: 参数应用
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持