Как мы можем имитировать функциональность кнопки Next Bill с помощью сценария Suite?

Как создать счет-фактуру по заказу на продажу со следующей запланированной к оплате суммой. Я не хочу выставлять счет на полную сумму. В пользовательском интерфейсе NetSuite мы можем использовать кнопку «Следующий счет» для перехода к следующей оплачиваемой сумме. Как мы можем имитировать аналогичную функциональность с помощью сценария Suite? Сеть


person kasarlaravi    schedule 16.04.2020    source источник


Ответы (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();
person jweob    schedule 29.03.2021
comment
Это было болезненно - похоже, вы ДОЛЖНЫ установить поле billdate в счете-фактуре в defaultValues ​​API преобразования. Я не понимаю, почему вы не можете просто установить его в преобразовании перед вызовом .save (), но это не сработает. Без этого ответа я бы потратил гораздо больше времени, пытаясь понять это. Спасибо! - person csilk; 21.05.2021

согласно 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();
    }
});
person Komagain    schedule 21.12.2020

person    schedule
comment
Добавьте объяснение - person theWellHopeErr; 08.12.2020
comment
Подход @oleg-laskov работает (в отличие от подхода, показанного в SuiteAnswers). Я расширил этот ответ и добавил способ сделать это в SuiteScript 1.0 в отдельном ответе. - person jweob; 29.03.2021