产生通过项目收据多批次编号库存(代码附后):1.0 SuiteScript NetSuite公司

问题描述 投票:0回答:1

我试图生成编号的库存多个批次,但它只是只创建一个批号和获得分配给该项目的库存,不知道我要去的地方错了。

    var poid =15513;
var sublistcount = 2;

var fromrecord;
var fromid;
var torecord;
var trecord;
var qty;
fromrecord = 'purchaseorder';
fromid = poid;
torecord = 'itemreceipt';

fulfillment_record = nlapiTransformRecord(fromrecord, fromid, torecord,true);
for(var i=1;i<=sublistcount;i++)
{
      var warehousequantity= 2;
      //var po_line_count = fulfillment_record.getLineItemCount('item');
      fulfillment_record.selectLineItem('item', i);
      fulfillment_record.setCurrentLineItemValue('item', 'itemreceive', 'F');
      fulfillment_record.setCurrentLineItemValue('item', 'quantity', warehousequantity);

      for(var j=1;j<=warehousequantity;j++)
      {
            var subrecord = fulfillment_record.editCurrentLineItemSubrecord('item', 'inventorydetail');
            if(subrecord!=null){
                subrecord = fulfillment_record.editCurrentLineItemSubrecord('item', 'inventorydetail');
                subrecord.insertLineItem('inventoryassignment',j);
              }else {
                  subrecord = fulfillment_record.createCurrentLineItemSubrecord('item', 'inventorydetail');
              }
            subrecord.selectLineItem('inventoryassignment', j);
            subrecord.setCurrentLineItemValue('inventoryassignment', 'quantity', 2);
            subrecord.setCurrentLineItemValue('inventoryassignment', 'itemreceive ', 'F');
            subrecord.setCurrentLineItemValue('item', 'serialnumbers', 'XZY'+j);
            subrecord.setCurrentLineItemValue('inventoryassignment', 'receiptinventorynumber','XYZ'+j);
            subrecord.commitLineItem('inventoryassignment');
            subrecord.commitLineItem('inventorydetail');
            subrecord.commit();
            fulfillment_record.commitLineItem('item');
            fulfillment_record.commitLineItem('inventory');
      }
}
 var id = nlapiSubmitRecord(fulfillment_record, true, false);

由于每个代码示例它应该创建两个批次的每个项目,但它才刚刚建立1的最后一个即XZY2。

netsuite suitescript inventory
1个回答
2
投票
fulfillment_record.setCurrentLineItemValue('item', 'itemreceive', 'F');
subrecord.setCurrentLineItemValue('inventoryassignment', 'itemreceive ', 'F');

不需要标注项目得到明确假的,如果你要实现它。

subrecord.commitLineItem('inventorydetail');

您可以只提交子表线,因为inventorydetail不是一个子表,它不是必需的。

subrecord.commit();

你并不需要明确地承诺子记录,因为子记录被NetSuite公司时,会自动保存父记录保存。

subrecord.setCurrentLineItemValue('inventoryassignment', 'quantity', 2);

在这里,您试图提交inventorydetails数量比上履行行定义更多。

在SuiteScript2上面的代码的一个例子。

注:我发现NetSuite公司的一些限制它不允许设置在动态模式下库存的细节,所以我用非动态模式

var poid = 15513;
var sublistcount = 2;

var fromrecord;
var fromid;
var torecord;
var trecord;
var qty;
fromrecord = 'purchaseorder';
fromid = poid;
torecord = 'itemreceipt';

fulfillment_record = record.transform({
  fromType: fromrecord,
  fromId: fromid,
  toType: torecord,
  isDynamic: false
});

var sublistCount = fulfillment_record.getLineCount({ sublistId: 'item' });

for (var i = 0; i < sublistcount; i++) {
  var warehousequantity = 2;

  fulfillment_record.setSublistValue({ sublistId: 'item', fieldId: 'quantity', value: warehousequantity, line: i });

  var subrecord = fulfillment_record.getSublistSubrecord({ sublistId: 'item', fieldId: 'inventorydetail', line: i });
  if (subrecord) {
    // first insert a new line
    for (var j = 0; j < warehousequantity; j++) {
      subrecord.insertLine({ sublistId: 'inventoryassignment', line: j });
      // set inventory quantity
      subrecord.setSublistValue({ sublistId: 'inventoryassignment', fieldId: 'quantity', value: 1, line: j });
      // set serialnumber
      subrecord.setSublistValue({ sublistId: 'inventoryassignment',fieldId: 'serialnumbers', value: 'XZY' + i + j , line: j });
    }

  // don't commit/submit/save subrecord explicitly
  // since NetSuite saves the sub-record when you save parent record
  }

  // since the record in non-dynamic mode
  // we don't need to commit line
}
var id = fulfillment_record.save();
© www.soinside.com 2019 - 2024. All rights reserved.