FineReport制作任务日历

文章目录

    • 概要
    • 整体架构流程
    • 技术名词解释
    • 技术细节
    • 小结

概要

博主接触FineReport帆软报表有一段时间了,正好前几天做了一个任务日历的需求,把每天完成的任务量直观的展示在日历上,方便管理者更好的监控各业务的完成情况,做完后想着和大家分享一下博主的心得体会。项目整体效果如下图所示:
FineReport制作任务日历_第1张图片

整体架构流程

项目整体使用 FineReport v11.0 里的决策报表和普通报表进行设计,其中报表数据集的编写可能涉及到数据库 SQL 语句,还有在报表中使用的相关函数。

技术名词解释

如果是刚接触帆软报表的同学可以点击下方链接,查看官方文档说明

  • FineReport v11.0
  • 决策报表
  • 数据集

技术细节

  1. 添加模板参数
    FineReport制作任务日历_第2张图片
    (1)点击“+”添加三个模板参数 a,b,c,参数名字可以按照大家习惯取,默认值分别设置为公式:FORMAT(TODAY(), "yyyy-MM")FORMAT(MONTHDELTA(TODAY(),1), "yyyy-MM")FORMAT(MONTHDELTA(TODAY(),-1), "yyyy-MM"),点击确定。
    FineReport制作任务日历_第3张图片

  2. 打开设计器后,在顶部的导航栏点击"文件"->“新建决策报表(F)”,如下图所示:
    FineReport制作任务日历_第4张图片

  3. 随后点击"新建空白模板",如下图所示:
    FineReport制作任务日历_第5张图片

  4. 然后在空白模板上方的功能区找到新建Tab块(空白块->Tab块,鼠标放上去按住左键拖到下方空白处),如下图所示:
    FineReport制作任务日历_第6张图片

  5. 双击新建好的Tab块页面,进入编辑设计,然后点击上面的"+"添加标题,如下图所示:
    FineReport制作任务日历_第7张图片

  6. 拖动"新建Tab块"的旁边功能按钮为每个Tab块添加"报表块",其它几个Tab块同样的操作,如下图所示:
    FineReport制作任务日历_第8张图片

  7. 双击“报表块”,进入报表设计页面,页面设计参考图如下:
    FineReport制作任务日历_第9张图片
    将不需要显示的行和列进行隐藏后,最后界面如下:
    FineReport制作任务日历_第10张图片

  8. 在页面合适位置合并几列单元格用来放年月,然后点击合并后的单元进行如下设置:
    FineReport制作任务日历_第11张图片

  9. 在年月的左边,我们要设置点击切换到上月的链接,切换下月同理,如图所示:
    FineReport制作任务日历_第12张图片

  10. 点击编辑进行”条件属性“设置,其中”背景“设置为图片:
    FineReport制作任务日历_第13张图片

  11. “超级链接类型"设置为"动态参数”:
    FineReport制作任务日历_第14张图片

参数
a $c
c FORMAT(MONTHDELTA($c+“-”+“01”,-1), “yyyy-MM”)
b FORMAT(MONTHDELTA($c+“-”+“01”,1), “yyyy-MM”)

右边单元格的超级链接设置同理,只不过将参数值改成下表:

参数
a $b
b FORMAT(MONTHDELTA($b+“-”+“01”,1), “yyyy-MM”)
c FORMAT(MONTHDELTA($b+“-”+“01”,-1), “yyyy-MM”)
  1. 在星期的上面添加一行,其中B4单元格插入公式:DAY(DATEINMONTH((E2 + "-01"), -1))
    FineReport制作任务日历_第15张图片
    右边放上周几对应的数字,方便计算日期:
    FineReport制作任务日历_第16张图片

  2. C7单元格插入公式:IF(WEEKDAY(E2 + "-01") = 1, 1, ""),这里的主要目的是根据当前月的1日是不是周一,是的话就显示“1”,不是则显示为空。
    FineReport制作任务日历_第17张图片
    D7单元格插入公式:IF(LEN(C7) <> 0, C7 + 1, IF(WEEKDAY(E2 + "-01") = 2, 1, "")),目的同上。
    E7单元格插入公式:IF(LEN(D7) <> 0, D7 + 1, IF(WEEKDAY(E2 + "-01") = 3, 1, "")),目的同上。
    F7单元格插入公式:IF(LEN(E7) <> 0, E7 + 1, IF(WEEKDAY(E2 + "-01") = 4, 1, "")),目的同上。
    G7单元格插入公式:IF(LEN(F7) <> 0, F7 + 1, IF(WEEKDAY(E2 + "-01") = 5, 1, "")),目的同上。
    H7单元格插入公式:IF(LEN(G7) <> 0, G7 + 1, IF(WEEKDAY(E2 + "-01") = 6, 1, "")),目的同上。
    I7单元格插入公式:IF(LEN(H7) <> 0, H7 + 1, IF(WEEKDAY(E2 + "-01") = 0, 1, "")),目的同上。

  3. 下面C8单元格插入公式:format(IF(LEN(C7) = 0, "", eval("E" + "2") + "-" + C7), "yyyy-MM-dd"),目的是计算C7对应的日期,因为下面任务计划全部要根据这个日期进行数据查询。
    FineReport制作任务日历_第18张图片
    D8单元格插入公式:format(IF(LEN(D7) = 0, "", eval("E" + "2") + "-" + D7), "yyyy-MM-dd"),目的同上。
    E8单元格插入公式:format(IF(LEN(E7) = 0, "", eval("E" + "2") + "-" + E7), "yyyy-MM-dd"),目的同上。
    F8单元格插入公式:format(IF(LEN(F7) = 0, "", eval("E" + "2") + "-" + F7), "yyyy-MM-dd"),目的同上。
    G8单元格插入公式:format(IF(LEN(G7) = 0, "", eval("E" + "2") + "-" + G7), "yyyy-MM-dd"),目的同上。
    H8单元格插入公式:format(IF(LEN(H7) = 0, "", eval("E" + "2") + "-" + H7), "yyyy-MM-dd"),目的同上。
    I8单元格插入公式:format(IF(LEN(I7) = 0, "", eval("E" + "2") + "-" + I7), "yyyy-MM-dd"),目的同上。

  4. 然后最关键的来了,添加你想要监控的任务指标,通过查询数据集结果,然后设置单元格属性和过滤条件(这里C9、C10、C11的过滤日期根据上面C8的值进行对应),目的让该单元格只显示当前日期的任务。其它的同理。
    FineReport制作任务日历_第19张图片

  5. 下面C12单元格插入公式:eval("I" + "7") + C4,目的是根据根据上一行的周日日期加上对应的时间间隔来计算这个日期。后面同理。
    FineReport制作任务日历_第20张图片

  6. 关键点来了,C27格开始,我们就要判断日期是否结束了,插入公式:IF((eval("I" + "22") + C4) > eval("B" + "4"), "", (eval("I" + "22") + C4)),其中C4单元格插入公式为:DAY(DATEINMONTH((E2 + "-01"), -1))。后面的同理。

  7. 最后,给每个日期单元格增加一个条件属性,添加一个背景属性,其作用是当前日期显示颜色背景,然后公式条件如下:FORMAT(E2 + "-" + $$$, "yyyy-MM-dd") = format(TODAY(), "yyyy-MM-dd")。其它单元格同理。
    FineReport制作任务日历_第21张图片

小结

提示:这里可以添加总结

例如:

提供先进的推理,复杂的指令,更多的创造力。

你可能感兴趣的:(FineReport,帆软报表,1024程序员节)