инвентаризация netsuite suitescript2.0 - PullRequest
0 голосов
/ 17 сентября 2018

Мне кажется, что я немного расстроен, я написал приложение, которое позволяет моему клиенту выполнять инвентаризацию, но не может обновить запись инвентаризации новыми значениями счетчика для каждого элемента.

Я пытался обновить значение countquantity напрямую, но это игнорируется, сейчас я пытаюсь загрузить запись, указанную в countline, но, похоже, это тоже не работает.

Myкод выглядит следующим образом (написано на TypeScript):

/**
 * Update a InventoryCount with a new set of counts
 * @parameters
 * {
 *     service: inventorycount,
 *     method: update,
 *     id: 12345,
 *     inventory: [{
 *         upccode: 98765,
 *         total: 543
 *     }]
 * }
 */
public update() {
    const rec = Record.load({
        type: Record.Type.INVENTORY_COUNT,
        id: this.parameters.id,
        isDynamic: true
    });

    this.parameters.inventory.forEach(item => {
        this.updateLine(rec, item);
    });

    return rec.save();
}

/**
 * Update a single item within the sublist of an inventory count.
 * We update the memo field and the try update the quantity counted.
 *
 * @param rec   the inventorycount record loaded in update
 * @param item  the item object loaded from parameters
 */
private updateLine(rec, item) {
    // fetch the internalid from the upccode
    const internalId = this.upccodeToInternalid(item.upccode);

    // fetch the line number by the given item internal id
    const itemLine = rec.findSublistLineWithValue({
        sublistId: "item",
        fieldId: "item",
        value: internalId
    });

    // select the line to make modifications on
    rec.selectLine({
        sublistId: "item",
        line: itemLine
    });

    // get the current memo so we can append to it
    const currentMemo = rec.getCurrentSublistValue({
        sublistId: "item",
        fieldId: "memo"
    });

    // update the memo field with our new string
    rec.setCurrentSublistValue({
        sublistId: "item",
        fieldId: "memo",
        value: this.mergeMemo(currentMemo, item.areas)
    });

    // get the current item count and append our new count
    const currentQuantity = rec.getCurrentSublistValue({
        sublistId: "item",
        fieldId: "countquantity"
    });

    const newQuantity = currentQuantity + item.total;

    rec.commitLine({sublistId: "item"});
    this.setCount(rec, newQuantity, itemLine);
}

/**
 * Set a new count value for the item provided
 * 
 * @param rec   the inventorycount record containing the item
 * @param value the new value we would like to save for the item count
 * @param iline the sublist item line for the item to be modified
 */
private setCount(rec, value, iline) {
    // select the line to make modifications on
    rec.selectLine({
        sublistId: "item",
        line: iline
    });

    // get the record with the count quantity
    const countId = rec.getCurrentSublistValue({
        sublistId: "item",
        fieldId: "countline"
    });

    this.filters = [];

    this.filters.push(
        Search.createFilter({
            name: "line",
            operator: Search.Operator.EQUALTO,
            values: countId.toString()
        })
    );

    const srch = Search.create({
        type: Search.Type.TRANSACTION,
        filters: this.filters,
        columns: [
            "internalid",
            "quantity",
            "line"
        ]
    });

    let intid;
    srch.run().each(r => {
        intid = r.getValue('internalid');
        return true;
    });

    const crec = Record.load({
        type: Record.Type.INVENTORY_COUNT,
        id: intid,
        isDynamic: false
    });
    crec.setValue('quantity', value);

    return crec.save();
}

Бонусная карма для всех, кто также может обновить статус инвентарного счета.

1 Ответ

0 голосов
/ 19 сентября 2018

Существует ряд проблем с вашим кодом.

  1. Похоже, что вы загружаете одну и ту же запись инвентаризации в методе update () и в методе setCount ().
  2. Если вы планируете это как общий метод, у меня есть подозрение, что ваш метод штрих-кода для внутреннего идентификатора сожрет управление.Поскольку ваш код работает с одной транзакцией инвентарного подсчета, вы должны загружать и кэшировать штрих-коды в одном поиске всех элементов транзакций.
  3. Я до сих пор не понимаю, откуда вы получаете отсчет.Это не значение списка инвентаризации, если в 2018.2
* 1010 не указано что-то совершенно новое. Может помочь следующий фрагмент кода.Это работает в окне консоли.Обратите внимание, что если вы используете ячейки, вам также необходимо убедиться, что у вас есть правильная ячейка и правильная строка.Если вы работаете с сериализованными или пронумерованными элементами, вам нужно будет ввести countdetail subrecords
require(['N/record'], function(record) {
    var countRec = record.load({
        type: 'inventorycount',
        id: 9946,
        isDynamic: true
    });
    console.log(countRec.getLineCount('item'));
    countRec.selectLine({
        sublistId: 'item',
        line: 0
    });
    console.log(countRec.getSublistValue({
        sublistId: 'item',
        line: 0,
        fieldId: 'countquantity'
    }) + 'in bin: ' + countRec.getCurrentSublistValue({
        sublistId: 'item',
        fieldId: 'binnumber'
    }));
    try {
        var detailRec = countRec.getCurrentSublistSubrecord({
            sublistId: 'item',
            fieldId: 'countdetail'
        }); // only for serialized and lot numbered items
        console.log(JSON.stringify(detailRec));
    } catch (e) {
        console.error(e);
    }
    countRec.setCurrentSublistValue({
        sublistId: 'item',
        fieldId: 'countquantity',
        value: 44
    });
    countRec.commitLine({
        sublistId: 'item'
    });
    console.log(countRec.save());
}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...