您可以通过创建新的报表,使用服务器端脚本来生成表格形式的报表。
注意:您需要拥有管理员权限才能执行此操作。
由于这些报表通过 Python 脚本为您提供不受限制的访问权限,因此只能由管理员创建。报表的脚本部分会成为应用程序代码库的一部分。如果您尚未创建应用程序,请阅读此文档。
注意:您必须处于开发者模式才能执行此操作。
1. 创建新报表
- 将“报表类型”设置为“脚本报表”
- 将“是否标准”设置为“是”
- 选择您要添加此报表的模块
- 在模块文件夹中(例如,如果是在 ERPNext 的 Accounts 模块中,文件夹将为
erpnext/accounts/report/[report-name]),您会看到将创建报表文件的模板。 - 在
.js文件中,您可以为报表设置筛选条件。 - 在
.py文件中,您可以编写用于生成报表的脚本。
2. 添加筛选条件
您可以在 .js 中添加筛选条件。示例如下:
frappe.query_reports["Accounts Receivable"] = {
"filters": [
{
"fieldname":"company",
"label": ("Company"),
"fieldtype": "Link",
"options": "Company",
"default": frappe.defaults.getuserdefault("company")
},
]
}
- 这些属性的设置方式与您在 DocType 中设置 DocField 时相同。
3. 添加脚本
在 .py 文件中,您可以添加用于生成报表的脚本。
- 在
execute方法中,会返回两个列表columns和data。 - 列必须是一个字典列表,其中包含 fieldname、label、fieldtype、options、width 等字段。例如:
[
{
"fieldname": "account",
"label": _("Account"),
"fieldtype": "Link",
"options": "Account",
"width": 300,
},
{
"fieldname": "currency",
"label": _("Currency"),
"fieldtype": "Link",
"options": "Currency",
},
]
- 您可以使用所有服务器端模块来构建您的报表。
- 例如,请参阅现有报表(如资产负债表)。
4. 在模块页面上为您的报表添加链接
- 在模块文件夹中(例如,如果是在 ERPNext 的 Accounts 模块中,文件夹将为
erpnext/config/accounts.py),您会看到各个部分的标签和项目。新报表可以添加到项目列表中,如下例所示:
def get_data():
return [
{
"label": _("Accounting Statements"),
"items": [
{
"type": "report",
"name": "Balance Sheet",
"doctype": "GL Entry",
"is_query_report": True,
}
],
}
]
预生成报表
某些脚本报表在浏览器中运行时间过长。预生成报表 会将执行过程移至后台任务,这样用户在报表运行时就不会被阻塞。
当在报表上勾选预生成报表选项时,每次运行都会被加入队列,而不是同步执行。用户会看到进度指示器,并在结果准备好时收到通知。完成的结果会作为预生成报表文档存储,之后可以使用相同的筛选条件重新打开。
预生成报表还解锁了以下功能:
- 生成 CSV — 可选择在 JSON 结果之外同时生成 CSV 附件
- 超时时间(秒) — 后台任务在被视为失败之前可以运行的时间长度(默认值:1500 秒)
预生成报表适用于运行缓慢但稳定的报表。用户需要等待并稍后回来查看结果,而不是在浏览器中立即获得表格。