=acct(FIELD(教建项目可用资金余额, 公司编码), CONCATENATE("2241.18|00011|", FIELD(教建项目可用资金余额, 成本项目编码)), "JF", 2023, 5, 2023, 5, "", "Company")
=acct(N4,"2202","y",L2,M1,N1,N3"BB01")
本文介绍了金蝶EAS扩展报表开发中的关键技术,包括常用公式与脚本的使用,如数据集中拼接问号实现灵活筛选、日期条件的写法、财务公式的应用、参数传递与查询、日期区间展示、条件判断及报表与单据的链接等,旨在帮助开发人员提升报表开发的效率与质量。
首编于:2024年10月18日
关键词:扩展报表、常用公式、脚本、扩展报表解决方案样例
前言:
WHERE (CUSTOMERID IN ('@customer') OR ? IS NULL)
AND (PROJECTMAN = '@projectmanager' OR ? IS NULL )
通过这样在每个关键筛选条件后面使用 OR? IS NULL
的格式拼接,整体上构建了一种较为灵活的筛选机制。它既能够在各项条件有明确指定值时按照精准要求筛选出符合条件的数据,又可以在某些条件值缺失(为 NULL
)的情况下,依然可以合理地把相关的数据包含到报表数据集当中,避免因部分筛选条件的不完整性而导致数据提取出现偏差或数据缺失过多的问题
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
中提取出年份部分。例如,如果 bill.FCLEARDATE
中的日期是 2024-11-15
,那么 year(bill.FCLEARDATE)
将返回 2024
。
month()
函数:与 year()
函数类似,month()
函数用于从日期类型的列 bill.FCLEARDATE
中提取出月份部分。对于 2024-11-15
这个日期,month(bill.FCLEARDATE)
将返回 11
=acct(FIELD(教建项目可用资金余额, 公司编码), CONCATENATE("2241.18|00011|", FIELD(教建项目可用资金余额, 成本项目编码)), "JF", 2023, 5, 2023, 5, "", "Company")
=acct(N4,"2202","y",L2,M1,N1,N3"BB01")
通过acct
函数结合其他辅助函数和参数,从财务系统中获取特定条件下的财务数据,并将其填充到报表的相应位置,以实现财务数据的动态展示和分析
=SELECT1(QUERY(客户简称, {"customerNumber", A4}), FSIMPLENAME)
QUERY
函数主要用于在报表的数据集中根据特定条件进行数据查询操作
SELECT1
函数功能概述:该函数一般用于从QUERY
函数查询得到的结果集中进一步筛选或提取特定的内容。
=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))
这些表达式通过各种函数组合,利用不同的参数进行条件设定、数据筛选以及相应的计算(求和、提取特定值等)操作,根据报表中的具体参数值以及业务逻辑要求,准确地获取和展示所需的各类数据信息,满足扩展报表多样化的数据呈现和分析需求
="从" &TEXT(@begindate, "yyyy-mm-dd") & "到" &TEXT(@enddate, "yyyy-mm-dd")
这两个表达式都是借助相关函数将日期参数或单元格中的日期数据转换为指定格式的文本,并通过合理的拼接、组合等方式,构造出能清晰展示日期范围的文本内容,以满足扩展报表中对日期区间展示的需求
=IF(OR(P3 = "", J3 = ""), "", DATEDIF(J3, P3, "D"))
整个表达式先通过 OR
函数判断两个关键单元格是否为空,再利用 IF
函数依据这个判断结果决定是否进行后续的日期差值计算,以此实现了在扩展报表中根据特定单元格日期数据完整性来灵活计算并展示日期差值的功能,避免了因日期数据缺失而可能导致的错误计算情况
select * from T_BAS_DefineReport where fname_l2 like '%质检月报表%'
查找这个表,里面有一个组织,要切换到该组织下,然后查找就出来了
EAS扩展报表:根据选择的日期动态显示当月所有日期:https://vip.kingdee.com/link/s/lav1i
EAS扩展报表里的序号怎么实现:https://vip.kingdee.com/link/s/l2RUr
EAS扩展报表中取另一个页签中数据集中的值,该怎么取:https://vip.kingdee.com/link/s/lwMxt
持续更新中,敬请期待~~~欢迎指正
推荐阅读