NetSuite beforeSubmit用户事件脚本修改发票税值未保存问题咨询
问题定位及修复方案
核心问题点
- 脚本注解配置错误:
@appliedtorecord标注为customer,代表脚本仅对客户记录生效,你需要修改发票记录,应该改为invoice,否则脚本根本不会在发票创建/编辑的事件中触发。 setSublistValue传参错误:代码末尾有一行currentRecord.setSublistValue('item', 'taxrate1', i, 10.0);,NetSuite 2.x版本的sublist操作方法不支持按该顺序传参,仅支持传入配置对象,错误的传参导致赋值失败,同时该行在判断逻辑外,会覆盖你之前条件判断里的赋值结果。- 税率字段重复赋值逻辑错误:
taxcode关联了对应的税率规则,设置enableSourcing: true时,修改taxcode后系统会自动带出对应税率,手动修改只读属性taxrate1会被系统覆盖,无需单独赋值。 - 冗余判断无效:代码中
if (sublistName === 'item')属于无效判断,sublistName是你提前写死的固定值item,该判断永远为真,不影响功能但冗余。
修正后的代码
define(['N/log'], function (log) { /** * 发票税费修改用户事件脚本 * * @NApiVersion 2.x * @NModuleScope SameAccount * @NScriptType UserEventScript * @appliedtorecord invoice */ function beforeSubmit(context) { try { var currentRecord = context.newRecord; log.debug({ title: 'currentRecord', details: currentRecord }); var sublistName = "item"; var subsidiary_id = currentRecord.getValue({fieldId:'subsidiary'}); var inv_type = currentRecord.getText({fieldId: 'custbody3'}); log.debug({title: 'inv_type', details: inv_type}); log.debug({title: 'subsidiary_id', details: subsidiary_id}); if (subsidiary_id == 6 && inv_type == "Services") { var lines = currentRecord.getLineCount({sublistId: 'item'}); log.debug({title:'lines',details:lines}); for (var i = 0; i < lines; i++) { var descriptionValue = currentRecord.getSublistValue({ sublistId: sublistName, fieldId: "description", line: i }); log.debug({title: 'descriptionValue', details: descriptionValue}); if (/JP/ig.test(descriptionValue)) { currentRecord.setSublistValue({ sublistId: 'item', fieldId: 'taxcode', value: 6880, ignoreFieldChange: false, enableSourcing: true, line: i }); } } } } catch (e) { log.error('Error in beforeSubmit', e); } } return { beforeSubmit: beforeSubmit }; });
额外检查项
- 脚本部署时请确认上下文过滤已添加你创建发票使用的API类型(SuiteTalk/RESTlet等),避免API触发的操作不执行脚本。
- 确认内部ID为6880的税码对subsidiary 6可用,且对应税率为10%。
内容的提问来源于stack exchange,提问作者NooB Gamer
相关产品推荐
相关产品推荐

