netsuite - Suitescript 仅针对销售订单上已履行的项目开具发票
问题描述
我对suitescript相当陌生,想构建一个脚本,该脚本按循环计划运行,并且仅基于项目履行的发票(即发票和项目履行之间存在一对一的关系,但可能是一对多的关系销售订单和发票/项目履行)。
我能够成功运行将销售订单全部转换为发票的脚本-但这包括销售订单上的所有项目,而不仅仅是已履行的项目(我们的业务中有很多情况只发生部分履行然后必须关闭订单)。目前,根据我的研究,我无法找到成功创建此脚本的其他示例。我最初的想法是以某种方式将销售订单上的“qtyfulfilled”存储在一个包含项目的数组中,并以此创建发票。但是对我来说,转换功能似乎是保留销售订单和发票之间链接的最佳方式。
var invoice = record.transform({
fromType: record.Type.SALES_ORDER,
fromID: salesOrderId,
toType: record.Type.INVOICE,
isDynamic: true
});
这将返回包含销售订单中所有项目的发票,而不仅仅是已履行的项目。
编辑:
我实现了建议的代码版本,我只是迭代销售订单的行并将发票上的每一行数量替换为“fulfilledquantity” - 但是我意识到当数量为零时,发票似乎仍在将该行存储在一个零值。
在发票脚本的下游,我通过 NS 集成将发票记录传递给我们的 EDI 提供商。通过我的脚本创建的发票映射到 EDI 810(发票记录),其中未履行的行项目的数量行为 0,这会导致 EDI 文件中的错误。
我编写了以下内容以在数量之后遍历发票行并删除零数量行,但出现以下错误:“name”:“USER_ERROR”,“message”:“请选择要添加的项目” -
for (var k = 0; k < lineCount; k++) {
var currentInvoiceLineQuantity = newInvoice.getSublistValue ({
sublistId: 'item',
fieldId: 'quantity',
line: k
});
if(currentInvoiceLineQuantity === 0){
newInvoice.removeSublistSubrecord({
sublistId: 'item',
fieldid: 'item',
line: k
});
k--;
lineCount--;
}
}
解决方案
将销售订单转换为发票后,遍历行并将数量更改为仅对已履行的金额开票。
下面的示例来自一个用 SS1.0 编写的遗留脚本,但可以很容易地转换为 SS2.0。
var lineCount = invoice.getLineItemCount('item');
for (var i = 1; i <= lineCount; i++) {
const quantity = invoice.getLineItemValue('item', 'quantity', i);
const remaining = invoice.getLineItemValue('item', 'quantityremaining', i);
invoice.setLineItemValue('item', 'quantity', i, quantity - remaining);
}
推荐阅读
- angular - OpenLayers - LayerSwitcher 改变可见性
- python - 与生物学有关的列表理解
- javascript - 矩阵方程的 JS 正则表达式
- javascript - 如何将不可删除的日志添加到 Devtools 控制台?
- python - 每次我在刽子手游戏中再次play_again 时,如何才能生成一个新单词?
- excel - Windows 升级后 Excel VBA 的奇怪宏行为
- python - 如何设置 PipelineJob 的运行名称
- mongodb - 通过mongoDB中的元素字段获取具体元素
- c# - 使用服务帐户通过 Google 身份验证获取 Youtube 流
- python - Python中数据集的第一次分析-多标准