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
相关产品推荐
相关产品推荐

