使用SuiteScript初始化供应商付款记录时设置默认币种以获取正确的核销子列表数据
SuiteScript初始化供应商付款记录时设置默认币种以获取正确的核销子列表数据
看起来你在用SuiteScript创建供应商付款记录时,在币种设置这块遇到了小问题,而且还需要确保核销子列表能加载对应币种的正确账单数据对吧?我来帮你梳理下问题并修正代码~
首先先指出你原代码里的两个小问题:
var apAccountId = '333'后面少了分号,语法上会有隐患- 设置currency字段时写的
currency的内容是错误的,应该用你定义好的currencyId变量
另外,要让核销子列表(也就是用来选择要核销账单的apply子列表)加载对应币种的账单,最好在初始化记录时就把币种加入到defaultValues里,这样系统会自动筛选出该供应商下对应币种的未付账单,避免后续再调整币种导致子列表数据不匹配。
下面是修正后的完整代码,我还加了处理核销子列表的示例,方便你直接参考:
var transactionId = '11111'; var vendorId = '222'; var subsidiaryId = '2'; var apAccountId = '333'; // 补上遗漏的分号 var inputAmount = 1000; var currencyId = '4'; //USD // 创建供应商付款记录,建议用官方枚举值代替字符串,更健壮 var make_billPayment_record = record.create({ type: record.Type.VENDOR_PAYMENT, defaultValues: { entity: vendorId, subsidiary: subsidiaryId, apacct: apAccountId, currency: currencyId // 初始化时就设置币种,确保子列表加载正确数据 } }); // 这里的判断可以保留,万一后续有动态修改币种的需求 if(!!currencyId){ make_billPayment_record.setValue({ fieldId: 'currency', value: currencyId // 替换成正确的变量 }); } // 示例:处理核销子列表,选择指定transactionId的账单进行核销 var applySublistCount = make_billPayment_record.getLineCount({ sublistId: 'apply' }); for(var i = 0; i < applySublistCount; i++){ var billInternalId = make_billPayment_record.getSublistValue({ sublistId: 'apply', fieldId: 'internalid', line: i }); if(billInternalId === transactionId){ // 标记要核销该账单 make_billPayment_record.setSublistValue({ sublistId: 'apply', fieldId: 'apply', line: i, value: true }); // 设置核销金额 make_billPayment_record.setSublistValue({ sublistId: 'apply', fieldId: 'amount', line: i, value: inputAmount }); break; } } // 保存记录,启用enableSourcing让系统自动填充关联字段(比如汇率) var paymentRecordId = make_billPayment_record.save({ enableSourcing: true, ignoreMandatoryFields: false });
几个关键注意点要记一下:
- 用
record.Type.VENDOR_PAYMENT代替字符串'vendorpayment',能避免拼写错误,也更符合SuiteScript的最佳实践 - 初始化时就把币种加入
defaultValues,是确保核销子列表加载对应币种账单的关键,因为系统会基于初始化的筛选条件拉取数据 - 保存记录时开启
enableSourcing: true,如果付款币种不是子公司本位币,系统会自动填充汇率字段,减少手动处理的麻烦
备注:内容来源于stack exchange,提问作者Kenny Punay
相关产品推荐
相关产品推荐

