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

无法通过SuiteScript 2.X更新批次编号库存项目采购价格

问题分析与解决方案

你遇到的核心问题是:直接修改itemvendor子列表的purchaseprice和vendorprices字段无法生效。结合你提到的UI编辑弹窗(选择货币后设置采购价格),就能明白原因——NetSuite中批次编号库存项目的供应商采购价格并非存储在itemvendor行,而是关联独立的「供应商价格(Vendor Price)」记录,UI弹窗就是用来维护这个独立记录的,而非直接修改item字段。

现有代码的问题点

  • purchaseprice字段是系统从关联的Vendor Price记录同步过来的显示字段,直接赋值不会写入实际数据源
  • vendorprices是只读的计算字段,手动设置完全无效,它由系统自动聚合该供应商下的所有价格记录生成
  • 动态模式下提交子列表后立即保存的逻辑没问题,但操作的字段本身不是价格的存储位置

修正后的代码实现

正确的做法是直接创建/更新对应的Vendor Price记录,而非修改item的itemvendor子列表:

function updatePurchasePrice(itemID, vendor, purchasePrice) {
    log.debug("Update Purchase Price", "Started");
    try {
        // 先检查是否已存在该商品+供应商+货币的价格记录
        var filters = [
            ["item", "anyof", itemID],
            "AND",
            ["vendor", "anyof", vendor],
            "AND",
            ["currency", "anyof", "1"] // 1是USD的内部ID,根据实际使用的货币调整
        ];
        
        var searchResults = search.create({
            type: search.Type.VENDOR_PRICE,
            filters: filters,
            columns: ["internalid"]
        }).run().getRange({start: 0, end: 1});
        
        var priceRecord;
        if (searchResults.length > 0) {
            // 加载已有价格记录
            priceRecord = record.load({
                type: record.Type.VENDOR_PRICE,
                id: searchResults[0].getValue("internalid"),
                isDynamic: false
            });
        } else {
            // 创建新的价格记录
            priceRecord = record.create({
                type: record.Type.VENDOR_PRICE,
                isDynamic: false
            });
            // 设置关联的商品、供应商与货币
            priceRecord.setValue({fieldId: "item", value: itemID});
            priceRecord.setValue({fieldId: "vendor", value: vendor});
            priceRecord.setValue({fieldId: "currency", value: "1"}); // 对应UI弹窗里的货币选择项
        }
        
        // 设置采购价格
        priceRecord.setValue({fieldId: "price", value: purchasePrice});
        // 可选:设置价格生效/失效日期
        // priceRecord.setValue({fieldId: "effectivedate", value: new Date()});
        
        var saveId = priceRecord.save({
            enableSourcing: true,
            ignoreMandatoryFields: false
        });
        
        log.debug("Vendor Price Record Saved", "Record ID: " + saveId);
    } catch (e) {
        log.error({
            title: 'Error updating purchase price',
            details: e.toString()
        });
    }
}

关键说明

  1. 货币ID调整:代码里的"1"是USD的默认内部ID,如果你使用其他货币,需要替换成对应货币的内部ID(可通过自定义搜索或NetSuite后台查看)
  2. 权限检查:确保脚本执行的角色拥有「Vendor Price」记录的创建/编辑权限
  3. 扩展设置:如果需要价格按日期生效,可添加effectivedate和expirationdate字段的赋值逻辑

内容的提问来源于stack exchange,提问作者John Mulholland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:28:19