Как вы выбираете позиции для выполнения при преобразовании заказа на продажу netsuite в выполнение?

#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});