You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ERPNext:修改采购发票表单搜索弹窗,新增价格与数量行

ERPNext采购发票供应商分配弹窗问题解决方案

一、解决弹窗仅显示2个项目的限制

默认弹窗列表可能被设置了limit=2的查询限制,按以下步骤修改:

  1. 找到采购发票对应的客户端脚本文件(路径通常为frappe/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js)
  2. 定位到获取项目列表的查询代码,示例如下:
frappe.db.get_list("Item", {
    filters: { ... },
    limit: 2, // 此处为数量限制的根源
    fields: ["name", "item_name"]
}).then(items => {
    // 弹窗渲染逻辑
});
  1. 将limit参数移除(显示所有符合条件的项目)或设置为更大的数值(如limit: 50)。

如果弹窗是通过frappe.ui.form.MultiSelectDialog实现的,修改初始化时的limit属性:

const dialog = new frappe.ui.form.MultiSelectDialog({
    doctype: "Item",
    target: cur_frm.$wrapper,
    setters: { ... },
    limit: 50, // 调整此处的数量限制
    // 其他配置项
});

二、为弹窗项目新增价格与数量字段

通过自定义弹窗行模板和数据收集逻辑实现:

  1. 使用MultiSelectDialog的自定义行渲染功能:
const dialog = new frappe.ui.form.MultiSelectDialog({
    doctype: "Item",
    target: cur_frm.$wrapper,
    setters: { item_group: "" },
    // 自定义每行的HTML内容,添加价格和数量输入框
    render_row: function(row, item_data) {
        $(row).html(`
            <div class="col-xs-4">${item_data.item_name || item_data.name}</div>
            <div class="col-xs-3">
                <input type="number" class="form-control item-rate" 
                       data-item="${item_data.name}" 
                       placeholder="单价" 
                       value="${item_data.standard_rate || 0}">
            </div>
            <div class="col-xs-3">
                <input type="number" class="form-control item-qty" 
                       data-item="${item_data.name}" 
                       placeholder="数量" 
                       value="1">
            </div>
            <div class="col-xs-2">
                <input type="checkbox" class="item-select" data-item="${item_data.name}">
            </div>
        `);
    },
    // 选中项目时收集价格和数量并添加到采购发票
    on_select: function(selected_items) {
        selected_items.forEach(item => {
            const rate = $(`.item-rate[data-item="${item.name}"]`).val();
            const qty = $(`.item-qty[data-item="${item.name}"]`).val();
            
            cur_frm.add_child("items", {
                item_code: item.name,
                item_name: item.item_name,
                rate: rate,
                qty: qty
            });
        });
        cur_frm.refresh_field("items");
        dialog.hide();
    }
});
  1. 若为自定义弹窗,直接修改弹窗的HTML模板,在项目行中插入价格、数量输入控件,提交时通过jQuery获取输入值,写入采购发票的items子表即可。

内容的提问来源于stack exchange,提问作者sherif nasser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:01:04