有关EAS-BOS二次开发的各类问题(四):扩展报表开发常用公式和脚本及常用扩展报表的解决方案的样例原创
金蝶云社区-HN_刘敏
HN_刘敏
59人赞赏了该文章 686次浏览 未经作者许可,禁止转载编辑于2024年12月07日 10:53:50
summary-icon摘要由AI智能服务提供

本文介绍了金蝶EAS扩展报表开发中的关键技术,包括常用公式与脚本的使用,如数据集中拼接问号实现灵活筛选、日期条件的写法、财务公式的应用、参数传递与查询、日期区间展示、条件判断及报表与单据的链接等,旨在帮助开发人员提升报表开发的效率与质量。

首编于:2024年10月18日

关键词:扩展报表、常用公式、脚本、扩展报表解决方案样例

 

前言:

在金蝶 EAS 的扩展报表开发进程中,开发人员只有熟练掌握一系列关键技术与方法,方能高效、精准地创建出满足业务需求的报表。从数据筛选到条件设置,从公式运用再到与单据的链接,每一个环节都对报表的质量与功能起着至关重要的作用。本文列举了在 EAS 扩展报表开发中可能频繁用到的一些常用公式与脚本,希望能助力金蝶码友们能更好地理解并运用扩展报表功能,从而有效提升报表开发的效率与质量。


扩展报表开发常用公式和脚本

1、扩展报表的数据集中拼接“?”问号的格式参考:

WHERE (CUSTOMERID IN ('@customer') OR ? IS NULL) 

AND (PROJECTID IN ('@project') OR ? IS NULL)  

AND (PROJECTMAN = '@projectmanager'   OR ? IS NULL )


通过这样在每个关键筛选条件后面使用 OR? IS NULL 的格式拼接,整体上构建了一种较为灵活的筛选机制。它既能够在各项条件有明确指定值时按照精准要求筛选出符合条件的数据,又可以在某些条件值缺失(为 NULL )的情况下,依然可以合理地把相关的数据包含到报表数据集当中,避免因部分筛选条件的不完整性而导致数据提取出现偏差或数据缺失过多的问题


2、日期条件写法参考:

  •    BILLBIZDATE >= {ts'@beginDate'}

  • ts 表示这是一个时间戳(timestamp)类型的值,而 @beginDate 是一个参数占位符


  •  BILLBIZDATE >= to_date('@beginDate')

  • to_date('@beginDate') 会将 @beginDate 所代表的字符型日期按照数据库默认或指定的日期格式转换为日期型数据

  

  •  根据年、月参数,返回  该年月1号参考:

      BILL.FBIZDATE >= to_date('@beginYear-@beginMon-01')   

  • 语句中的 '@beginYear-@beginMon-01' 这部分,是先将 @beginYear 和 @beginMon 这两个参数按照特定的格式(中间用 “-” 连接)与固定的 “01”(代表每月的 1 号)进行字符串拼接,然后通过to_date 将这个字符型的日期表示转换为数据库能够识别并用于比较操作的日期型数据


  • 根据年、月参数,返回下月1号

    BILL.FBIZDATE <  dateadd(m,1,  to_date('@endYear-@endMon-01')  

  •  与上一点类似,dateadd() 函数,它的作用是在日期上进行加法运算。其中 m 表示要添加的时间单位是月,1 表示添加的数量为 1 个月。以 2024-12-01 为例,经过 dateadd(m,1, 2024-12-01) 运算后,得到的结果就是 2025-01-01,即下个月的 1 号


  • 当过滤条件是选择某一期时的SQL可以这样写:

   year(bill.FCLEARDATE)='@years'  and  month(bill.FCLEARDATE)='@mon'

image.png

image.png

  • year() 函数:该函数用于从日期类型的列 bill.FCLEARDATE 中提取出年份部分。例如,如果 bill.FCLEARDATE 中的日期是 2024-11-15,那么 year(bill.FCLEARDATE) 将返回 2024

  • month() 函数:与 year() 函数类似,month() 函数用于从日期类型的列 bill.FCLEARDATE 中提取出月份部分。对于 2024-11-15 这个日期,month(bill.FCLEARDATE) 将返回 11



3、扩展报表中使用财务公式样例

=acct(FIELD(教建项目可用资金余额, 公司编码), CONCATENATE("2241.18|00011|", FIELD(教建项目可用资金余额, 成本项目编码)), "JF", 2023, 5, 2023, 5, "", "Company")

=acct(N4,"2202","y",L2,M1,N1,N3"BB01")

image.png

  • 通过acct函数结合其他辅助函数和参数,从财务系统中获取特定条件下的财务数据,并将其填充到报表的相应位置,以实现财务数据的动态展示和分析



4、在扩展报表中使用参数

  • =SELECT1(QUERY(客户简称, {"customerNumber", A4}), FSIMPLENAME)

       customerNumber是在数据集中定义的参数


image.png

  • QUERY函数主要用于在报表的数据集中根据特定条件进行数据查询操作

  • SELECT1函数功能概述:该函数一般用于从QUERY函数查询得到的结果集中进一步筛选或提取特定的内容。


5、在扩展报表中使用多个参数这样传,参考如下:

  • =IF(B7 = "", "", SELECT1(QUERY(其他应收金额, {"customer", A7, "beginDate", B7}), FOTHERAMT))


  • =SUM(FIELDS(HZ借款本息明细_8_本年归还本息_利息, BENNIANGHLIXI, AND(ZHAIQUANNUM = $A5, ZHAIWUNAME = $D5)))


  • =IF(A4 = "", "", SELECT1(QUERY(仓库汇总期初, {"storid", K3, "beginYear", K1, "endYear", L1, "beginMOn", K2, "endMOn", L2, "ware", $A4}), BALANCEQTY))


  • =SUM(FIELDS(日要货计划表, QTY, AND(MATNUM = S10, CUSGPNUM = A11)))


  • 这些表达式通过各种函数组合,利用不同的参数进行条件设定、数据筛选以及相应的计算(求和、提取特定值等)操作,根据报表中的具体参数值以及业务逻辑要求,准确地获取和展示所需的各类数据信息,满足扩展报表多样化的数据呈现和分析需求


 6、根据参数的开始结束日期在扩展报表中显示日期参考:

  • ="从" &TEXT(@begindate, "yyyy-mm-dd") & "到" &TEXT(@enddate, "yyyy-mm-dd")


  • =ARRAYTEXT({"-", "[", "]"}, TEXT(A1, "yyyy-mm-dd"), "到", TEXT(A2, "yyyy-mm-dd"))
  • 这两个表达式都是借助相关函数将日期参数或单元格中的日期数据转换为指定格式的文本,并通过合理的拼接、组合等方式,构造出能清晰展示日期范围的文本内容,以满足扩展报表中对日期区间展示的需求


7、扩展报表中判断两个条件是否为空用or

  • =IF(OR(P3 = "", J3 = ""), "", DATEDIF(J3, P3, "D"))

  • 整个表达式先通过 OR 函数判断两个关键单元格是否为空,再利用 IF 函数依据这个判断结果决定是否进行后续的日期差值计算,以此实现了在扩展报表中根据特定单元格日期数据完整性来灵活计算并展示日期差值的功能,避免了因日期数据缺失而可能导致的错误计算情况


8、扩展报表链接到单据

image.png


9、找到具体扩展报表开发的位置

select * from T_BAS_DefineReport where fname_l2 like '%质检月报表%'

查找这个表,里面有一个组织,要切换到该组织下,然后查找就出来了

image.png


以下是几个常用扩展报表需求的解决方案参考样例:


EAS扩展报表:根据选择的日期动态显示当月所有日期:https://vip.kingdee.com/link/s/lav1i


EAS扩展报表里的序号怎么实现:https://vip.kingdee.com/link/s/l2RUr


EAS扩展报表中取另一个页签中数据集中的值,该怎么取:https://vip.kingdee.com/link/s/lwMxt



附:扩展报表在线帮助中心:https://bos.kingdee.com/ext/support/index.jsp



持续更新中,敬请期待~~~欢迎指正






图标赞 59
59人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!