Как создать счет-фактуру по заказу на продажу со следующей запланированной к оплате суммой. Я не хочу выставлять счет на полную сумму. В пользовательском интерфейсе NetSuite мы можем использовать кнопку «Следующий счет» для перехода к следующей оплачиваемой сумме. Как мы можем имитировать аналогичную функциональность с помощью сценария Suite?
Как мы можем имитировать функциональность кнопки Next Bill с помощью сценария Suite?
Ответы (3)
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
, вся сумма в счете выставляется. Ответ Олега Ласкова обеспечивает рабочий подход с использованием defaultValues
. Ниже представлена расширенная версия ответа Олега с использованием moment.js для форматирования даты.
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();
согласно SuiteAnswers https://netsuite.custhelp.com/app/answers/detail/a_id/70522
Решение
Счет по заказу на продажу с графиком выставления счетов может быть выставлен двумя способами:
- Следующий законопроект
- Остающийся счет
Параметр Остаток счета может быть достигнут путем преобразования записи заказа на продажу с помощью скрипта. Однако, чтобы выставить счет по заказу на продажу только на сумму следующего графика выставления счетов, тогда Дата выставления счета должна быть установлена равной Дате следующего выставления счета в Продажах Заказ.
Пример сценария:
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();
}
});