脚本报表

您可以通过创建新的报表,使用服务器端脚本来生成表格形式的报表。

注意:您需要拥有管理员权限才能执行此操作。

由于这些报表通过 Python 脚本为您提供不受限制的访问权限,因此只能由管理员创建。报表的脚本部分会成为应用程序代码库的一部分。如果您尚未创建应用程序,请阅读此文档。

注意:您必须处于开发者模式才能执行此操作。

1. 创建新报表

  1. 将“报表类型”设置为“脚本报表”
  2. 将“是否标准”设置为“是”
  3. 选择您要添加此报表的模块
  4. 在模块文件夹中(例如,如果是在 ERPNext 的 Accounts 模块中,文件夹将为 erpnext/accounts/report/[report-name]),您会看到将创建报表文件的模板。
  5. 在 .js 文件中,您可以为报表设置筛选条件。
  6. 在 .py 文件中,您可以编写用于生成报表的脚本。

2. 添加筛选条件

您可以在 .js 中添加筛选条件。示例如下:

frappe.query_reports["Accounts Receivable"] = {
    "filters": [
        {
            "fieldname":"company",
            "label": ("Company"),
            "fieldtype": "Link",
            "options": "Company",
            "default": frappe.defaults.getuserdefault("company")
        },
    ]
}
  1. 这些属性的设置方式与您在 DocType 中设置 DocField 时相同。

3. 添加脚本

在 .py 文件中,您可以添加用于生成报表的脚本。

  1. 在 execute 方法中,会返回两个列表 columns 和 data。
  2. 列必须是一个字典列表,其中包含 fieldname、label、fieldtype、options、width 等字段。例如:
[
    {
        "fieldname": "account",
        "label": _("Account"),
        "fieldtype": "Link",
        "options": "Account",
        "width": 300,
    },
    {
        "fieldname": "currency",
        "label": _("Currency"),
        "fieldtype": "Link",
        "options": "Currency",
    },
]
  1. 您可以使用所有服务器端模块来构建您的报表。
  2. 例如,请参阅现有报表(如资产负债表)。

  1. 在模块文件夹中(例如,如果是在 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 秒)

预生成报表适用于运行缓慢但稳定的报表。用户需要等待并稍后回来查看结果,而不是在浏览器中立即获得表格。