#javascript #transform #netsuite #suitescript
Вопрос:
Попытка преобразовать заказ на продажу NetSuite с помощью
var fulfillment = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: currentRecord.id,
toType: record.Type.ITEM_FULFILLMENT,
isDynamic: true
});
получение ошибки «USER_ERROR»,»сообщение»:»Вы должны ввести хотя бы одну строку для этой транзакции».
Выполнение содержит 7 позиций, но после выполнения.save() возвращает ошибку о том, что в выполнение не добавлены позиции.
Есть ли способ выбрать, какие строки выполнять? Подумайте о том, как при просмотре заказа на продажу вы нажимаете выполнить, а затем можете установить флажок, какие позиции вы хотите включить в это выполнение.
Спасибо
Ответ №1:
Там есть поле столбца транзакций с именем «itemreceive». Это поле «itemreceive» эквивалентно флажку «Выполнить», установленному на странице создания записи о выполнении элемента в пользовательском интерфейсе. Следующий код должен работать
//transform SO to create a new Item fulfillment
var fulfillment = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: currentRecord.id,
toType: record.Type.ITEM_FULFILLMENT,
isDynamic: true
});
//get line count of newly created fulfillment
var lineCount = fulfillment.getLineCount({
sublistId: 'item'
});
//for each line set the "itemreceive" field to true
for (var i = 0; i < lineCount; i ) {
fulfillment.selectLine({
sublistId: 'item',
line: i
});
fulfillment.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'itemreceive',
value: true
});
//set other relevant sublist fields
fulfillment.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'fieldId',
value: 'value'
});
fulfillment.commitLine({
sublistId: 'item'
});
}
//set any other relevant itemreceive fields
itemreceive.setValue({
filedId: 'fieldId',
value: 'value'
});
//save the newly created itemreceive
var itemreceiveId = itemreceive.save({
enableSourcing: true, //optional, defaul is false
ignoreMandatoryFields: true //optional, defaul is false
});
Ответ №2:
Если в заказе на продажу есть строки, которые могут быть выполнены, строки выполнения, вероятно, будут иметь флажок «Выполнить», не отмеченный. Это контролируется с помощью флажка «ПО УМОЛЧАНИЮ ЭЛЕМЕНТЫ РАВНЫ НУЛЮ ПОЛУЧЕНЫ/ВЫПОЛНЕНЫ» в разделе Настройка -> Учет ->> Настройки учета; Вкладка Управление заказами; раздел Выполнение.
Учитывая эффект в вашей учетной записи, он, вероятно, установлен, поэтому строки по умолчанию не будут выполнены, если вы просто создадите и сохраните выполнение товара.
Как правило, при написании сценария выполнения я буду повторять строки и делать что-то вроде:
var shouldFulfill = someLogic();
itemFulfillment.setSublistValue({sublistId:'item', fieldId:'itemreceive', line:idx, value:shouldFufill});
или как в вашем случае с isDynamic:true
itemFulfillment.setCurrentSublistValue({sublistId:'item', fieldId:'itemreceive', line:idx, value:shouldFufill});