使用SuiteScript 2创建代发货采购订单时缺失行项目报错
解决SuiteScript 2创建代发货采购订单时的行项目缺失错误
问题原因
你的代码使用**动态模式(isDynamic: true)**创建采购订单时,NetSuite不会自动从关联的销售订单中拉取代发货行项目——手动创建时UI层面的自动填充逻辑,在脚本动态模式下不会自动触发,必须显式处理行项目的添加,或者切换到非动态模式利用NetSuite的自动关联逻辑。
解决方案
方案1:改用非动态模式(推荐)
非动态模式下,通过createdfrom关联销售订单ID,NetSuite会自动读取销售订单中的代发货行并生成采购订单行,无需手动添加:
var purchaseOrder = record.create({ type: record.Type.PURCHASE_ORDER, isDynamic: false, defaultValues: { createdfrom: 4427821, // 关联销售订单ID,替代原soid参数 dropship: true, subsidiary: 9, entity: 322 // 供应商ID } }); purchaseOrder.setValue({ fieldId: "employee", value: 3 }); log.debug("Item Count", purchaseOrder.getLineCount("item")); purchaseOrder.save();
方案2:动态模式下手动添加行项目
如果必须使用动态模式,需要先加载销售订单,筛选出代发货行,再手动添加到采购订单中:
// 加载源销售订单 var salesOrder = record.load({ type: record.Type.SALES_ORDER, id: 4427821 }); var purchaseOrder = record.create({ type: record.Type.PURCHASE_ORDER, isDynamic: true, defaultValues: { dropship: true, subsidiary: 9, custid: 666, entity: 322, createdfrom: 4427821 } }); purchaseOrder.setValue({ fieldId: "employee", value: 3 }); // 遍历销售订单行,仅添加代发货行 var soLineCount = salesOrder.getLineCount({sublistId: "item"}); for (var i = 0; i < soLineCount; i++) { var isDropShipLine = salesOrder.getSublistValue({ sublistId: "item", fieldId: "createpo", line: i }); if (isDropShipLine) { purchaseOrder.selectNewLine({sublistId: "item"}); // 复制商品ID、数量 purchaseOrder.setCurrentSublistValue({ sublistId: "item", fieldId: "item", value: salesOrder.getSublistValue({sublistId: "item", fieldId: "item", line: i}) }); purchaseOrder.setCurrentSublistValue({ sublistId: "item", fieldId: "quantity", value: salesOrder.getSublistValue({sublistId: "item", fieldId: "quantity", line: i}) }); // 关联销售订单及对应行,确保代发货关系 purchaseOrder.setCurrentSublistValue({ sublistId: "item", fieldId: "createdfrom", value: 4427821 }); purchaseOrder.setCurrentSublistValue({ sublistId: "item", fieldId: "soitem", value: salesOrder.getSublistValue({sublistId: "item", fieldId: "line", line: i}) }); purchaseOrder.commitLine({sublistId: "item"}); } } log.debug("Item Count", purchaseOrder.getLineCount("item")); purchaseOrder.save();
关键注意事项(OneWorld环境)
- 确保供应商的子公司与销售订单的子公司完全匹配,否则会触发子公司不兼容错误
- 销售订单的目标行项目必须开启代发货设置(
createpo字段值为true) - 使用
createdfrom而非soid关联源交易,soid为旧版参数,OneWorld环境下推荐使用标准的createdfrom字段
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

