如何在已保存搜索中获取关联特定销售订单的客户订金剩余金额?(含SuiteScript代码)
获取特定销售订单关联的客户订金剩余余额(NetSuite)
针对你需要获取特定销售订单关联客户订金剩余余额(剩余余额=可用/未核销金额)的需求,我整理了两种实用的实现方式,一种是用NetSuite自带的已保存搜索快速搞定,另一种是用SuiteScript 1.0代码来实现,方便集成到你的业务流程里:
方法一:使用已保存搜索实现
这种方式适合快速查询或者手动导出数据的场景,步骤如下:
- 新建已保存搜索,记录类型选择「客户订金(Customer Deposit)」
- 在标准筛选条件中添加:
- 关联的销售订单:选择你需要的特定销售订单(建议设置为参数化筛选,这样后续可以动态指定不同的销售订单)
- 状态:可选添加「未结清(Open)」,只保留有效未核销的订金
- 在结果列中添加以下字段:
- 客户订金编号(方便定位具体订金记录)
- 关联销售订单编号(核对关联关系)
- 可用/未核销金额(这就是我们需要的剩余余额)
- 客户名称(可选,方便核对客户信息)
- 保存搜索后,直接查看结果即可,也可以设置定期更新或者在其他脚本中调用这个搜索。
方法二:SuiteScript 1.0代码实现
如果需要批量处理或者把这个逻辑集成到其他业务流程中,用脚本实现会更灵活。下面是完整的代码示例,包含分页处理以应对大数据量场景:
/** * 获取特定销售订单关联的客户订金剩余余额 * @param {String} salesOrderId - 目标销售订单的内部ID * @returns {Array} 返回包含订金信息的数组,每个元素包含depositId, salesOrderId, remainingBalance, customerName */ function getCustomerDepositRemainingBalance(salesOrderId) { // 创建客户订金搜索对象 var depositSearch = nlapiCreateSearch('customerdeposit', [ // 筛选关联指定销售订单的订金 new nlobjSearchFilter('createdfrom', null, 'anyof', salesOrderId), // 可选:只筛选未结清的订金,过滤已完全核销的记录 new nlobjSearchFilter('status', null, 'anyof', 'CustomDeposit:Open') ], [ new nlobjSearchColumn('internalid', null, 'GROUP').setName('depositId'), new nlobjSearchColumn('createdfrom', null, 'GROUP').setName('salesOrderId'), // 可用/未核销金额对应搜索列的'remaining',即剩余余额 new nlobjSearchColumn('remaining', null, 'SUM').setName('remainingBalance'), new nlobjSearchColumn('entity', null, 'GROUP').setName('customerName') ] ); var searchResults = depositSearch.runSearch(); var resultSet = []; var startIndex = 0; var results; // 分页获取搜索结果,避免NetSuite搜索结果数量限制 do { results = searchResults.getResults(startIndex, startIndex + 1000); for (var i = 0; i < results.length; i++) { var result = results[i]; resultSet.push({ depositId: result.getValue('depositId'), salesOrderId: result.getValue('salesOrderId'), remainingBalance: parseFloat(result.getValue('remainingBalance')) || 0, customerName: result.getText('customerName') }); } startIndex += 1000; } while (results.length >= 1000); return resultSet; } // 调用示例:获取内部ID为'123'的销售订单的订金剩余余额 var depositBalances = getCustomerDepositRemainingBalance('123'); nlapiLogExecution('DEBUG', '订金剩余余额详情', JSON.stringify(depositBalances));
一些注意事项
- 已保存搜索中的「可用/未核销金额」对应脚本搜索列的
remaining字段,直接调用就能得到剩余余额,不需要额外计算 - 如果一个销售订单关联多个客户订金,脚本会按订金维度返回每条记录的剩余余额,你可以根据需求调整GROUP字段来汇总总额
- 代码中加入了分页逻辑,确保即使关联的订金数量很多,也能完整获取所有结果
内容的提问来源于stack exchange,提问作者Kane Shaw
相关产品推荐
相关产品推荐

