KeyError:“帐户”|查询报告 |过滤字段|检查对象是否存在 | ERP下一个

问题描述 投票:0回答:1

在 ERPNext V-14 中开发新的查询报告。编写了一个 SQL 查询,它运行良好,但是当添加过滤器字段名并将其值保留为空时,会出现错误消息“KeyError:”,而如果在该字段中写入或选择任何值,则它运行良好。我想要什么,如果 fieldname 中没有值,那么它不应该在 SQL 中的 where 语句中考虑。

我相信,错误原因是未找到字段名/对象或由于没有值而未初始化,并且由于它正在检查 WHERE 语句,因此,会发生此错误,但不确定实际原因。

我需要知道有什么办法可以解决这个问题吗?我不想强制字段名称。

这是 SQL:

SELECT
j.company as company
, ja.account as account
, ja.debit as debit
, ja.credit as credit
FROM tabJournal Entry as j
inner join tabJournal Entry Account as ja on ja.parent=j.name
where ja.account=%(account)s ;

期望执行类似的操作或解决方法来检查字段名/对象是否存在?类似下面的SQL

select … from 
where exists(%(account)s)  or isnull(%(account)s)>0

此外,请参考下面的截图:

enter image description here

mysql report erpnext
1个回答
0
投票

可能会发生这种情况,因为帐户过滤器不是强制性的,因此 Frappe 将运行您的 py 报告。有两种方法,即强制帐户:

{
    "fieldname":"company",
    "label": __("Company"),
    "fieldtype": "Link",
    "options": "Company",
    "reqd": 1, // set filter to mandatory
    "default": frappe.defaults.get_user_default("Company")
},

此代码示例用于过滤公司,您可以为公司设置默认值,也可以在 Frappe 运行报表之前强制执行此过滤器。

第二种方法是更改你的Python代码:

filter_report = ""
if filters.get("account"):
    filter_report += "WHERE ja.account = {}".format(filters.get("account"))

sql = frappe.db.sql("""
    SELECT
    j.company as company
    , ja.account as account
    , ja.debit as debit
    , ja.credit as credit
    FROM tabJournal Entry as j
    inner join tabJournal Entry Account as ja on ja.parent=j.name
    {}
    """.format(filter_report), as_dict=1)
© www.soinside.com 2019 - 2024. All rights reserved.