You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SuiteScript 2.0多发货单转移订单转收货单问题求助

解决SuiteScript 2.0中多发货单转移订单转收货单的问题

问题核心

当转移订单(TO)关联多个发货单时,直接用record.transform生成的收货单只会默认关联第一个发货单,且收货单的item子列表属于静态列表,无法通过脚本直接增删行,defaultValues参数也无法直接添加商品行。

正确解决方案

通过关联所有对应发货单的方式,让系统自动合并所有发货单的商品到收货单中,具体步骤如下:

  1. 查询转移订单对应的所有发货单
    用搜索获取目标TO关联的所有转移发货单(Transfer Shipment)的内部ID。
  2. 生成初始收货单
    调用record.transform从TO生成收货单,此时会自动关联第一个发货单。
  3. 添加剩余发货单关联
    在收货单的shipments子列表中添加其余发货单,系统会自动将这些发货单的商品合并到item子列表。
  4. 保存收货单

代码示例

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 */
define(['N/record', 'N/search'], function(record, search) {
    function createCombinedItemReceipt(toId) {
        // 1. 查询转移订单关联的所有发货单
        var shipmentSearch = search.create({
            type: search.Type.TRANSFER_SHIPMENT,
            filters: [['createdfrom', 'anyof', toId]],
            columns: ['internalid']
        });

        var shipmentIds = [];
        shipmentSearch.run().each(function(result) {
            shipmentIds.push(result.getValue('internalid'));
            return true;
        });

        if (shipmentIds.length === 0) {
            throw new Error('转移订单未关联任何发货单');
        }

        // 2. 生成初始收货单(默认关联第一个发货单)
        var itemReceipt = record.transform({
            fromType: record.Type.TRANSFER_ORDER,
            fromId: toId,
            toType: record.Type.ITEM_RECEIPT,
            isDynamic: true
        });

        // 3. 给收货单添加剩余的发货单关联
        for (var i = 1; i < shipmentIds.length; i++) {
            itemReceipt.selectNewLine({
                sublistId: 'shipments'
            });
            itemReceipt.setCurrentSublistValue({
                sublistId: 'shipments',
                fieldId: 'id',
                value: shipmentIds[i]
            });
            itemReceipt.commitLine({
                sublistId: 'shipments'
            });
        }

        // 4. 保存收货单
        var receiptId = itemReceipt.save({
            enableSourcing: true,
            ignoreMandatoryFields: false
        });

        return receiptId;
    }

    // 示例调用(根据实际业务场景调整触发逻辑)
    // createCombinedItemReceipt(orderingTransaction.internalId);

    return {
        // 根据脚本类型暴露对应入口函数,比如beforeSubmit等
    };
});

关键说明

  • 收货单的item子列表是静态列表,数据完全来源于关联的发货单,因此不能直接手动添加商品行,必须通过关联发货单让系统自动填充。
  • shipments子列表是可编辑的动态子列表,添加发货单行后,系统会自动将对应发货单的商品合并到item子列表,重复商品会自动合并数量。
  • 确保脚本拥有操作转移订单、发货单和收货单相关字段的权限。

内容的提问来源于stack exchange,提问作者NettleRick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 02:50:02