Netsuite Suitescript 2 - 搜索中的客户存款余额

Netsuite Suitescript 2 - Customer Deposit remaining amount in Search

我在使用 SuiteScript 2.0 在 NetSuite 中对客户存款执行自定义搜索时遇到问题

我需要获取所有客户存款 ID、状态、存款金额和剩余金额(我指的是尚未应用于任何发票的金额)。我的问题是我不知道如何获取剩余的金额。

我试过这个:

var results = [];

search.create({           
    type: search.Type.CUSTOMER_DEPOSIT,
    filters: [['lastmodifieddate', 'within', context.from_datetime, context.to_datetime]],
    columns: [
        'entity',
        'status',
        'amount',
        'amountremaining'
    ]
}).run().forEach(function() {
    results.push(result);
    return true;
});

return results;

但是 amountremaining 所有存款的字段都为空。

amountremaining 列与客户存款无关,但您可以使用以下方法实现您的需要。

首先你需要添加一个过滤器来确保你拉取正确的'applying transactions':

["applyingtransaction.type","anyof","DepAppl"]

这可确保您得到 'Deposit Applications' 而不是 'Deposits',后者可能正在应用客户存款的交易。然后,您需要添加一个包含公式的列,以将所有这些存款申请中的金额添加到客户存款总额中:

search.createColumn({
     name: "formulacurrency",
     summary: "MIN",
     formula: "min({amount}) + SUM({applyingtransaction.amount})",
     label: "Formula (Currency)"
  })

请注意,这是 添加 而不是减去,因为 applyingtransaction.amount 被 return 编辑为负数。

也不是说这需要汇总列才能工作(因为每个客户存款可能有多个应用交易),因此您需要对所有需要的列应用分组或汇总功能return。最重要的是,您需要按客户存款内部 ID 或文档编号进行 GROUP。

使用加入的applyingtransaction字段,我设法用这段代码得到了我想要的:

var results = [];

search.create({           
    type: search.Type.CUSTOMER_DEPOSIT,
    filters: [['lastmodifieddate', 'within', context.from_datetime, context.to_datetime]],
    columns: [
        'entity',
        'status',
        'amount',
        search.createColumn({
            name: "total",
            join: "applyingtransaction"
        })
    ]
}).run().forEach(function(result) {

    var appliedValue = parseFloat(result.getValue({ name: 'total', join: 'applyingtransaction' }));

    if (result.id in results) {
        results[result.id].remaining_credit += appliedValue;
    } else {
        var total = parseFloat(result.getValue('total'));

        results[result.id] = {
            remaining_credit: parseFloat(total + appliedValue),
        }
    }
});

return results;