仅针对销售订单中已完成项目的Suitescript发票

时间:2019-07-09 19:40:13

标签: netsuite suitescript suitescript2.0

我对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”:“请选择要添加的项目”-< / p>

    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--;

                    }

                }   

2 个答案:

答案 0 :(得分:0)

将销售订单转换为发票后,遍历各行并更改数量,以仅对已完成的金额进行发票。

下面的示例来自用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);
}

答案 1 :(得分:0)

如果在“物料履行”的“提交后”用户事件中执行此操作,则可以将相关的销售订单转换为发票,然后向后浏览行时间,并删除未履行的行。

您应该对照已发货的数量检查数量,并且可能需要具有为未完成的项目开票的逻辑(我是这样做的,无论是订单的第一个履行还是没有更多的行要装运。)

最后,您可能需要处理运费收费逻辑,以对每个履行收取运费或对履行的运费收取最高原始销售订单的运费。