0

如何使用下一个计划开票金额创建销售订单发票。我不想创建全额发票。在 NetSuite UI 中,我们可以使用“下一个账单”按钮来查看下一个可计费金额。我们如何使用 Suite 脚本模拟类似的功能?  网

4

3 回答 3

1

SuiteAnswers 解释说,您需要将billdate发票的日期设置为与销售订单的下一个计费日期相同。但是,他们提供的示例有错误并且不起作用。

下面的代码片段在 SuiteScript 1.0 中用作客户端脚本。您可以在检查销售订单记录时在浏览器控制台中运行它来进行验证。它改编自 SuiteAnswer 63760,但该答案中的示例日期格式不正确,因此失败。

var recordId = nlapiGetRecordId();
var recordType = nlapiGetRecordType();
var soRecord = nlapiLoadRecord(recordType,
recordId);
var nextBill = soRecord.getFieldValue('nextbill');
var inv = nlapiTransformRecord('salesorder', soRecord.id, 'invoice', {'billdate': nextBill});
nlapiSubmitRecord(inv,true);

对于 SuiteScript 2.0,SuiteAnswer 70522 中的示例根本不起作用。它设置billdate使用setValue(). 即使将setValue()报表更正为fieldId: 'billdate'而不是fieldId: billdate,发票上的全部金额也会被计费。Oleg Laskov 的回答提供了一种使用defaultValues. 以下是使用 moment.js 进行日期格式化的 Oleg 答案的扩展版本。

var oSalesOrder = scriptContext.newRecord;
var billdate = oSalesOrder.getValue({
            fieldId: 'nextbill'
        });
var sBillDate = moment(billdate).format('M/D/YYYY');
var invoice = record.transform({
        fromType: record.Type.SALES_ORDER,
        fromId: oSalesOrder.id,
        toType: record.Type.INVOICE,
        isDynamic: true,
        defaultValues: {
           billdate: sBillDate
       }
      })
var invoiceId = invoice.save();
于 2021-03-29T20:52:34.587 回答
0
var rec = record.transform({
        fromType: 'salesorder',
        fromId: soId,
        toType: 'invoice',
        isDynamic: true,
        defaultValues: {
            customform : customform,
            billdate: trandate
        }
});
于 2020-12-07T16:03:06.293 回答
0

根据 SuiteAnswers https://netsuite.custhelp.com/app/answers/detail/a_id/70522

解决方案

可以使用两个选项对具有计费计划的销售订单进行计费:

  • 下一个账单
  • 剩余账单

Bill Remaining 选项可以通过脚本转换销售订单记录来实现。但是,要仅为下一个计费计划的金额向销售订单开具账单,则必须将账单日期设置为等于销售订单下一个账单日期

示例脚本:

require(['N/record', 'N/search', 'N/log'], function(record, search, log) {
    var soId = '5347';
    var invoice;
    var mySalesOrderSearch = search.create({
        type: search.Type.SALES_ORDER,
        columns: [{
            name: 'nextbilldate'
        }],
        filters: [{
            name: 'mainline',
            operator: 'is',
            values: ['T']
        }, {
            name: 'internalid',
            operator: 'anyof',
            values: ['soId']
        }]
    });
    var searchResult = mySalesOrderSearch.run().getRange({
        start: 0,
        end: 1
    });
    if (searchResult != null && searchResult.length != 0) {
        invoice = record.transform({
            fromType: record.Type.SALES_ORDER,
            fromId: soId,
            toType: record.Type.INVOICE,
            isDynamic: true
        });
        var billdate = searchResult[0].getValue({
            name: 'nextbilldate'
        });
        if (billdate != null && billdate != '') {
            invoice.setValue({
                fieldId: billdate,
                value: billdate
            })
        }
        var invoiceId = invoice.save();
    }
});
于 2020-12-21T17:24:44.843 回答