2

I am trying to automate doing an Adjust worksheet using a restlet in netsuite with the code below:

/**
 * @NApiVersion 2.0
 * @NScriptType Restlet
 * @NModuleScope SameAccount
 */

define([
    'N/record','N/format',
], function(record,format) {
    function postInv(data){
    var recordObj = record.create({
        type: "inventoryworksheet",
        isDynamic: true
    });

    var location = data.location;
    var account = data.account;
    var region = data.region;
    var countedby = data.countedby;
    var datee = format.parse({value: data.date, type: format.Type.DATE});
    var memo = data.memo;
    var trans_order = data.trans_order;
    var inv_type = data.inv_type;
    var item_group = data.group;

    recordObj.setValue({
        fieldId:'trandate',
        value:datee
    });

    recordObj.setValue({
        fieldId:'location',
        value:location
    });
    recordObj.setValue({
        fieldId:'account',
        value:account
    });
    recordObj.setValue({
        fieldId:'department',
        value:region
    });
    recordObj.setValue({
        fieldId:'lastinday',
        value:trans_order
    });
    recordObj.setValue({
        fieldId:'custbody44',
        value:inv_type
    });

    recordObj.setValue({
        fieldId:'memo',
        value:memo
    });
    recordObj.setValue({
        fieldId:'custbody43',
        value:countedby
    });
    recordObj.setValue({
        fieldId:'Item_PARENT',
        value:item_group
    });

    var items = data.items;
    var recordsublist = recordObj.getSublist({sublistId: "invt"});
    var linecount = recordObj.getLineCount({sublistId: 'invt'});
    
    for (i = 0; i < items.length; i++) {
        //Search for items line number
        var lineNumber = recordObj.findSublistLineWithValue({
            sublistId: 'invt',
            fieldId: 'invtid',
            value: items[i][0]
            });
                 
        recordObj.selectLine({
            sublistId: 'invt',
            line: lineNumber
            });

            recordObj.setCurrentSublistValue({
            sublistId: 'invt',
            fieldId: 'invtnewqty',
            value: items[i][1]
            });

            recordObj.commitLine({
            sublistId:'invt'
            });
    }
    var recordId = recordObj.save({
        enableSourcing: false,
        ignoreMandatoryFields: false
        });

    var r = record.load({
        type: 'inventorytransfer',
        id: recordId,
        isDynamic: true,
    });
    return r;

    }
    return {post:postInv};
});

Since Netsuite hasnt implemented a proper way to Adjust worksheet programmatically, I figured its possible to load the whole Adjust worksheet then loop through all the records and only set the values I want, just like I would in the UI. However this is a bit slow since 10,000 records are loaded by default. I have over 16k items so this also means some wont show in the loaded records.

To make this simpler I tried to only load a single group by specifying the sub-item field using

recordObj.setValue({
        fieldId:'Item_PARENT',
        value:item_group
    });

However it seems this is just ignored and the whole 10,000 records is still loaded but I think its because the record doesn't change dynamically like in the UI once its been loaded.

Is there a way I can specify the group to load right at the start?

West
  • 2,350
  • 5
  • 31
  • 67
  • The Adjust Inventory Worksheet is not something you would normally be doing on a regular basis. Would usually compare inventory levels (current and what you want it to be) and generate lines for an inventory adjustment to sync with an external system or count. – Brian Apr 14 '21 at 18:33
  • @Brian Where I am the adjust worksheet gets done everyday hence the need for automation. I believe its because sometimes transactions are not entered straightaway so a count could be done today and entered then someone from a separate branch comes in and enters a transaction from 2 days ago. Adjust worksheet is preventing issues with this – West Apr 15 '21 at 00:51

0 Answers0