ERPNext:修改采购发票表单搜索弹窗,新增价格与数量行
ERPNext采购发票供应商分配弹窗问题解决方案
一、解决弹窗仅显示2个项目的限制
默认弹窗列表可能被设置了limit=2的查询限制,按以下步骤修改:
- 找到采购发票对应的客户端脚本文件(路径通常为
frappe/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js) - 定位到获取项目列表的查询代码,示例如下:
frappe.db.get_list("Item", { filters: { ... }, limit: 2, // 此处为数量限制的根源 fields: ["name", "item_name"] }).then(items => { // 弹窗渲染逻辑 });
- 将
limit参数移除(显示所有符合条件的项目)或设置为更大的数值(如limit: 50)。
如果弹窗是通过frappe.ui.form.MultiSelectDialog实现的,修改初始化时的limit属性:
const dialog = new frappe.ui.form.MultiSelectDialog({ doctype: "Item", target: cur_frm.$wrapper, setters: { ... }, limit: 50, // 调整此处的数量限制 // 其他配置项 });
二、为弹窗项目新增价格与数量字段
通过自定义弹窗行模板和数据收集逻辑实现:
- 使用
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(); } });
- 若为自定义弹窗,直接修改弹窗的HTML模板,在项目行中插入价格、数量输入控件,提交时通过jQuery获取输入值,写入采购发票的
items子表即可。
内容的提问来源于stack exchange,提问作者sherif nasser
相关产品推荐
相关产品推荐

