查询报表是可以通过单条 SQL 查询生成的报表。
只要查询能生成列和记录,查询可以简单也可以复杂。
这些报表只能由系统管理员创建,并存储在数据库中。
要创建查询报表,请在快捷搜索栏中输入“新建报表”并按回车。
- 将报表类型设置为“查询报表”
- 设置参考文档类型 – 有权访问该参考文档类型的用户将有权访问该报表
- 设置模块 – 报表将显示在该模块的“自定义报表”部分。
- 编写你的查询
如果你将“标准”设置为“是”并且启用了开发者模式,那么将生成一个 JSON 文件,
你需要将其签入到你的版本控制中。只有当你想要将查询报表与你的应用一起打包时,
才应该这样做。模块将决定 JSON 文件存放的位置。
列和筛选器
在版本 13 中添加
你可以在报表文档中配置列和筛选器。在这里,你可以为列和筛选器设置标签、宽度、格式(字段类型)。
筛选器可以在查询中用作格式化变量。例如,类型为 customer 的筛选器可以在查询中用作 %(customer)s。
示例
SELECT
name, creation, production_item, qty, produced_qty, company
FROM
`tabWork Order`
WHERE
docstatus=1
AND ifnull(produced_qty,0) < qty
格式化列(旧式)
或者,也可以通过以特定格式指定列的标签来格式化列:{label}:{optional fieldtype}{optional /}{optional options}:{optional width}
如果你已经在报表本身中配置了字段和列,则无需使用这种样式。
示例(旧式)
下面是一个查询可能的样子:
SELECT
`tabWork Order`.name as "Work Order:Link/Work Order:200",
`tabWork Order`.creation as "Date:Date:120",
`tabWork Order`.production_item as "Item:Link/Item:150",
`tabWork Order`.qty as "To Produce:Int:100",
`tabWork Order`.produced_qty as "Produced:Int:100",
`tabWork Order`.company as "Company:Link/Company:"
FROM
`tabWork Order`
WHERE
`tabWork Order`.docstatus=1
AND ifnull(`tabWork Order`.produced_qty,0) < `tabWork Order`.qty
AND NOT EXISTS (SELECT name from `tabStock Entry` where work_order =`tabWork Order`.name)
如果你注意到每一列都有一种特殊语法,我们会使用这些信息来格式化报表视图。
例如:第一列 Work Order:Link/Work Order:200 将渲染为文档类型为“工单”的链接字段,列宽将为 200px。
查询报表视图