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

NetSuite集成数据提取:Sales Orders、Items与Invoices关联问询

刚处理过类似的NetSuite集成需求,给你梳理下核心对象和关联逻辑,应该能帮到你:

NetSuite中销售订单、物料与发票的对象及关联关系

一、核心对应对象

NetSuite里这些业务数据都对应特定的记录类型,具体如下:

  • 销售订单(Sales Orders):对应salesorder记录类型,属于transaction(交易)大类,唯一标识常用internalid(内部ID)或tranid(外部订单号)。
  • 物料(Items):基础记录类型是item,下分多个子类型(比如inventoryitem库存物料、noninventoryitem非库存物料、serviceitem服务项等),用internalid或itemid(物料编码)作为唯一标识。
  • 发票(Invoices):对应invoice记录类型,同样属于transaction大类,和销售订单同属交易类单据。

二、对象间的关联方式

1. 销售订单 ↔ 物料

销售订单的物料明细存在item子列表中,每个子列表行对应一个物料条目:

  • 子列表的item字段存储物料的internalid,直接关联到item记录;
  • 同时子列表还包含该物料在订单中的属性:quantity(数量)、rate(单价)、amount(金额)、description(描述)等;
  • 反向查询的话,你可以通过物料的transactions关联找到所有包含该物料的销售订单(Saved Search里可配置)。

2. 销售订单 ↔ 发票

发票通常由销售订单生成,两者的关联非常直接:

  • 发票记录的createdfrom字段存储源销售订单的internalid,通过这个字段可以直接追溯到对应的销售订单;
  • 如果是部分开票,发票的item子列表里会有origline字段,存储销售订单子列表的行号,用来匹配具体的物料行;
  • 反向查询销售订单关联的发票,可以创建Saved Search,用Transaction > Created From过滤器指向目标销售订单ID,或者在SuiteScript中通过关联搜索获取。

3. 发票 ↔ 物料

和销售订单类似,发票的物料明细也存在item子列表:

  • 子列表的item字段关联物料的internalid;
  • 如果发票是从销售订单生成的,子列表的origitem字段会对应销售订单里的物料ID,确保物料信息的一致性;
  • 同样可以通过物料的transactions关联找到所有包含该物料的发票。

三、实用示例(SuiteScript 2.x)

如果用代码来获取关联数据,比如查询某销售订单的关联物料和发票:

/**
 * 加载销售订单并获取关联物料
 */
const loadSalesOrderWithItems = (soId) => {
    const salesOrder = record.load({
        type: record.Type.SALES_ORDER,
        id: soId
    });

    const itemCount = salesOrder.getLineCount({sublistId: 'item'});
    const items = [];
    for (let i = 0; i < itemCount; i++) {
        items.push({
            itemId: salesOrder.getSublistValue({sublistId: 'item', fieldId: 'item', line: i}),
            quantity: salesOrder.getSublistValue({sublistId: 'item', fieldId: 'quantity', line: i}),
            amount: salesOrder.getSublistValue({sublistId: 'item', fieldId: 'amount', line: i})
        });
    }
    console.log('销售订单关联物料:', items);
};

/**
 * 查询销售订单对应的发票
 */
const searchInvoicesFromSO = (soId) => {
    const invoiceSearch = search.create({
        type: search.Type.INVOICE,
        filters: [
            ['createdfrom', 'anyof', soId]
        ],
        columns: ['tranid', 'total', 'trandate']
    });

    const invoices = [];
    invoiceSearch.run().each(result => {
        invoices.push({
            invoiceNumber: result.getValue('tranid'),
            totalAmount: result.getValue('total'),
            invoiceDate: result.getValue('trandate')
        });
        return true;
    });
    console.log('销售订单关联发票:', invoices);
};

// 调用示例
loadSalesOrderWithItems(12345);
searchInvoicesFromSO(12345);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:08:02